probo/server/server_test.go

278 lines
6.5 KiB
Go
Raw Normal View History

2023-12-05 22:11:08 +01:00
package main
import (
"encoding/json"
"fmt"
"net/http"
"net/http/httptest"
"os"
"path/filepath"
"strings"
"testing"
"github.com/remogatto/prettytest"
)
var examPayload = `
[
{
"id": "fe0a7ee0-f31a-413d-ba81-ab5068bc4c73",
"created_at": "0001-01-01T00:00:00Z",
"updated_at": "0001-01-01T00:00:00Z",
"Participant": {
"ID": "1234",
"Firstname": "John",
"Lastname": "Smith",
"Token": 111222,
"Attributes": {
"class": "1 D LIN"
}
},
"Name": "Test session",
"Quizzes": [
{
"id": "0610939b-a1a3-4d0e-bbc4-2aae0e8ee4b9",
"created_at": "2023-11-27T17:51:53.910642221+01:00",
"updated_at": "0001-01-01T00:00:00Z",
"hash": "",
"question": {
"id": "98c0eec9-677f-464e-9e3e-864a859f29a3",
"created_at": "0001-01-01T00:00:00Z",
"updated_at": "0001-01-01T00:00:00Z",
"text": "Question text with #tag1."
},
"answers": [
{
"id": "1ab5ff1f-74c8-4efc-abdc-d03a3640f3bc",
"text": "Answer 1"
},
{
"id": "74547724-b905-476f-8cfc-6ee633f92ef3",
"text": "Answer 2"
},
{
"id": "96c1a8ee-c50c-4ebc-89e4-9f3ca356adbd",
"text": "Answer 3"
},
{
"id": "16c4b95e-64ce-4666-8cbe-b66fa59eb23b",
"text": "Answer 4"
}
],
"tags": [
{
"CreatedAt": "0001-01-01T00:00:00Z",
"UpdatedAt": "0001-01-01T00:00:00Z",
"DeletedAt": null,
"name": "#tag1"
}
],
"correct": {
"id": "1ab5ff1f-74c8-4efc-abdc-d03a3640f3bc",
"text": "Answer 1"
},
"CorrectPos": 0,
"type": 0
},
{
"id": "915818c4-b0ce-4efc-8def-7fc8d5fa7454",
"created_at": "2023-11-27T17:51:53.91077796+01:00",
"updated_at": "0001-01-01T00:00:00Z",
"hash": "",
"question": {
"id": "70793f0d-2855-4140-814e-40167464424b",
"created_at": "0001-01-01T00:00:00Z",
"updated_at": "0001-01-01T00:00:00Z",
"text": "Another question text with #tag1."
},
"answers": [
{
"id": "1ab5ff1f-74c8-4efc-abdc-d03a3640f3bc",
"text": "Answer 1"
},
{
"id": "74547724-b905-476f-8cfc-6ee633f92ef3",
"text": "Answer 2"
},
{
"id": "96c1a8ee-c50c-4ebc-89e4-9f3ca356adbd",
"text": "Answer 3"
},
{
"id": "16c4b95e-64ce-4666-8cbe-b66fa59eb23b",
"text": "Answer 4"
}
],
"tags": [
{
"CreatedAt": "0001-01-01T00:00:00Z",
"UpdatedAt": "0001-01-01T00:00:00Z",
"DeletedAt": null,
"name": "#tag1"
}
],
"correct": {
"id": "1ab5ff1f-74c8-4efc-abdc-d03a3640f3bc",
"text": "Answer 1"
},
"CorrectPos": 0,
"type": 0
}
]
},
{
"id": "12345678-abcd-efgh-ijkl-9876543210ef",
"created_at": "2023-12-01T12:00:00Z",
"updated_at": "2023-12-01T12:00:00Z",
"Participant": {
"ID": "5678",
"Firstname": "Jane",
"Lastname": "Doe",
"Token": 333444,
"Attributes": {
"class": "2 A SCI"
}
},
"Name": "Test session",
"Quizzes": [
{
"id": "22222222-abcd-efgh-ijkl-9876543210ef",
"created_at": "2023-12-01T12:00:00Z",
"updated_at": "2023-12-01T12:00:00Z",
"hash": "",
"question": {
"id": "33333333-abcd-efgh-ijkl-9876543210ef",
"created_at": "2023-12-01T12:00:00Z",
"updated_at": "2023-12-01T12:00:00Z",
"text": "Sample question text."
},
"answers": [
{
"id": "44444444-abcd-efgh-ijkl-9876543210ef",
"text": "Option 1"
},
{
"id": "55555555-abcd-efgh-ijkl-9876543210ef",
"text": "Option 2"
},
{
"id": "66666666-abcd-efgh-ijkl-9876543210ef",
"text": "Option 3"
},
{
"id": "77777777-abcd-efgh-ijkl-9876543210ef",
"text": "Option 4"
}
],
"tags": [
{
"CreatedAt": "2023-12-01T12:00:00Z",
"UpdatedAt": "2023-12-01T12:00:00Z",
"DeletedAt": null,
"name": "#tag2"
}
],
"correct": {
"id": "44444444-abcd-efgh-ijkl-9876543210ef",
"text": "Option 1"
},
"CorrectPos": 0,
"type": 0
}
]
}
]
`
type serverTestSuite struct {
prettytest.Suite
}
func TestRunner(t *testing.T) {
prettytest.Run(
t,
new(serverTestSuite),
)
}
func (t *serverTestSuite) TestCreate() {
2023-12-11 09:32:50 +01:00
DefaultDataDir = "testdata"
2023-12-05 22:11:08 +01:00
2023-12-11 09:32:50 +01:00
s, err := NewDefaultServer()
t.Nil(err)
2023-12-05 22:11:08 +01:00
2023-12-11 09:32:50 +01:00
if !t.Failed() {
request, _ := http.NewRequest(http.MethodPost, "/create", strings.NewReader(examPayload))
response := httptest.NewRecorder()
2023-12-05 22:11:08 +01:00
2023-12-11 09:32:50 +01:00
handler := http.HandlerFunc(s.createExamSessionHandler)
2023-12-05 22:11:08 +01:00
2023-12-11 09:32:50 +01:00
handler.ServeHTTP(response, request)
2023-12-05 22:11:08 +01:00
2023-12-11 09:32:50 +01:00
t.Equal(http.StatusOK, response.Code)
if !t.Failed() {
result := map[string]string{}
2023-12-05 22:11:08 +01:00
2023-12-11 09:32:50 +01:00
err := json.Unmarshal(response.Body.Bytes(), &result)
t.Nil(err)
2023-12-05 22:11:08 +01:00
2023-12-11 09:32:50 +01:00
path := filepath.Join(GetDefaultSessionDir(), result["id"])
_, err = os.Stat(path)
defer os.RemoveAll(path)
2023-12-05 22:11:08 +01:00
2023-12-11 09:32:50 +01:00
files, err := os.ReadDir(path)
t.Nil(err)
2023-12-05 22:11:08 +01:00
2023-12-11 09:32:50 +01:00
t.Equal(2, len(files))
2023-12-05 22:11:08 +01:00
2023-12-11 09:32:50 +01:00
t.Nil(err)
}
2023-12-05 22:11:08 +01:00
}
}
func (t *serverTestSuite) TestRead() {
2023-12-11 09:32:50 +01:00
DefaultDataDir = "testdata"
s, err := NewDefaultServer()
t.Nil(err)
if !t.Failed() {
request, _ := http.NewRequest(http.MethodPost, "/create", strings.NewReader(examPayload))
response := httptest.NewRecorder()
2023-12-05 22:11:08 +01:00
2023-12-11 09:32:50 +01:00
handler := http.HandlerFunc(s.createExamSessionHandler)
2023-12-05 22:11:08 +01:00
2023-12-11 09:32:50 +01:00
handler.ServeHTTP(response, request)
2023-12-05 22:11:08 +01:00
2023-12-11 09:32:50 +01:00
t.Equal(http.StatusOK, response.Code)
2023-12-05 22:11:08 +01:00
2023-12-11 09:32:50 +01:00
if !t.Failed() {
result := map[string]string{}
2023-12-05 22:11:08 +01:00
2023-12-11 09:32:50 +01:00
err := json.Unmarshal(response.Body.Bytes(), &result)
t.Nil(err)
2023-12-05 22:11:08 +01:00
2023-12-11 09:32:50 +01:00
path := filepath.Join(GetDefaultSessionDir(), result["id"])
_, err = os.Stat(path)
t.Nil(err)
2023-12-05 22:11:08 +01:00
2023-12-11 09:32:50 +01:00
if !t.Failed() {
defer os.RemoveAll(path)
2023-12-05 22:11:08 +01:00
2023-12-11 09:32:50 +01:00
request, _ := http.NewRequest(http.MethodGet, fmt.Sprintf("/%s/%s", result["id"], "111222"), nil)
response := httptest.NewRecorder()
2023-12-05 22:11:08 +01:00
2023-12-11 09:32:50 +01:00
handler := http.HandlerFunc(s.getExamHandler)
2023-12-05 22:11:08 +01:00
2023-12-11 09:32:50 +01:00
handler.ServeHTTP(response, request)
2023-12-05 22:11:08 +01:00
2023-12-11 09:32:50 +01:00
t.Equal(http.StatusOK, response.Code)
2023-12-05 22:11:08 +01:00
2023-12-11 09:32:50 +01:00
}
}
2023-12-05 22:11:08 +01:00
}
}