Изменено: великое переселение функций и тестов по файлам

This commit is contained in:
far-galaxy 2023-08-02 09:40:31 +04:00
parent 16f5abc820
commit 24c005202e
7 changed files with 264 additions and 204 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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