Skip to content

Commit

Permalink
Introduce a lot of copy-pasted code for master classes
Browse files Browse the repository at this point in the history
  • Loading branch information
beevee committed Dec 1, 2016
1 parent d6ae228 commit 7591628
Show file tree
Hide file tree
Showing 3 changed files with 200 additions and 7 deletions.
2 changes: 1 addition & 1 deletion cmd/konfurbot/schedule.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
date: 01.12.2016
date: 02.12.2016
night: 20:00
events:
- type: food
Expand Down
96 changes: 91 additions & 5 deletions telegram/fsm.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,12 @@ const (
talkLongCommand = "☠ С тизерами"
talkShortCommand = "🕊 Без тизеров"

masterCommand = "💥 Мастер-классы"
masterCommand = "💥 Мастер-классы"
masterNowCommand = "▶️ Сейчас"
masterNextCommand = "⏭ Скоро"
masterAllCommand = "🔢 Все"
masterLongCommand = "🌪 С тизерами"
masterShortCommand = "🌴 Без тизеров"

funCommand = "🍾 Развлечения"
funDayCommand = "🍼 Утром"
Expand All @@ -40,7 +45,9 @@ const (
talkState = "talk"
talkNowState = "talknow"
talkNextState = "talknext"
talkAllState = "talkall"
masterState = "master"
masterNowState = "masternow"
masterNextState = "masternext"
transferState = "transfer"
transferMainState = "transfermain"
transferColorState = "transfercolor"
Expand Down Expand Up @@ -90,6 +97,36 @@ var stateMessageOptions = map[string]*telebot.SendOptions{
ParseMode: telebot.ModeMarkdown,
},

masterState: &telebot.SendOptions{
ReplyMarkup: telebot.ReplyMarkup{
CustomKeyboard: [][]string{
[]string{masterNowCommand, masterNextCommand, masterAllCommand},
},
ResizeKeyboard: true,
},
ParseMode: telebot.ModeMarkdown,
},

masterNowState: &telebot.SendOptions{
ReplyMarkup: telebot.ReplyMarkup{
CustomKeyboard: [][]string{
[]string{masterLongCommand, masterShortCommand},
},
ResizeKeyboard: true,
},
ParseMode: telebot.ModeMarkdown,
},

masterNextState: &telebot.SendOptions{
ReplyMarkup: telebot.ReplyMarkup{
CustomKeyboard: [][]string{
[]string{masterLongCommand, masterShortCommand},
},
ResizeKeyboard: true,
},
ParseMode: telebot.ModeMarkdown,
},

transferState: &telebot.SendOptions{
ReplyMarkup: telebot.ReplyMarkup{
CustomKeyboard: [][]string{
Expand Down Expand Up @@ -144,6 +181,12 @@ func initStateMachine() *fsm.FSM {
{Name: talkLongCommand, Src: []string{talkNowState, talkNextState}, Dst: startState},
{Name: talkShortCommand, Src: []string{talkNowState, talkNextState}, Dst: startState},
{Name: talkAllCommand, Src: []string{talkState}, Dst: startState},
{Name: masterCommand, Src: []string{startState}, Dst: masterState},
{Name: masterNowCommand, Src: []string{masterState}, Dst: masterNowState},
{Name: masterNextCommand, Src: []string{masterState}, Dst: masterNextState},
{Name: masterLongCommand, Src: []string{masterNowState, masterNextState}, Dst: startState},
{Name: masterShortCommand, Src: []string{masterNowState, masterNextState}, Dst: startState},
{Name: masterAllCommand, Src: []string{masterState}, Dst: startState},
{Name: transferCommand, Src: []string{startState}, Dst: transferState},
{Name: transferMainCommand, Src: []string{transferState}, Dst: transferMainState},
{Name: transferColorCommand, Src: []string{transferState}, Dst: transferColorState},
Expand All @@ -155,8 +198,12 @@ func initStateMachine() *fsm.FSM {
{Name: returnToStartCommand, Src: []string{startState}, Dst: startState},
{
Name: unknownCommand,
Src: []string{welcomeState, startState, talkState, talkNowState, talkNextState, transferState, transferMainState, transferColorState, funState},
Dst: startState,
Src: []string{welcomeState, startState,
talkState, talkNowState, talkNextState,
masterState, masterNowState, masterNextState,
transferState, transferMainState, transferColorState,
funState},
Dst: startState,
},
},

Expand Down Expand Up @@ -209,8 +256,47 @@ func initStateMachine() *fsm.FSM {
return bot.telebot.SendMessage(chat, makeResponseFromEvents(events, false), stateMessageOptions[e.Dst])
}),

masterCommand: wrapCallback(func(e *fsm.Event, chat telebot.Chat, bot *Bot) error {
return bot.telebot.SendMessage(chat, "Окей, какие мастер-классы?", stateMessageOptions[e.Dst])
}),

masterNowCommand: wrapCallback(func(e *fsm.Event, chat telebot.Chat, bot *Bot) error {
return bot.telebot.SendMessage(chat, "Их может оказаться довольно много. Тизеры надо?", stateMessageOptions[e.Dst])
}),

masterNextCommand: wrapCallback(func(e *fsm.Event, chat telebot.Chat, bot *Bot) error {
return bot.telebot.SendMessage(chat, "Их может оказаться довольно много. Тизеры надо?", stateMessageOptions[e.Dst])
}),

masterLongCommand: wrapCallback(func(e *fsm.Event, chat telebot.Chat, bot *Bot) error {
var events []konfurbot.Event
switch e.Src {
case masterNowState:
events = bot.ScheduleStorage.GetCurrentEventsByType("master", time.Now().In(bot.Timezone))
case masterNextState:
events = bot.ScheduleStorage.GetNextEventsByType("master", time.Now().In(bot.Timezone), time.Hour)
}
return bot.telebot.SendMessage(chat, makeResponseFromEvents(events, true), stateMessageOptions[e.Dst])
}),

masterShortCommand: wrapCallback(func(e *fsm.Event, chat telebot.Chat, bot *Bot) error {
var events []konfurbot.Event
switch e.Src {
case masterNowState:
events = bot.ScheduleStorage.GetCurrentEventsByType("master", time.Now().In(bot.Timezone))
case masterNextState:
events = bot.ScheduleStorage.GetNextEventsByType("master", time.Now().In(bot.Timezone), time.Hour)
}
return bot.telebot.SendMessage(chat, makeResponseFromEvents(events, false), stateMessageOptions[e.Dst])
}),

masterAllCommand: wrapCallback(func(e *fsm.Event, chat telebot.Chat, bot *Bot) error {
events := bot.ScheduleStorage.GetEventsByType("master")
return bot.telebot.SendMessage(chat, makeResponseFromEvents(events, false), stateMessageOptions[e.Dst])
}),

transferCommand: wrapCallback(func(e *fsm.Event, chat telebot.Chat, bot *Bot) error {
return bot.telebot.SendMessage(chat, "Окей, куда поедем?", stateMessageOptions[e.Dst])
return bot.telebot.SendMessage(chat, "Окей, на каком маршруте поедем?", stateMessageOptions[e.Dst])
}),

transferMainCommand: wrapCallback(func(e *fsm.Event, chat telebot.Chat, bot *Bot) error {
Expand Down
109 changes: 108 additions & 1 deletion telegram/telegram_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,113 @@ func TestTelegram(t *testing.T) {
})
})

Convey("пользователь спрашивает про мастер-классы", func() {
mockTelebot.EXPECT().SendMessage(chat, "Окей, какие мастер-классы?",
hasButtons("▶️ Сейчас", "⏭ Скоро", "🔢 Все"))
bot.handleMessage(telebot.Message{Chat: chat, Text: "💥 Мастер-классы"})

Convey("которые идут сейчас", func() {
mockTelebot.EXPECT().SendMessage(chat, "Их может оказаться довольно много. Тизеры надо?",
hasButtons("🌪 С тизерами", "🌴 Без тизеров"))
bot.handleMessage(telebot.Message{Chat: chat, Text: "▶️ Сейчас"})

Convey("с тизерами, и что-то сейчас идет", func() {
mockStorage.EXPECT().GetCurrentEventsByType("master", gomock.Any()).Return([]konfurbot.Event{
konfurbot.Event{Type: "master", Short: "WAT", Long: "WAAAAT", Start: &start, Finish: &finish},
konfurbot.Event{Type: "master", Short: "WAT 2", Long: "WAAAAT 22", Start: &start, Finish: &finish},
})
mockTelebot.EXPECT().SendMessage(chat, "17:00 — 19:00: *WAT*\nWAAAAT\n\n17:00 — 19:00: *WAT 2*\nWAAAAT 22\n\n",
hasButtons("🌶 Еда", "🔥 Доклады", "💥 Мастер-классы", "🍾 Развлечения", "🚜 Трансфер"))
bot.handleMessage(telebot.Message{Chat: chat, Text: "🌪 С тизерами"})
})

Convey("с тизерами, и сейчас ничего не идет", func() {
mockStorage.EXPECT().GetCurrentEventsByType("master", gomock.Any()).Return([]konfurbot.Event{})
mockTelebot.EXPECT().SendMessage(chat, "Ничего нет :(",
hasButtons("🌶 Еда", "🔥 Доклады", "💥 Мастер-классы", "🍾 Развлечения", "🚜 Трансфер"))
bot.handleMessage(telebot.Message{Chat: chat, Text: "🌴 Без тизеров"})
})

Convey("без тизеров, и сейчас что-то идет", func() {
mockStorage.EXPECT().GetCurrentEventsByType("master", gomock.Any()).Return([]konfurbot.Event{
konfurbot.Event{Type: "master", Short: "WAT", Long: "WAAAAT", Start: &start, Finish: &finish},
konfurbot.Event{Type: "master", Short: "WAT 2", Long: "WAAAAT 22", Start: &start, Finish: &finish},
})
mockTelebot.EXPECT().SendMessage(chat, "17:00 — 19:00: *WAT*\n\n17:00 — 19:00: *WAT 2*\n\n",
hasButtons("🌶 Еда", "🔥 Доклады", "💥 Мастер-классы", "🍾 Развлечения", "🚜 Трансфер"))
bot.handleMessage(telebot.Message{Chat: chat, Text: "🌴 Без тизеров"})
})

Convey("пользователь пишет нам ерунду", func() {
mockTelebot.EXPECT().SendMessage(chat, "Я не понимаю эту команду. Давай попробуем еще раз с начала.",
hasButtons("🌶 Еда", "🔥 Доклады", "💥 Мастер-классы", "🍾 Развлечения", "🚜 Трансфер"))
bot.handleMessage(telebot.Message{Chat: chat, Text: "gibberish"})
})
})

Convey("которые начнутся в ближайший час", func() {
mockTelebot.EXPECT().SendMessage(chat, "Их может оказаться довольно много. Тизеры надо?",
hasButtons("🌪 С тизерами", "🌴 Без тизеров"))
bot.handleMessage(telebot.Message{Chat: chat, Text: "⏭ Скоро"})

Convey("с тизерами", func() {
mockStorage.EXPECT().GetNextEventsByType("master", gomock.Any(), time.Hour).Return([]konfurbot.Event{
konfurbot.Event{Type: "master", Short: "WAT", Long: "WAAAAT", Start: &start, Finish: &finish},
konfurbot.Event{Type: "master", Short: "WAT 2", Long: "WAAAAT 22", Start: &start, Finish: &finish},
})
mockTelebot.EXPECT().SendMessage(chat, "17:00 — 19:00: *WAT*\nWAAAAT\n\n17:00 — 19:00: *WAT 2*\nWAAAAT 22\n\n",
hasButtons("🌶 Еда", "🔥 Доклады", "💥 Мастер-классы", "🍾 Развлечения", "🚜 Трансфер"))
bot.handleMessage(telebot.Message{Chat: chat, Text: "🌪 С тизерами"})
})

Convey("без тизеров", func() {
mockStorage.EXPECT().GetNextEventsByType("master", gomock.Any(), time.Hour).Return([]konfurbot.Event{
konfurbot.Event{Type: "master", Short: "WAT", Long: "WAAAAT", Start: &start, Finish: &finish},
konfurbot.Event{Type: "master", Short: "WAT 2", Long: "WAAAAT 22", Start: &start, Finish: &finish},
})
mockTelebot.EXPECT().SendMessage(chat, "17:00 — 19:00: *WAT*\n\n17:00 — 19:00: *WAT 2*\n\n",
hasButtons("🌶 Еда", "🔥 Доклады", "💥 Мастер-классы", "🍾 Развлечения", "🚜 Трансфер"))
bot.handleMessage(telebot.Message{Chat: chat, Text: "🌴 Без тизеров"})
})

Convey("пользователь пишет нам ерунду", func() {
mockTelebot.EXPECT().SendMessage(chat, "Я не понимаю эту команду. Давай попробуем еще раз с начала.",
hasButtons("🌶 Еда", "🔥 Доклады", "💥 Мастер-классы", "🍾 Развлечения", "🚜 Трансфер"))
bot.handleMessage(telebot.Message{Chat: chat, Text: "gibberish"})
})
})

Convey("все (у них есть спикер, но нет места проведения)", func() {
mockStorage.EXPECT().GetEventsByType("master").Return([]konfurbot.Event{
konfurbot.Event{
Type: "talk",
Speaker: "Александр Казаков",
Short: "WAT",
Long: "WAAAAT",
Start: &start,
Finish: &finish,
},
konfurbot.Event{
Type: "talk",
Speaker: "Василий Петров",
Short: "WAT 2",
Long: "WAAAAT 22",
Start: &start,
Finish: &finish,
},
})
mockTelebot.EXPECT().SendMessage(chat, "17:00 — 19:00: *WAT* (Александр Казаков)\n\n17:00 — 19:00: *WAT 2* (Василий Петров)\n\n",
hasButtons("🌶 Еда", "🔥 Доклады", "💥 Мастер-классы", "🍾 Развлечения", "🚜 Трансфер"))
bot.handleMessage(telebot.Message{Chat: chat, Text: "🔢 Все"})
})

Convey("пользователь пишет нам ерунду", func() {
mockTelebot.EXPECT().SendMessage(chat, "Я не понимаю эту команду. Давай попробуем еще раз с начала.",
hasButtons("🌶 Еда", "🔥 Доклады", "💥 Мастер-классы", "🍾 Развлечения", "🚜 Трансфер"))
bot.handleMessage(telebot.Message{Chat: chat, Text: "gibberish"})
})
})

Convey("пользователь спрашивает про развлечения", func() {
mockTelebot.EXPECT().SendMessage(chat, "Утром или вечером?",
hasButtons("🍼 Утром", "🍸 Вечером"))
Expand Down Expand Up @@ -195,7 +302,7 @@ func TestTelegram(t *testing.T) {
})

Convey("пользователь спрашивает про трансфер", func() {
mockTelebot.EXPECT().SendMessage(chat, "Окей, куда поедем?",
mockTelebot.EXPECT().SendMessage(chat, "Окей, на каком маршруте поедем?",
hasButtons("🏎 Дежурный", "🚲 Цветные"))
bot.handleMessage(telebot.Message{Chat: chat, Text: "🚜 Трансфер"})

Expand Down

0 comments on commit 7591628

Please sign in to comment.