51 lines
963 B
Go
51 lines
963 B
Go
package main
|
|
|
|
import (
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"os"
|
|
"path"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestHTTPPostQuestionAnswers(t *testing.T) {
|
|
p := path.Join(t.TempDir(), "db.yaml")
|
|
os.WriteFile(p, []byte("{}"), os.ModePerm)
|
|
db, err := newYamlDB(p)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
w := httptest.NewRecorder()
|
|
r := httptest.NewRequest(
|
|
http.MethodPost,
|
|
"/api/questions/QID/answers",
|
|
strings.NewReader(`{"answer":"a", "passed": false}`),
|
|
)
|
|
r.SetBasicAuth("u", "")
|
|
|
|
withAuth(withDB(httpPostQuestionAnswers, db))(w, r)
|
|
|
|
if w.Code != http.StatusOK {
|
|
t.Error(w.Code)
|
|
}
|
|
|
|
_, got := db.LastAnswer("u", "QID")
|
|
if got == (Answer{}) {
|
|
t.Error("no answer pushed:", got)
|
|
}
|
|
if got.Q != "QID" {
|
|
t.Error(got.Q)
|
|
} else if got.A != "a" {
|
|
t.Error(got.A)
|
|
} else if time.Since(time.Unix(0, got.TS)) > time.Minute {
|
|
t.Error(got.TS)
|
|
} else if got.Author != "u" {
|
|
t.Error(got.Author)
|
|
} else if got.Pass != false {
|
|
t.Error(got.Pass)
|
|
}
|
|
}
|