From 24c005202ed06ceb5f41bd2d4fc442b7e9992b9c Mon Sep 17 00:00:00 2001 From: far-galaxy Date: Wed, 2 Aug 2023 09:40:31 +0400 Subject: [PATCH] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=BE:=20=D0=B2=D0=B5=D0=BB=D0=B8=D0=BA=D0=BE=D0=B5=20=D0=BF?= =?UTF-8?q?=D0=B5=D1=80=D0=B5=D1=81=D0=B5=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=B9=20=D0=B8=20=D1=82?= =?UTF-8?q?=D0=B5=D1=81=D1=82=D0=BE=D0=B2=20=D0=BF=D0=BE=20=D1=84=D0=B0?= =?UTF-8?q?=D0=B9=D0=BB=D0=B0=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/ssau_parser/connecter_test.go | 84 ++++++++++ modules/ssau_parser/database_test.go | 46 ++++++ modules/ssau_parser/parser.go | 35 ----- modules/ssau_parser/parser_test.go | 40 +++++ modules/ssau_parser/{diff.go => shedule.go} | 41 ++++- modules/ssau_parser/shedule_test.go | 56 +++++++ modules/ssau_parser/ssau_parser_test.go | 166 -------------------- 7 files changed, 264 insertions(+), 204 deletions(-) create mode 100644 modules/ssau_parser/connecter_test.go create mode 100644 modules/ssau_parser/database_test.go create mode 100644 modules/ssau_parser/parser_test.go rename modules/ssau_parser/{diff.go => shedule.go} (66%) create mode 100644 modules/ssau_parser/shedule_test.go delete mode 100644 modules/ssau_parser/ssau_parser_test.go diff --git a/modules/ssau_parser/connecter_test.go b/modules/ssau_parser/connecter_test.go new file mode 100644 index 0000000..07bb745 --- /dev/null +++ b/modules/ssau_parser/connecter_test.go @@ -0,0 +1,84 @@ +package ssau_parser + +import ( + "log" + "testing" +) + +var queries = []string{ + "2305", + "2305-240502D", + "235", + "Балякин", + "Балялякин", +} + +var urls = []string{ + "aaa", + "https://sasau.ru", + "https://l9labs.ru", + "http://127.0.0.1:5000", + "http://127.0.0.1:5000", +} + +// Вывод некритических ошибок тестирования в консоль +func handleError(err error) { + if err != nil { + log.Println(err) + } +} + +func TestSearchInRasp(t *testing.T) { + // Проверка запросов + for _, query := range queries { + pingQuery(query, t) + } + // Проверка ошибок на стороне сайта + for _, url := range urls { + headURL = url + pingQuery(queries[0], t) + } +} + +func pingQuery(query string, t *testing.T) { + if list, err := SearchInRasp(query); err != nil { + log.Println(err) + } else { + log.Println(query, list) + } +} + +var groupUri = []string{ + "/rasp?groupId=530996168", + "/rasp?staffId=59915001", + "/aaa", + "/aaaaaaaaaaaaaa", + "/rasp?groupId=123", +} +var weeks = []int{ + 1, + 2, + 100, +} + +func TestDownloadShedule(t *testing.T) { + // headURL = "https://ssau.ru" + headURL = "http://127.0.0.1:5000" + for _, uri := range groupUri { + for _, week := range weeks { + if _, err := DownloadShedule(uri, week); err != nil { + log.Println(err) + } + } + } + if _, err := DownloadSheduleById(530996168, true, 1); err != nil { + log.Println(err) + } + if _, err := DownloadSheduleById(59915001, false, 1); err != nil { + log.Println(err) + } + headURL = "http://127.0.0.1:5000/oops/" + if _, err := DownloadSheduleById(59915001, false, 1); err != nil { + log.Println(err) + } +} diff --git a/modules/ssau_parser/database_test.go b/modules/ssau_parser/database_test.go new file mode 100644 index 0000000..49cef3a --- /dev/null +++ b/modules/ssau_parser/database_test.go @@ -0,0 +1,46 @@ +package ssau_parser + +import ( + "log" + "testing" + + "git.l9labs.ru/anufriev.g.a/l9_stud_bot/modules/database" +) + +func TestCheckGroupOrTeacher(t *testing.T) { + db, err := database.Connect("test", "TESTpass1!", "testdb") + if err != nil { + log.Println(err) + return + } + // Очистка всех данных для теста + _, err = db.Where("groupid > 0").Delete(&database.Group{}) + handleError(err) + _, err = db.Where("teacherid > 0").Delete(&database.Teacher{}) + handleError(err) + + headURL = "http://127.0.0.1:5000" + sh := WeekShedule{ + SheduleId: 802440189, + IsGroup: true, + Week: 4, + } + err = sh.DownloadById(false) + handleError(err) + err = checkGroupOrTeacher(db, sh) + handleError(err) + // Повторяем на предмет наличия + err = checkGroupOrTeacher(db, sh) + handleError(err) + + // Проверяем преподавателя + sh = WeekShedule{ + SheduleId: 62806001, + IsGroup: false, + Week: 4, + } + err = sh.DownloadById(false) + handleError(err) + err = checkGroupOrTeacher(db, sh) + handleError(err) +} diff --git a/modules/ssau_parser/parser.go b/modules/ssau_parser/parser.go index 158ec9d..60a2ff5 100644 --- a/modules/ssau_parser/parser.go +++ b/modules/ssau_parser/parser.go @@ -1,7 +1,6 @@ package ssau_parser import ( - "errors" "strconv" "strings" "time" @@ -221,37 +220,3 @@ func ParseLesson(s *goquery.Selection, isGroup bool, sheduleId int64) []Lesson { return lessons } - -// Загрузка, парсинг и раскрытие расписания в одной функции -// Обязательно наличие IsGroup, SheduleId, Week в объекте -func (sh *WeekShedule) DownloadById(uncover bool) error { - if sh.SheduleId == 0 { - return errors.New("schedule id not included") - } - if sh.Week == 0 { - return errors.New("week not included") - } - - page, err := DownloadSheduleById(sh.SheduleId, sh.IsGroup, sh.Week) - if err != nil { - return err - } - err = sh.Parse(page, uncover) - if err != nil { - return err - } - return nil -} - -// Загрузка, парсинг и раскрытие расписания в одной функции по URI и номеру недели -func (sh *WeekShedule) Download(uri string, week int, uncover bool) error { - page, err := DownloadShedule(uri, week) - if err != nil { - return err - } - err = sh.Parse(page, uncover) - if err != nil { - return err - } - return nil -} diff --git a/modules/ssau_parser/parser_test.go b/modules/ssau_parser/parser_test.go new file mode 100644 index 0000000..8b73b69 --- /dev/null +++ b/modules/ssau_parser/parser_test.go @@ -0,0 +1,40 @@ +package ssau_parser + +import ( + "log" + "testing" +) + +func TestParse(t *testing.T) { + headURL = "http://127.0.0.1:5000" + sh := WeekShedule{ + SheduleId: 802440189, + IsGroup: true, + Week: 3, + } + err := sh.DownloadById(false) + handleError(err) + + // Ошибки в скелете расписания + for i := 1; i < 6; i++ { + sh := WeekShedule{ + SheduleId: 123, + IsGroup: true, + Week: i, + } + err = sh.DownloadById(false) + handleError(err) + } + + // Ошибки внутри пар + for i := 2; i < 3; i++ { + sh := WeekShedule{ + SheduleId: 62806001, + IsGroup: false, + Week: i, + } + err = sh.DownloadById(false) + handleError(err) + log.Println(sh.FullName) + } +} diff --git a/modules/ssau_parser/diff.go b/modules/ssau_parser/shedule.go similarity index 66% rename from modules/ssau_parser/diff.go rename to modules/ssau_parser/shedule.go index a0b0967..965303a 100644 --- a/modules/ssau_parser/diff.go +++ b/modules/ssau_parser/shedule.go @@ -2,14 +2,48 @@ package ssau_parser import ( "bytes" - "encoding/gob" - "fmt" - "crypto/md5" + "encoding/gob" + "errors" + "fmt" "git.l9labs.ru/anufriev.g.a/l9_stud_bot/modules/database" ) +// Загрузка, парсинг и раскрытие расписания в одной функции по URI и номеру недели +func (sh *WeekShedule) Download(uri string, week int, uncover bool) error { + page, err := DownloadShedule(uri, week) + if err != nil { + return err + } + err = sh.Parse(page, uncover) + if err != nil { + return err + } + return nil +} + +// Загрузка, парсинг и раскрытие расписания в одной функции +// Обязательно наличие IsGroup, SheduleId, Week в объекте +func (sh *WeekShedule) DownloadById(uncover bool) error { + if sh.SheduleId == 0 { + return errors.New("schedule id not included") + } + if sh.Week == 0 { + return errors.New("week not included") + } + + page, err := DownloadSheduleById(sh.SheduleId, sh.IsGroup, sh.Week) + if err != nil { + return err + } + err = sh.Parse(page, uncover) + if err != nil { + return err + } + return nil +} + // Раскрытие недельного расписания в список занятий для базы данных и сравнения func (sh *WeekShedule) UncoverShedule() { var lessons []database.Lesson @@ -68,6 +102,7 @@ func Diff(jeden []database.Lesson, dzwa []database.Lesson) []database.Lesson { return diff } +// Получение хэша занятия для быстрого сравнения func Hash(s database.Lesson) string { var b bytes.Buffer gob.NewEncoder(&b).Encode(s) diff --git a/modules/ssau_parser/shedule_test.go b/modules/ssau_parser/shedule_test.go new file mode 100644 index 0000000..da04cb7 --- /dev/null +++ b/modules/ssau_parser/shedule_test.go @@ -0,0 +1,56 @@ +package ssau_parser + +import ( + "log" + "testing" +) + +func TestDownload(t *testing.T) { + headURL = "http://127.0.0.1:5000" + sh := WeekShedule{} + err := sh.Download("/rasp?groupId=802440189", 4, false) + handleError(err) + // Ошибка в адресе + err = sh.Download("/oops", 4, false) + handleError(err) + // Ошибка во время парсинга + err = sh.Download("/rasp?groupId=123", 3, false) + handleError(err) + + // Тестирование DownloadById с отсутствующими полями + sh = WeekShedule{ + IsGroup: false, + Week: 4, + } + err = sh.DownloadById(true) + handleError(err) + + sh = WeekShedule{ + SheduleId: 802440189, + IsGroup: false, + } + err = sh.DownloadById(true) + handleError(err) +} + +func TestSheduleCompare(t *testing.T) { + headURL = "http://127.0.0.1:5000" + sh := WeekShedule{ + SheduleId: 802440189, + IsGroup: true, + Week: 4, + } + err := sh.DownloadById(true) + handleError(err) + + new_sh := WeekShedule{ + SheduleId: 802440189, + IsGroup: true, + Week: 8, + } + err = new_sh.DownloadById(true) + handleError(err) + + add, del := Compare(new_sh.Uncovered, sh.Uncovered) + log.Println(add, del) +} diff --git a/modules/ssau_parser/ssau_parser_test.go b/modules/ssau_parser/ssau_parser_test.go deleted file mode 100644 index 6dc61c1..0000000 --- a/modules/ssau_parser/ssau_parser_test.go +++ /dev/null @@ -1,166 +0,0 @@ -package ssau_parser - -import ( - "log" - "testing" - - "git.l9labs.ru/anufriev.g.a/l9_stud_bot/modules/database" -) - -var queries = []string{ - "2305", - "2305-240502D", - "235", - "Балякин", - "Балялякин", -} - -var urls = []string{ - "aaa", - "https://sasau.ru", - "https://l9labs.ru", - "http://127.0.0.1:5000", - "http://127.0.0.1:5000", -} - -// Вывод некритических ошибок тестирования в консоль -func handleError(err error) { - if err != nil { - log.Println(err) - } -} - -// TODO: выдумать и прописать упоротые тесты для всего -func TestSearchInRasp(t *testing.T) { - // Проверка запросов - for _, query := range queries { - pingQuery(query, t) - } - // Проверка ошибок на стороне сайта - for _, url := range urls { - headURL = url - pingQuery(queries[0], t) - } -} - -func pingQuery(query string, t *testing.T) { - if list, err := SearchInRasp(query); err != nil { - log.Println(err) - } else { - log.Println(query, list) - } -} - -var groupUri = []string{ - "/rasp?groupId=530996168", - "/rasp?staffId=59915001", - "/aaa", - "/aaaaaaaaaaaaaa", - "/rasp?groupId=123", -} -var weeks = []int{ - 1, - 2, - 100, -} - -func TestDownloadShedule(t *testing.T) { - // headURL = "https://ssau.ru" - headURL = "http://127.0.0.1:5000" - for _, uri := range groupUri { - for _, week := range weeks { - if _, err := DownloadShedule(uri, week); err != nil { - log.Println(err) - } - } - } - if _, err := DownloadSheduleById(530996168, true, 1); err != nil { - log.Println(err) - } - if _, err := DownloadSheduleById(59915001, false, 1); err != nil { - log.Println(err) - } -} - -func TestParse(t *testing.T) { - headURL = "http://127.0.0.1:5000" - sh := WeekShedule{ - SheduleId: 802440189, - IsGroup: true, - Week: 3, - } - err := sh.DownloadById(false) - handleError(err) - - // Ошибки в скелете расписания - for i := 1; i < 6; i++ { - sh := WeekShedule{ - SheduleId: 123, - IsGroup: true, - Week: i, - } - err = sh.DownloadById(false) - handleError(err) - } - - // Ошибки внутри пар - for i := 2; i < 3; i++ { - sh := WeekShedule{ - SheduleId: 62806001, - IsGroup: false, - Week: i, - } - err = sh.DownloadById(false) - handleError(err) - log.Println(sh.FullName) - } -} - -func TestSheduleCompare(t *testing.T) { - headURL = "http://127.0.0.1:5000" - sh := WeekShedule{ - SheduleId: 802440189, - IsGroup: true, - Week: 4, - } - err := sh.DownloadById(true) - handleError(err) - - new_sh := WeekShedule{ - SheduleId: 802440189, - IsGroup: true, - Week: 8, - } - err = new_sh.DownloadById(true) - handleError(err) - - add, del := Compare(new_sh.Uncovered, sh.Uncovered) - log.Println(add, del) -} - -func TestCheckGroupOrTeacher(t *testing.T) { - db, err := database.Connect("test", "TESTpass1!", "testdb") - if err != nil { - log.Println(err) - return - } - // Очистка всех данных для теста - _, err = db.Where("groupid > 0").Delete(&database.Group{}) - handleError(err) - _, err = db.Where("teacherid > 0").Delete(&database.Teacher{}) - handleError(err) - - headURL = "http://127.0.0.1:5000" - sh := WeekShedule{ - SheduleId: 802440189, - IsGroup: true, - Week: 4, - } - err = sh.DownloadById(false) - handleError(err) - err = checkGroupOrTeacher(db, sh) - handleError(err) - // Повторяем на предмет наличия - err = checkGroupOrTeacher(db, sh) - handleError(err) -}