generated from VLADIMIR/template
add questions
This commit is contained in:
@@ -4,7 +4,7 @@ type IStory interface {
|
||||
GetStory(scenario *Story, codes []string) *Story
|
||||
}
|
||||
|
||||
// История - это введение и набор точек
|
||||
// История - это введение, набор точек и вопросы дела
|
||||
type Story struct {
|
||||
|
||||
// Введение - то, что игрок получает в начале игры
|
||||
@@ -12,6 +12,24 @@ type Story struct {
|
||||
|
||||
// Список точек
|
||||
Places []*Place `json:"places"`
|
||||
|
||||
// Вопросы дела - список вопросов, на которые команда должна ответить
|
||||
Questions []*Question `json:"questions,omitempty"`
|
||||
}
|
||||
|
||||
// Вопрос дела - вопрос, который автор сценария добавляет вместе с
|
||||
// правильным ответом; команда отвечает на вопросы в конце игры
|
||||
type Question struct {
|
||||
|
||||
// Код - идентификатор вопроса, используется при отправке ответов
|
||||
Code string `json:"code"`
|
||||
|
||||
// Текст вопроса
|
||||
Text string `json:"text"`
|
||||
|
||||
// Правильный ответ - виден только автору и организаторам,
|
||||
// команде не передаётся
|
||||
Answer string `json:"answer"`
|
||||
}
|
||||
|
||||
// Введение - текст и аудио, которые игрок получает в начале игры
|
||||
|
||||
@@ -29,6 +29,15 @@ func (s *story) GetStory(
|
||||
Audio: scenario.Introduction.Audio,
|
||||
}
|
||||
}
|
||||
// Вопросы дела передаются команде всегда — с начала игры; правильные
|
||||
// ответы (Answer) команде не передаются: они нужны только автору и
|
||||
// организаторам при оценке ответов.
|
||||
for _, question := range scenario.Questions {
|
||||
story.Questions = append(story.Questions, &Question{
|
||||
Code: question.Code,
|
||||
Text: s.cleaner.ClearText(question.Text),
|
||||
})
|
||||
}
|
||||
for i, code := range codes {
|
||||
var prevPlace *Place
|
||||
if i > 0 {
|
||||
|
||||
@@ -807,3 +807,113 @@ func Test_story_GetStory(t *testing.T) {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func Test_story_GetStoryQuestions(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
scenario *Story
|
||||
codes []string
|
||||
want *Story
|
||||
}{
|
||||
{
|
||||
name: "Вопросы передаются команде с начала игры (без действий)",
|
||||
scenario: &Story{
|
||||
Questions: []*Question{
|
||||
{
|
||||
Code: "q1",
|
||||
Text: "Кто убийца?",
|
||||
Answer: "Дворецкий",
|
||||
},
|
||||
},
|
||||
},
|
||||
codes: []string{},
|
||||
want: &Story{
|
||||
Questions: []*Question{
|
||||
{
|
||||
Code: "q1",
|
||||
Text: "Кто убийца?",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "Правильные ответы не передаются команде",
|
||||
scenario: &Story{
|
||||
Questions: []*Question{
|
||||
{
|
||||
Code: "q1",
|
||||
Text: "Вопрос 1.([секрет])",
|
||||
Answer: "Ответ 1",
|
||||
},
|
||||
{
|
||||
Code: "q2",
|
||||
Text: "Вопрос 2",
|
||||
Answer: "Ответ 2",
|
||||
},
|
||||
},
|
||||
},
|
||||
codes: []string{},
|
||||
want: &Story{
|
||||
Questions: []*Question{
|
||||
{
|
||||
Code: "q1",
|
||||
Text: "Вопрос 1.",
|
||||
},
|
||||
{
|
||||
Code: "q2",
|
||||
Text: "Вопрос 2",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "Вопросы передаются вместе с точками и введением",
|
||||
scenario: &Story{
|
||||
Introduction: &Introduction{
|
||||
Text: "Введение.",
|
||||
Audio: "intro.mp3",
|
||||
},
|
||||
Places: []*Place{
|
||||
{
|
||||
Code: "Ы",
|
||||
Name: "Название точки",
|
||||
Text: "Текст точки.",
|
||||
},
|
||||
},
|
||||
Questions: []*Question{
|
||||
{
|
||||
Code: "q1",
|
||||
Text: "Вопрос 1",
|
||||
Answer: "Ответ 1",
|
||||
},
|
||||
},
|
||||
},
|
||||
codes: []string{"Ы"},
|
||||
want: &Story{
|
||||
Introduction: &Introduction{
|
||||
Text: "Введение.",
|
||||
Audio: "intro.mp3",
|
||||
},
|
||||
Places: []*Place{
|
||||
{
|
||||
Code: "Ы",
|
||||
Name: "Название точки",
|
||||
Text: "Текст точки.",
|
||||
},
|
||||
},
|
||||
Questions: []*Question{
|
||||
{
|
||||
Code: "q1",
|
||||
Text: "Вопрос 1",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
got := NewStory(cleaner.NewCleaner()).GetStory(tt.scenario, tt.codes)
|
||||
assert.Equal(t, got, tt.want)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user