Изменено: великое переселение функций и тестов по файлам
This commit is contained in:
parent
16f5abc820
commit
24c005202e
|
@ -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)
|
||||||
|
}
|
||||||
|
}
|
|
@ -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)
|
||||||
|
}
|
|
@ -1,7 +1,6 @@
|
||||||
package ssau_parser
|
package ssau_parser
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
@ -221,37 +220,3 @@ func ParseLesson(s *goquery.Selection, isGroup bool, sheduleId int64) []Lesson {
|
||||||
|
|
||||||
return lessons
|
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
|
|
||||||
}
|
|
||||||
|
|
|
@ -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)
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,14 +2,48 @@ package ssau_parser
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"encoding/gob"
|
|
||||||
"fmt"
|
|
||||||
|
|
||||||
"crypto/md5"
|
"crypto/md5"
|
||||||
|
"encoding/gob"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"git.l9labs.ru/anufriev.g.a/l9_stud_bot/modules/database"
|
"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() {
|
func (sh *WeekShedule) UncoverShedule() {
|
||||||
var lessons []database.Lesson
|
var lessons []database.Lesson
|
||||||
|
@ -68,6 +102,7 @@ func Diff(jeden []database.Lesson, dzwa []database.Lesson) []database.Lesson {
|
||||||
return diff
|
return diff
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Получение хэша занятия для быстрого сравнения
|
||||||
func Hash(s database.Lesson) string {
|
func Hash(s database.Lesson) string {
|
||||||
var b bytes.Buffer
|
var b bytes.Buffer
|
||||||
gob.NewEncoder(&b).Encode(s)
|
gob.NewEncoder(&b).Encode(s)
|
|
@ -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)
|
||||||
|
}
|
|
@ -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)
|
|
||||||
}
|
|
Reference in New Issue