diff --git a/server.go b/server.go index 293d8fc..ee4b83e 100644 --- a/server.go +++ b/server.go @@ -5,6 +5,7 @@ import ( "io/ioutil" "net/http" + "git.andreafazzi.eu/andrea/testhub/client" "git.andreafazzi.eu/andrea/testhub/logger" "git.andreafazzi.eu/andrea/testhub/models" "git.andreafazzi.eu/andrea/testhub/store" @@ -17,18 +18,13 @@ type QuizHubCollectorServer struct { http.Handler } -type Response struct { - Status string `json:"success"` - Content interface{} `json:"content"` -} - func NewQuizHubCollectorServer(store store.QuizHubCollectorStore) *QuizHubCollectorServer { ps := new(QuizHubCollectorServer) ps.store = store router := http.NewServeMux() - router.Handle("/tests", logger.WithLogging(http.HandlerFunc(ps.testHandler))) + router.Handle("/quizzes", logger.WithLogging(http.HandlerFunc(ps.testHandler))) ps.Handler = router @@ -39,7 +35,7 @@ func (ps *QuizHubCollectorServer) testHandler(w http.ResponseWriter, r *http.Req switch r.Method { case http.MethodGet: w.Header().Set("content-type", jsonContentType) - json.NewEncoder(w).Encode(ps.readAllQuizs(w, r)) + json.NewEncoder(w).Encode(ps.readAllQuizzes(w, r)) case http.MethodPost: w.WriteHeader(http.StatusAccepted) @@ -47,12 +43,12 @@ func (ps *QuizHubCollectorServer) testHandler(w http.ResponseWriter, r *http.Req } } -func (ps *QuizHubCollectorServer) readAllQuizs(w http.ResponseWriter, r *http.Request) *Response { +func (ps *QuizHubCollectorServer) readAllQuizzes(w http.ResponseWriter, r *http.Request) *client.Response { tests, err := ps.store.ReadAllQuizzes() if err != nil { - return &Response{"error", err.Error()} + return &client.Response{Status: "error", Content: err.Error()} } - return &Response{"success", tests} + return &client.Response{Status: "success", Content: tests} } func (ps *QuizHubCollectorServer) createQuiz(w http.ResponseWriter, r *http.Request) *models.Quiz { @@ -60,7 +56,7 @@ func (ps *QuizHubCollectorServer) createQuiz(w http.ResponseWriter, r *http.Requ if err != nil { panic(err) } - createQuizReq := new(store.CreateQuizRequest) + createQuizReq := new(client.CreateQuizRequest) err = json.Unmarshal(body, &createQuizReq) if err != nil { panic(err) diff --git a/server_integration_test.go b/server_integration_test.go index 3e17e21..102d92e 100644 --- a/server_integration_test.go +++ b/server_integration_test.go @@ -6,6 +6,7 @@ import ( "net/http/httptest" "strings" + "git.andreafazzi.eu/andrea/testhub/client" "git.andreafazzi.eu/andrea/testhub/models" "git.andreafazzi.eu/andrea/testhub/store" "github.com/remogatto/prettytest" @@ -15,7 +16,7 @@ type integrationTestSuite struct { prettytest.Suite } -func (t *integrationTestSuite) TestCreateAndReadAllQuizzes() { +func (t *integrationTestSuite) TestQuizCreateAndReadAll() { server := NewQuizHubCollectorServer(store.NewMemoryQuizHubCollectorStore()) // POST a new question using a JSON payload @@ -31,7 +32,7 @@ func (t *integrationTestSuite) TestCreateAndReadAllQuizzes() { ] } ` - request, _ := http.NewRequest(http.MethodPost, "/tests", strings.NewReader(payload)) + request, _ := http.NewRequest(http.MethodPost, "/quizzes", strings.NewReader(payload)) response := httptest.NewRecorder() server.ServeHTTP(response, request) @@ -51,12 +52,12 @@ func (t *integrationTestSuite) TestCreateAndReadAllQuizzes() { t.True(returnedTest.Question.ID != "", "Question ID should not be empty") t.True(returnedTest.Answers[0].ID != "", "Answer ID should not be empty") - request, _ = http.NewRequest(http.MethodGet, "/tests", nil) + request, _ = http.NewRequest(http.MethodGet, "/quizzes", nil) response = httptest.NewRecorder() server.ServeHTTP(response, request) - decodedResponse := new(TestResponse) + decodedResponse := new(client.QuizReadAllResponse) err = json.Unmarshal(response.Body.Bytes(), &decodedResponse) if err != nil { diff --git a/server_test.go b/server_test.go index 2aae7a6..d2d0a39 100644 --- a/server_test.go +++ b/server_test.go @@ -9,9 +9,9 @@ import ( "reflect" "testing" + "git.andreafazzi.eu/andrea/testhub/client" "git.andreafazzi.eu/andrea/testhub/logger" "git.andreafazzi.eu/andrea/testhub/models" - "git.andreafazzi.eu/andrea/testhub/store" "github.com/remogatto/prettytest" ) @@ -19,16 +19,11 @@ type testSuite struct { prettytest.Suite } -type TestResponse struct { - Status string `json:"success"` - Content []*models.Quiz `json:"content"` -} - type StubTestHubCollectorStore struct { tests []*models.Quiz } -func (store *StubTestHubCollectorStore) CreateQuiz(test *store.CreateQuizRequest) *models.Quiz { +func (store *StubTestHubCollectorStore) CreateQuiz(test *client.CreateQuizRequest) *models.Quiz { return nil } @@ -49,7 +44,7 @@ func (t *testSuite) BeforeAll() { } func (t *testSuite) TestGETQuestions() { - expectedResult := &TestResponse{ + expectedResult := &client.QuizReadAllResponse{ Status: "success", Content: []*models.Quiz{ { @@ -68,7 +63,7 @@ func (t *testSuite) TestGETQuestions() { server := NewQuizHubCollectorServer(store) - request, _ := http.NewRequest(http.MethodGet, "/tests", nil) + request, _ := http.NewRequest(http.MethodGet, "/quizzes", nil) response := httptest.NewRecorder() server.ServeHTTP(response, request) @@ -81,7 +76,7 @@ func (t *testSuite) TestGETQuestions() { t.Equal(http.StatusOK, response.Code) } -func getResponse(body io.Reader) (response *TestResponse) { +func getResponse(body io.Reader) (response *client.QuizReadAllResponse) { err := json.NewDecoder(body).Decode(&response) if err != nil { panic(fmt.Errorf("Unable to parse response from server %q into slice of Test, '%v'", body, err)) @@ -90,6 +85,6 @@ func getResponse(body io.Reader) (response *TestResponse) { return } -func testsAreEqual(got, want *TestResponse) bool { +func testsAreEqual(got, want *client.QuizReadAllResponse) bool { return reflect.DeepEqual(got, want) } diff --git a/store/memory.go b/store/memory.go index c4bdab5..5509898 100644 --- a/store/memory.go +++ b/store/memory.go @@ -5,6 +5,7 @@ import ( "fmt" "sync" + "git.andreafazzi.eu/andrea/testhub/client" "git.andreafazzi.eu/andrea/testhub/models" ) @@ -39,7 +40,7 @@ func (s *MemoryQuizHubCollectorStore) ReadAllQuizzes() ([]*models.Quiz, error) { return result, nil } -func (s *MemoryQuizHubCollectorStore) CreateQuiz(r *CreateQuizRequest) *models.Quiz { +func (s *MemoryQuizHubCollectorStore) CreateQuiz(r *client.CreateQuizRequest) *models.Quiz { questionID := hash(r.Question.Text) test := new(models.Quiz) q, ok := s.questions[questionID] diff --git a/store/store.go b/store/store.go index 00c99f9..dfdbd96 100644 --- a/store/store.go +++ b/store/store.go @@ -1,24 +1,11 @@ package store import ( + "git.andreafazzi.eu/andrea/testhub/client" "git.andreafazzi.eu/andrea/testhub/models" ) -type CreateQuestionRequest struct { - Text string `json:"text"` -} - -type CreateAnswerRequest struct { - Text string - Correct bool -} - -type CreateQuizRequest struct { - Question *CreateQuestionRequest `json:"question"` - Answers []*CreateAnswerRequest `json:"answers"` -} - type QuizHubCollectorStore interface { ReadAllQuizzes() ([]*models.Quiz, error) - CreateQuiz(r *CreateQuizRequest) *models.Quiz + CreateQuiz(r *client.CreateQuizRequest) *models.Quiz } diff --git a/tests/hurl/create_test.hurl b/tests/hurl/create_test.hurl deleted file mode 100644 index 9088728..0000000 --- a/tests/hurl/create_test.hurl +++ /dev/null @@ -1,10 +0,0 @@ -POST http://localhost:3000/tests -{ - "question": {"text": "Test of Question 1"}, - "answers": [ - {"text": "Text of the answer 1", "correct": true}, - {"text": "Text of the answer 2"}, - {"text": "Text of the answer 3"}, - {"text": "Text of the answer 4"} - ] -} diff --git a/tests/hurl/get_all_tests.hurl b/tests/hurl/get_all_tests.hurl deleted file mode 100644 index 7270418..0000000 --- a/tests/hurl/get_all_tests.hurl +++ /dev/null @@ -1 +0,0 @@ -GET http://localhost:3000/tests