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

258 lines
5.9 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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)
}
}
}