2023-08-02 21:11:58 +04:00
|
|
|
|
package tg
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"log"
|
|
|
|
|
"os"
|
2023-08-03 11:27:36 +04:00
|
|
|
|
"strconv"
|
2023-08-02 21:11:58 +04:00
|
|
|
|
"testing"
|
2023-08-05 13:40:24 +04:00
|
|
|
|
"time"
|
2023-08-02 22:22:36 +04:00
|
|
|
|
|
|
|
|
|
"git.l9labs.ru/anufriev.g.a/l9_stud_bot/modules/database"
|
2023-08-03 13:39:59 +04:00
|
|
|
|
"git.l9labs.ru/anufriev.g.a/l9_stud_bot/modules/ssau_parser"
|
2023-08-02 22:22:36 +04:00
|
|
|
|
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
|
2023-08-02 21:11:58 +04:00
|
|
|
|
)
|
|
|
|
|
|
2023-08-02 22:22:36 +04:00
|
|
|
|
var TestDB = database.DB{
|
|
|
|
|
User: "test",
|
|
|
|
|
Pass: "TESTpass1!",
|
|
|
|
|
Schema: "testdb",
|
|
|
|
|
}
|
|
|
|
|
|
2023-08-03 11:27:36 +04:00
|
|
|
|
var TestUser = tgbotapi.User{
|
|
|
|
|
ID: 12345,
|
|
|
|
|
FirstName: "Grzegorz",
|
|
|
|
|
LastName: "Brzbrz",
|
|
|
|
|
}
|
|
|
|
|
|
2023-08-02 21:11:58 +04:00
|
|
|
|
func TestCheckEnv(t *testing.T) {
|
|
|
|
|
if err := CheckEnv(); err != nil {
|
|
|
|
|
log.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Добавляем несуществующий ключ
|
|
|
|
|
env_keys = append(env_keys, "LOST_KEY")
|
|
|
|
|
if err := CheckEnv(); err != nil {
|
|
|
|
|
log.Println(err)
|
|
|
|
|
env_keys = env_keys[:len(env_keys)-1]
|
|
|
|
|
}
|
|
|
|
|
}
|
2023-08-02 22:22:36 +04:00
|
|
|
|
|
2023-08-05 13:40:24 +04:00
|
|
|
|
func initTestBot(files database.LogFiles) *Bot {
|
2023-08-02 21:11:58 +04:00
|
|
|
|
if err := CheckEnv(); err != nil {
|
|
|
|
|
log.Fatal(err)
|
|
|
|
|
}
|
2023-08-05 13:40:24 +04:00
|
|
|
|
bot, err := InitBot(files, TestDB, os.Getenv("TELEGRAM_APITOKEN"))
|
2023-08-02 21:11:58 +04:00
|
|
|
|
if err != nil {
|
|
|
|
|
log.Fatal(err)
|
|
|
|
|
}
|
2023-08-02 22:22:36 +04:00
|
|
|
|
_, err = bot.DB.Where("l9id >= 0").Delete(&database.TgUser{})
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Fatal(err)
|
|
|
|
|
}
|
2023-08-03 13:13:09 +04:00
|
|
|
|
_, err = bot.DB.Where("teacherid >= 0").Delete(&database.Teacher{})
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
_, err = bot.DB.Where("groupid >= 0").Delete(&database.Group{})
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Fatal(err)
|
|
|
|
|
}
|
2023-08-05 13:40:24 +04:00
|
|
|
|
_, err = bot.DB.Where("lessonid >= 0").Delete(&database.Lesson{})
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Fatal(err)
|
|
|
|
|
}
|
2023-08-02 22:22:36 +04:00
|
|
|
|
return bot
|
|
|
|
|
}
|
|
|
|
|
func TestInitBot(t *testing.T) {
|
2023-08-05 13:40:24 +04:00
|
|
|
|
files := database.OpenLogs()
|
|
|
|
|
defer files.CloseAll()
|
|
|
|
|
initTestBot(files)
|
2023-08-02 21:11:58 +04:00
|
|
|
|
|
|
|
|
|
// Тестируем неправильный токен
|
2023-08-05 13:40:24 +04:00
|
|
|
|
_, err := InitBot(files, TestDB, os.Getenv("TELEGRAM_APITOKEN")+"oops")
|
2023-08-02 21:11:58 +04:00
|
|
|
|
if err != nil {
|
|
|
|
|
log.Println(err)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestInitUser(t *testing.T) {
|
2023-08-05 13:40:24 +04:00
|
|
|
|
files := database.OpenLogs()
|
|
|
|
|
defer files.CloseAll()
|
|
|
|
|
bot := initTestBot(files)
|
2023-08-02 21:11:58 +04:00
|
|
|
|
|
2023-08-02 22:22:36 +04:00
|
|
|
|
// Я новенький
|
2023-08-03 11:27:36 +04:00
|
|
|
|
_, err := InitUser(bot.DB, &TestUser)
|
2023-08-02 22:22:36 +04:00
|
|
|
|
if err != nil {
|
|
|
|
|
log.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
// Я уже Смешарик
|
2023-08-03 11:27:36 +04:00
|
|
|
|
_, err = InitUser(bot.DB, &TestUser)
|
2023-08-02 22:22:36 +04:00
|
|
|
|
if err != nil {
|
|
|
|
|
log.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-08-03 13:13:09 +04:00
|
|
|
|
var dialog = []string{
|
|
|
|
|
"/start",
|
2023-08-05 13:40:24 +04:00
|
|
|
|
"1000",
|
2023-08-03 13:39:59 +04:00
|
|
|
|
"Батурин",
|
2023-08-05 13:40:24 +04:00
|
|
|
|
"100",
|
2023-08-03 13:13:09 +04:00
|
|
|
|
"Балякин",
|
2023-08-03 13:39:59 +04:00
|
|
|
|
"aaa",
|
|
|
|
|
"aaa",
|
2023-08-03 13:13:09 +04:00
|
|
|
|
}
|
|
|
|
|
|
2023-08-02 22:22:36 +04:00
|
|
|
|
func TestHandleUpdate(t *testing.T) {
|
2023-08-05 13:40:24 +04:00
|
|
|
|
files := database.OpenLogs()
|
|
|
|
|
defer files.CloseAll()
|
|
|
|
|
bot := initTestBot(files)
|
2023-08-02 22:22:36 +04:00
|
|
|
|
|
2023-08-03 11:27:36 +04:00
|
|
|
|
user := TestUser
|
|
|
|
|
user.ID, _ = strconv.ParseInt(os.Getenv("TELEGRAM_TEST_USER"), 0, 64)
|
2023-08-05 13:40:24 +04:00
|
|
|
|
now, _ := time.Parse("2006-01-02 15:04 -07", "2023-03-06 11:20 +04")
|
2023-08-02 22:22:36 +04:00
|
|
|
|
update := tgbotapi.Update{
|
|
|
|
|
Message: &tgbotapi.Message{
|
2023-08-03 11:27:36 +04:00
|
|
|
|
From: &user,
|
2023-08-05 13:40:24 +04:00
|
|
|
|
Date: int(now.Unix()),
|
2023-08-02 22:22:36 +04:00
|
|
|
|
},
|
|
|
|
|
}
|
2023-08-03 15:49:51 +04:00
|
|
|
|
var messages []tgbotapi.Message
|
2023-08-03 16:57:27 +04:00
|
|
|
|
ssau_parser.HeadURL = "http://127.0.0.1:5000/prod"
|
2023-08-03 15:49:51 +04:00
|
|
|
|
// Бот общается с ботом
|
2023-08-03 13:39:59 +04:00
|
|
|
|
for i, query := range dialog {
|
|
|
|
|
if i == len(dialog)-1 {
|
|
|
|
|
ssau_parser.HeadURL = "https://sasau.ru"
|
|
|
|
|
}
|
2023-08-03 13:13:09 +04:00
|
|
|
|
update.Message.Text = query
|
2023-08-03 15:49:51 +04:00
|
|
|
|
msg, err := bot.HandleUpdate(update)
|
2023-08-03 13:13:09 +04:00
|
|
|
|
if err != nil {
|
|
|
|
|
log.Fatal(err)
|
|
|
|
|
}
|
2023-08-03 15:49:51 +04:00
|
|
|
|
messages = append(messages, msg)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Бот нажимает на кнопки за пользователя
|
|
|
|
|
update = tgbotapi.Update{
|
|
|
|
|
CallbackQuery: &tgbotapi.CallbackQuery{
|
|
|
|
|
From: &user,
|
|
|
|
|
Message: &messages[3],
|
|
|
|
|
Data: *messages[3].ReplyMarkup.InlineKeyboard[0][0].CallbackData,
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
_, err := bot.HandleUpdate(update)
|
|
|
|
|
if err != nil {
|
2023-08-05 13:40:24 +04:00
|
|
|
|
log.Println(err)
|
2023-08-02 22:22:36 +04:00
|
|
|
|
}
|
2023-08-03 16:57:27 +04:00
|
|
|
|
|
|
|
|
|
// Галя, отмена!
|
|
|
|
|
update = tgbotapi.Update{
|
|
|
|
|
CallbackQuery: &tgbotapi.CallbackQuery{
|
|
|
|
|
From: &user,
|
|
|
|
|
Message: &messages[4],
|
|
|
|
|
Data: "cancel",
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
_, err = bot.HandleUpdate(update)
|
|
|
|
|
if err != nil {
|
2023-08-05 13:40:24 +04:00
|
|
|
|
log.Println(err)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var times = []string{
|
|
|
|
|
"2023-03-06 11:40 +04",
|
|
|
|
|
"2023-03-06 11:40 +04",
|
|
|
|
|
"2023-03-06 13:10 +04",
|
|
|
|
|
"2023-03-06 13:35 +04",
|
|
|
|
|
"2023-03-06 15:20 +04",
|
|
|
|
|
"2023-03-06 16:55 +04",
|
|
|
|
|
"2023-03-07 16:55 +04",
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestSummary(t *testing.T) {
|
|
|
|
|
files := database.OpenLogs()
|
|
|
|
|
defer files.CloseAll()
|
|
|
|
|
bot := initTestBot(files)
|
|
|
|
|
|
|
|
|
|
user := TestUser
|
|
|
|
|
user.ID, _ = strconv.ParseInt(os.Getenv("TELEGRAM_TEST_USER"), 0, 64)
|
|
|
|
|
update := tgbotapi.Update{
|
|
|
|
|
Message: &tgbotapi.Message{
|
|
|
|
|
From: &user,
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
ssau_parser.HeadURL = "http://127.0.0.1:5000/prod"
|
|
|
|
|
// Ещё немного общения в разное время
|
|
|
|
|
for _, te := range times {
|
|
|
|
|
now, _ := time.Parse("2006-01-02 15:04 -07", te)
|
|
|
|
|
update.Message.Text = dialog[1]
|
|
|
|
|
update.Message.Date = int(now.Unix())
|
|
|
|
|
_, err := bot.HandleUpdate(update)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Fatal(err)
|
|
|
|
|
}
|
2023-08-03 16:57:27 +04:00
|
|
|
|
}
|
2023-08-02 21:11:58 +04:00
|
|
|
|
}
|