server_integration_test.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package main
  2. import (
  3. "encoding/json"
  4. "net/http"
  5. "net/http/httptest"
  6. "strings"
  7. "git.andreafazzi.eu/andrea/testhub/client"
  8. "git.andreafazzi.eu/andrea/testhub/models"
  9. "git.andreafazzi.eu/andrea/testhub/store"
  10. "github.com/remogatto/prettytest"
  11. )
  12. type integrationTestSuite struct {
  13. prettytest.Suite
  14. }
  15. func (t *integrationTestSuite) TestQuizCreateAndReadAll() {
  16. server := NewQuizHubCollectorServer(store.NewMemoryQuizHubCollectorStore())
  17. // POST a new question using a JSON payload
  18. payload := `
  19. {
  20. "question": {"text": "Question 1"},
  21. "answers": [
  22. {"text": "Text of the answer 1", "correct": true},
  23. {"text": "Text of the answer 2"},
  24. {"text": "Text of the answer 3"},
  25. {"text": "Text of the answer 4"}
  26. ]
  27. }
  28. `
  29. request, _ := http.NewRequest(http.MethodPost, "/quizzes", strings.NewReader(payload))
  30. response := httptest.NewRecorder()
  31. server.ServeHTTP(response, request)
  32. returnedTest := new(models.Quiz)
  33. err := json.Unmarshal(response.Body.Bytes(), returnedTest)
  34. if err != nil {
  35. t.True(err == nil, err.Error())
  36. }
  37. t.Equal("Question 1", returnedTest.Question.Text)
  38. t.Equal("Text of the answer 1", returnedTest.Answers[0].Text)
  39. t.Equal("Text of the answer 1", returnedTest.Correct.Text)
  40. t.True(returnedTest.ID != 0, "Test ID should not be 0")
  41. t.True(returnedTest.Question.ID != "", "Question ID should not be empty")
  42. t.True(returnedTest.Answers[0].ID != "", "Answer ID should not be empty")
  43. request, _ = http.NewRequest(http.MethodGet, "/quizzes", nil)
  44. response = httptest.NewRecorder()
  45. server.ServeHTTP(response, request)
  46. decodedResponse := new(client.QuizReadAllResponse)
  47. err = json.Unmarshal(response.Body.Bytes(), &decodedResponse)
  48. if err != nil {
  49. t.True(err == nil, err.Error())
  50. }
  51. t.True(len(decodedResponse.Content) == 1, "Length of returned tests should be 1")
  52. t.Equal("Question 1", decodedResponse.Content[0].Question.Text)
  53. }