mirror of https://github.com/gabehf/trivia-api.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
164 lines
3.9 KiB
164 lines
3.9 KiB
package trivia_test
|
|
|
|
import (
|
|
"bytes"
|
|
"reflect"
|
|
"slices"
|
|
"testing"
|
|
|
|
"github.com/gabehf/trivia-api/trivia"
|
|
)
|
|
|
|
func TestGetRandomQuestion(t *testing.T) {
|
|
// on OK path, GetTrivia must return the question in our test data
|
|
tq, _ := Q.GetRandomQuestion("world history")
|
|
if tq == nil {
|
|
t.Fatal("trivia question must not be nil")
|
|
}
|
|
if !reflect.DeepEqual(tq, expect) {
|
|
t.Errorf("returned question does not match expectation, got %v", tq)
|
|
}
|
|
|
|
// with no category specified, GetTrivia must pick a random category and fetch a question
|
|
// with only one question in our test data, it is the same question from before
|
|
tq, _ = Q.GetRandomQuestion("")
|
|
if tq == nil {
|
|
t.Fatal("trivia question must not be nil")
|
|
}
|
|
if !reflect.DeepEqual(tq, expect) {
|
|
t.Errorf("returned question does not match expectation, got %v", tq)
|
|
}
|
|
|
|
// on FAIL path, GetTrivia must return nil to indicate no questions are found
|
|
tq, _ = Q.GetRandomQuestion("Geography")
|
|
if tq != nil {
|
|
t.Errorf("expected nil, got %v", tq)
|
|
}
|
|
}
|
|
|
|
func TestGetQuestionById(t *testing.T) {
|
|
// on OK path, GetTrivia must return the question in our test data
|
|
tq := Q.GetQuestionById("world History|0")
|
|
if tq == nil {
|
|
t.Fatal("trivia question must not be nil")
|
|
}
|
|
if !reflect.DeepEqual(tq, expect) {
|
|
t.Errorf("returned question does not match expectation, got %v", tq)
|
|
}
|
|
|
|
// FAIL path: malformed id
|
|
tq = Q.GetQuestionById("hey")
|
|
if tq != nil {
|
|
t.Errorf("expected nil, got %v", tq)
|
|
}
|
|
// FAIL path: invalid category
|
|
tq = Q.GetQuestionById("hey|0")
|
|
if tq != nil {
|
|
t.Errorf("expected nil, got %v", tq)
|
|
}
|
|
// FAIL path: invalid index
|
|
tq = Q.GetQuestionById("world history|9")
|
|
if tq != nil {
|
|
t.Errorf("expected nil, got %v", tq)
|
|
}
|
|
}
|
|
|
|
func TestLoad(t *testing.T) {
|
|
json := []byte(`
|
|
{
|
|
"world history": [
|
|
{
|
|
"category": "World History",
|
|
"question": "How many years did the 100 years war last?",
|
|
"answer": "116",
|
|
"format": "MultipleChoice",
|
|
"choices": [
|
|
"116",
|
|
"87",
|
|
"12",
|
|
"205"
|
|
]
|
|
},
|
|
{
|
|
"category": "World History",
|
|
"question": "True or False: John Wilkes Booth assassinated Abraham Lincoln.",
|
|
"answer": "True",
|
|
"format": "TrueFalse"
|
|
}
|
|
],
|
|
"geography": [
|
|
{
|
|
"category": "Geography",
|
|
"question": "What is the capital city of Japan?",
|
|
"answer": "Tokyo",
|
|
"format": "MultipleChoice",
|
|
"choices": [
|
|
"Beijing",
|
|
"Seoul",
|
|
"Bangkok",
|
|
"Tokyo"
|
|
]
|
|
},
|
|
{
|
|
"category": "Geography",
|
|
"question": "True or False: The Amazon Rainforest is located in Africa.",
|
|
"answer": "False",
|
|
"format": "TrueFalse"
|
|
}
|
|
]
|
|
}
|
|
`)
|
|
expectCategories := []string{"world history", "geography"}
|
|
expectQuestions := map[string][]trivia.Question{
|
|
"world history": {
|
|
{
|
|
Question: "How many years did the 100 years war last?",
|
|
Format: "MultipleChoice",
|
|
Answer: "116",
|
|
Category: "World History",
|
|
Choices: []string{
|
|
"116",
|
|
"87",
|
|
"12",
|
|
"205",
|
|
},
|
|
},
|
|
{
|
|
Question: "True or False: John Wilkes Booth assassinated Abraham Lincoln.",
|
|
Format: "TrueFalse",
|
|
Answer: "True",
|
|
Category: "World History",
|
|
},
|
|
},
|
|
"geography": {
|
|
{
|
|
Question: "What is the capital city of Japan?",
|
|
Format: "MultipleChoice",
|
|
Answer: "Tokyo",
|
|
Category: "Geography",
|
|
Choices: []string{"Beijing", "Seoul", "Bangkok", "Tokyo"},
|
|
},
|
|
{
|
|
Question: "True or False: The Amazon Rainforest is located in Africa.",
|
|
Format: "TrueFalse",
|
|
Answer: "False",
|
|
Category: "Geography",
|
|
},
|
|
},
|
|
}
|
|
qq := new(trivia.Questions)
|
|
qq.Init()
|
|
err := qq.Load(bytes.NewReader(json))
|
|
if err != nil {
|
|
t.Errorf("expected error to be nil, got %v", err)
|
|
}
|
|
for _, cat := range expectCategories {
|
|
if !slices.Contains(qq.Categories, cat) {
|
|
t.Errorf("expected category %s not present", cat)
|
|
}
|
|
}
|
|
if !reflect.DeepEqual(qq.M, expectQuestions) {
|
|
t.Errorf("unexpected question map, got %v", qq.M)
|
|
}
|
|
}
|