Files
yarr/src/server/routes_test.go
2021-05-27 13:16:03 +01:00

115 lines
2.8 KiB
Go

package server
import (
"fmt"
"io"
"log"
"net/http"
"net/http/httptest"
"os"
"reflect"
"testing"
"github.com/nkanaev/yarr/src/storage"
)
func TestStatic(t *testing.T) {
handler := NewServer(nil, "127.0.0.1:8000").handler()
url := "/static/javascripts/app.js"
recorder := httptest.NewRecorder()
request := httptest.NewRequest("GET", url, nil)
handler.ServeHTTP(recorder, request)
if recorder.Result().StatusCode != 200 {
t.FailNow()
}
}
func TestStaticWithBase(t *testing.T) {
server := NewServer(nil, "127.0.0.1:8000")
server.BasePath = "/sub"
handler := server.handler()
url := "/sub/static/javascripts/app.js"
recorder := httptest.NewRecorder()
request := httptest.NewRequest("GET", url, nil)
handler.ServeHTTP(recorder, request)
if recorder.Result().StatusCode != 200 {
t.FailNow()
}
}
func TestStaticBanTemplates(t *testing.T) {
handler := NewServer(nil, "127.0.0.1:8000").handler()
url := "/static/login.html"
recorder := httptest.NewRecorder()
request := httptest.NewRequest("GET", url, nil)
handler.ServeHTTP(recorder, request)
if recorder.Result().StatusCode != 404 {
t.FailNow()
}
}
func TestIndexGzipped(t *testing.T) {
log.SetOutput(io.Discard)
db, _ := storage.New(":memory:")
log.SetOutput(os.Stderr)
handler := NewServer(db, "127.0.0.1:8000").handler()
url := "/"
recorder := httptest.NewRecorder()
request := httptest.NewRequest("GET", url, nil)
request.Header.Set("accept-encoding", "gzip")
handler.ServeHTTP(recorder, request)
response := recorder.Result()
if response.StatusCode != 200 {
t.FailNow()
}
if response.Header.Get("content-encoding") != "gzip" {
t.Errorf("invalid content-encoding header: %#v", response.Header.Get("content-encoding"))
}
if response.Header.Get("content-type") != "text/html" {
t.Errorf("invalid content-type header: %#v", response.Header.Get("content-type"))
}
}
func TestFeedIcons(t *testing.T) {
log.SetOutput(io.Discard)
db, _ := storage.New(":memory:")
icon := []byte("test")
feed := db.CreateFeed("", "", "", "", nil)
db.UpdateFeedIcon(feed.Id, &icon)
log.SetOutput(os.Stderr)
recorder := httptest.NewRecorder()
url := fmt.Sprintf("/api/feeds/%d/icon", feed.Id)
request := httptest.NewRequest("GET", url, nil)
handler := NewServer(db, "127.0.0.1:8000").handler()
handler.ServeHTTP(recorder, request)
response := recorder.Result()
if response.StatusCode != http.StatusOK {
t.Fatal()
}
body, _ := io.ReadAll(response.Body)
if !reflect.DeepEqual(body, icon) {
t.Fatal()
}
if response.Header.Get("Etag") == "" {
t.Fatal()
}
recorder2 := httptest.NewRecorder()
request2 := httptest.NewRequest("GET", url, nil)
request2.Header.Set("If-None-Match", response.Header.Get("Etag"))
handler.ServeHTTP(recorder2, request2)
response2 := recorder2.Result()
if response2.StatusCode != http.StatusNotModified {
t.Fatal("got", response2.StatusCode)
}
}