Изменено: великое переселение функций и тестов по файлам
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
|
||||
|
||||
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
|
||||
}
|
||||
|
|
|
@ -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 (
|
||||
"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)
|
|
@ -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