mirror of
https://github.com/nkanaev/yarr.git
synced 2025-09-13 09:55:36 +00:00
115 lines
2.8 KiB
Go
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)
|
|
}
|
|
}
|