This repository has been archived on 2023-08-30. You can view files and clone it, but cannot push or open issues or pull requests.
l9_stud_bot/modules/tg/tg_test.go

258 lines
5.9 KiB
Go
Raw Normal View History

package tg
import (
"log"
"os"
"strconv"
"testing"
"time"
"git.l9labs.ru/anufriev.g.a/l9_stud_bot/modules/database"
"git.l9labs.ru/anufriev.g.a/l9_stud_bot/modules/ssau_parser"
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
)
var TestDB = database.DB{
User: "test",
Pass: "TESTpass1!",
Schema: "testdb",
}
var TestUser = tgbotapi.User{
ID: 12345,
FirstName: "Grzegorz",
LastName: "Brzbrz",
}
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]
}
}
func initTestBot(files database.LogFiles) *Bot {
if err := CheckEnv(); err != nil {
log.Fatal(err)
}
bot, err := InitBot(files, TestDB, os.Getenv("TELEGRAM_APITOKEN"))
if err != nil {
log.Fatal(err)
}
_, err = bot.DB.Where("l9id >= 0").Delete(&database.TgUser{})
if err != nil {
log.Fatal(err)
}
_, 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)
}
_, err = bot.DB.Where("lessonid >= 0").Delete(&database.Lesson{})
if err != nil {
log.Fatal(err)
}
return bot
}
func TestInitBot(t *testing.T) {
files := database.OpenLogs()
defer files.CloseAll()
initTestBot(files)
// Тестируем неправильный токен
_, err := InitBot(files, TestDB, os.Getenv("TELEGRAM_APITOKEN")+"oops")
if err != nil {
log.Println(err)
}
}
func TestInitUser(t *testing.T) {
files := database.OpenLogs()
defer files.CloseAll()
bot := initTestBot(files)
// Я новенький
_, err := InitUser(bot.DB, &TestUser)
if err != nil {
log.Fatal(err)
}
// Я уже Смешарик
_, err = InitUser(bot.DB, &TestUser)
if err != nil {
log.Fatal(err)
}
}
var dialog = []string{
"/start",
"1000",
"Павлов",
"100",
"Иванов",
"aaa",
"aaa",
}
func TestHandleUpdate(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)
now, _ := time.Parse("2006-01-02 15:04 -07", "2023-03-06 11:20 +04")
update := tgbotapi.Update{
Message: &tgbotapi.Message{
From: &user,
Date: int(now.Unix()),
},
}
var messages []tgbotapi.Message
ssau_parser.HeadURL = "http://127.0.0.1:5000/prod"
// Бот общается с ботом
for i, query := range dialog {
if i == len(dialog)-1 {
ssau_parser.HeadURL = "https://sasau.ru"
}
update.Message.Text = query
msg, err := bot.HandleUpdate(update)
if err != nil {
log.Fatal(err)
}
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, now)
if err != nil {
log.Println(err)
}
// Галя, отмена!
update = tgbotapi.Update{
CallbackQuery: &tgbotapi.CallbackQuery{
From: &user,
Message: &messages[4],
Data: "cancel",
},
}
_, err = bot.HandleUpdate(update, now)
if err != nil {
log.Println(err)
}
}
var times = []string{
"2023-02-06 11:40 +04",
"2023-02-06 11:40 +04",
"2023-02-06 13:10 +04",
"2023-02-06 13:35 +04",
"2023-02-06 15:20 +04",
"2023-02-06 16:55 +04",
"2023-02-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"
// Ещё немного общения в разное время
var messages []tgbotapi.Message
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())
msg, err := bot.HandleUpdate(update)
if err != nil {
log.Fatal(err)
}
messages = append(messages, msg)
}
// Обновляем карточку за пользователя
now, _ := time.Parse("2006-01-02 15:04 -07", times[2])
update = tgbotapi.Update{
CallbackQuery: &tgbotapi.CallbackQuery{
From: &user,
Message: &messages[1],
Data: *messages[1].ReplyMarkup.InlineKeyboard[0][0].CallbackData,
},
}
_, err := bot.HandleUpdate(update, now)
if err != nil {
log.Println(err)
}
/* Оставим это на всякий случай
log.Println("Нажми на кнопку - получишь результат!")
bot.GetUpdates()
upd := <-*bot.Updates
now, _ = time.Parse("2006-01-02 15:04 -07", "2023-03-07 16:55 +04")
_, err = bot.HandleUpdate(upd, now)
if err != nil {
log.Fatal(err)
}*/
}
func TestGetWeekLessons(t *testing.T) {
ssau_parser.HeadURL = "http://127.0.0.1:5000/prod"
files := database.OpenLogs()
defer files.CloseAll()
bot := initTestBot(files)
bot.Week = 5
bot.WkPath = "C:\\Program Files\\wkhtmltopdf\\bin\\wkhtmltoimage.exe"
user := database.TgUser{}
user.TgId, _ = strconv.ParseInt(os.Getenv("TELEGRAM_TEST_USER"), 0, 64)
shedules := []ssau_parser.WeekShedule{
{
SheduleId: 100000000,
IsGroup: true,
Week: 1,
},
{
SheduleId: 3,
IsGroup: false,
Week: 1,
},
}
now, _ := time.Parse("2006-01-02 15:04 -07", times[2])
for _, sh := range shedules {
err := sh.DownloadById(true)
if err != nil {
log.Fatal(err)
}
_, _, err = ssau_parser.UpdateSchedule(bot.DB, sh)
if err != nil {
log.Fatal(err)
}
err = bot.CreateWeekImg(now, &user, []database.ShedulesInUser{Swap(sh)}, 0, false, "")
if err != nil {
log.Fatal(err)
}
}
}