Add Question model
This commit is contained in:
parent
5915efbeb3
commit
b09c8fae85
5 changed files with 41 additions and 70 deletions
1
go.mod
1
go.mod
|
@ -3,6 +3,7 @@ module git.andreafazzi.eu/andrea/testhub
|
||||||
go 1.17
|
go 1.17
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
github.com/google/uuid v1.3.0 // indirect
|
||||||
github.com/kr/pretty v0.2.1 // indirect
|
github.com/kr/pretty v0.2.1 // indirect
|
||||||
github.com/kr/text v0.1.0 // indirect
|
github.com/kr/text v0.1.0 // indirect
|
||||||
github.com/remogatto/prettytest v0.0.0-20200211072524-6d385e11dcb8 // indirect
|
github.com/remogatto/prettytest v0.0.0-20200211072524-6d385e11dcb8 // indirect
|
||||||
|
|
2
go.sum
2
go.sum
|
@ -1,3 +1,5 @@
|
||||||
|
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
|
||||||
|
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI=
|
github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI=
|
||||||
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
|
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
|
||||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||||
|
|
84
main_test.go
84
main_test.go
|
@ -18,22 +18,24 @@ type testSuite struct {
|
||||||
prettytest.Suite
|
prettytest.Suite
|
||||||
}
|
}
|
||||||
|
|
||||||
type StubPlayerStore struct {
|
type StubQuestionsStore struct {
|
||||||
scores map[string]int
|
questions map[uint]*models.Question
|
||||||
winCalls []string
|
answers map[uint]*models.Answer
|
||||||
league []models.Player
|
lastQuestionID uint
|
||||||
|
lastAnswerID uint
|
||||||
}
|
}
|
||||||
|
|
||||||
func (store *StubPlayerStore) GetPlayerScore(player string) int {
|
func (store *StubQuestionsStore) CreateQuestion(question *models.Question) *models.Question {
|
||||||
return store.scores[player]
|
id := store.lastQuestionID++
|
||||||
|
|
||||||
|
for _, answer := range question.Answers {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *StubPlayerStore) RecordWin(name string) {
|
func (store *StubQuestionsStore) GetQuestions() []*models.Question {
|
||||||
s.winCalls = append(s.winCalls, name)
|
return store.questions
|
||||||
}
|
|
||||||
|
|
||||||
func (store *StubPlayerStore) GetLeague() []models.Player {
|
|
||||||
return store.league
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRunner(t *testing.T) {
|
func TestRunner(t *testing.T) {
|
||||||
|
@ -43,60 +45,10 @@ func TestRunner(t *testing.T) {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *testSuite) TestGETPlayers() {
|
func (t *testSuite) TestGETQuestions() {
|
||||||
tests := []struct {
|
expectedResult := []*models.Question{
|
||||||
name string
|
&{Name: "Cleo", Wins: 20},
|
||||||
expectedScore string
|
&{Name: "Chris", Wins: 10},
|
||||||
expectedHTTPStatus int
|
|
||||||
}{
|
|
||||||
{"Pepper", "20", http.StatusOK},
|
|
||||||
{"Floyd", "10", http.StatusOK},
|
|
||||||
{"Apollo", "0", http.StatusNotFound},
|
|
||||||
}
|
|
||||||
|
|
||||||
store := &StubPlayerStore{
|
|
||||||
map[string]int{
|
|
||||||
"Pepper": 20,
|
|
||||||
"Floyd": 10,
|
|
||||||
},
|
|
||||||
nil,
|
|
||||||
[]models.Player{},
|
|
||||||
}
|
|
||||||
|
|
||||||
server := NewPlayerServer(store)
|
|
||||||
|
|
||||||
for _, test := range tests {
|
|
||||||
request, _ := http.NewRequest(http.MethodGet, "/players/"+test.name, nil)
|
|
||||||
response := httptest.NewRecorder()
|
|
||||||
|
|
||||||
server.ServeHTTP(response, request)
|
|
||||||
t.Equal(test.expectedScore, response.Body.String())
|
|
||||||
t.Equal(test.expectedHTTPStatus, response.Code)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
func (t *testSuite) TestPOSTPlayers() {
|
|
||||||
store := &StubPlayerStore{
|
|
||||||
map[string]int{},
|
|
||||||
nil,
|
|
||||||
[]models.Player{},
|
|
||||||
}
|
|
||||||
|
|
||||||
server := NewPlayerServer(store)
|
|
||||||
|
|
||||||
request, _ := http.NewRequest(http.MethodPost, "/players/Pepper", nil)
|
|
||||||
response := httptest.NewRecorder()
|
|
||||||
|
|
||||||
server.ServeHTTP(response, request)
|
|
||||||
t.Equal(1, len(store.winCalls))
|
|
||||||
t.Equal(http.StatusAccepted, response.Code)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (t *testSuite) TestGETLeague() {
|
|
||||||
expectedResult := []models.Player{
|
|
||||||
{Name: "Cleo", Wins: 20},
|
|
||||||
{Name: "Chris", Wins: 10},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
store := &StubPlayerStore{
|
store := &StubPlayerStore{
|
||||||
|
|
17
models/question.go
Normal file
17
models/question.go
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
package models
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/google/uuid"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Question struct {
|
||||||
|
ID uuid.UUID
|
||||||
|
Text string
|
||||||
|
AnswerIDs []uuid.UUID
|
||||||
|
}
|
||||||
|
|
||||||
|
type Answers struct {
|
||||||
|
ID uuid.UUID
|
||||||
|
Text string
|
||||||
|
Correct bool
|
||||||
|
}
|
|
@ -4,8 +4,7 @@ import (
|
||||||
"git.andreafazzi.eu/andrea/testhub/models"
|
"git.andreafazzi.eu/andrea/testhub/models"
|
||||||
)
|
)
|
||||||
|
|
||||||
type PlayerStore interface {
|
type QuestionsStore interface {
|
||||||
GetPlayerScore(player string) int
|
GetQuestions() []*models.Question
|
||||||
RecordWin(player string)
|
CreateQuestion(question *models.Question) *models.Question
|
||||||
GetLeague() []models.Player
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue