diff --git a/scraping.go b/scraping.go index 021f016..3774522 100644 --- a/scraping.go +++ b/scraping.go @@ -124,7 +124,7 @@ func getFilterResult(filter *Filter, db *gorm.DB) { } case "lowert": { - getFilterResultConditionLowerThan(filter, db) + getFilterResultConditionLowerThan(filter) } case "higherl": { @@ -136,7 +136,7 @@ func getFilterResult(filter *Filter, db *gorm.DB) { } case "highert": { - getFilterResultConditionHigherThan(filter, db) + getFilterResultConditionHigherThan(filter) } } } @@ -456,6 +456,7 @@ func getFilterResultConditionDiff(filter *Filter, db *gorm.DB) { db.Model(&FilterOutput{}).Order("time desc").Where("watch_id = ? AND name = ?", filter.WatchID, filter.Name).Limit(1).Find(&previousOutput) for _, parent := range filter.Parents { for _, result := range parent.Results { + if previousOutput.WatchID == 0 { filter.Results = append(filter.Results, result) } else if previousOutput.Value != result { @@ -523,7 +524,7 @@ func getFilterResultConditionLowest(filter *Filter, db *gorm.DB) { } } -func getFilterResultConditionLowerThan(filter *Filter, db *gorm.DB) { +func getFilterResultConditionLowerThan(filter *Filter) { if filter.Var2 == nil { log.Println("No threshold given for Lower Than Filter") return @@ -605,7 +606,7 @@ func getFilterResultConditionHighest(filter *Filter, db *gorm.DB) { } } -func getFilterResultConditionHigherThan(filter *Filter, db *gorm.DB) { +func getFilterResultConditionHigherThan(filter *Filter) { if filter.Var2 == nil { log.Println("No threshold given for Higher Than Filter") return diff --git a/scraping_test.go b/scraping_test.go index caf6b97..f7ad053 100644 --- a/scraping_test.go +++ b/scraping_test.go @@ -2,8 +2,13 @@ package main import ( "fmt" + "log" + "os" "reflect" "testing" + + "gorm.io/driver/sqlite" + "gorm.io/gorm" ) const HTML_STRING = ` @@ -450,3 +455,68 @@ func TestFilterRound(t *testing.T) { }) } } + +func getTestDB() *gorm.DB { + db, _ := gorm.Open(sqlite.Open("./test.db")) + db.AutoMigrate(&Watch{}, &Filter{}, &FilterConnection{}, &FilterOutput{}) + return db +} + +func TestConditionDiff(t *testing.T) { + db := getTestDB() + var tests = []struct { + dbInput []FilterOutput + WatchID uint + Input []string + Want []string + }{ + { + []FilterOutput{ + { + WatchID: 1, + Name: "Test", + Value: "Last", + }, + }, + 1, + []string{"New"}, + []string{"New"}, + }, + { + []FilterOutput{ + { + WatchID: 2, + Name: "Test", + Value: "Same", + }, + }, + 2, + []string{"Same"}, + []string{}, + }, + } + for _, test := range tests { + testname := fmt.Sprintf("%s", test.Input) + t.Run(testname, func(t *testing.T) { + db.Create(&test.dbInput) + filter := Filter{ + WatchID: test.WatchID, + Name: "Test", + Parents: []*Filter{ + {Results: test.Input}, + }, + } + getFilterResultConditionDiff( + &filter, + db, + ) + if (filter.Results != nil && test.Want != nil) && !reflect.DeepEqual(test.Want, filter.Results) { + t.Errorf("Got %s, want %s", filter.Results, test.Want) + } + }) + } + err := os.Remove("./test.db") + if err != nil { + log.Println("Could not remove test db:", err) + } +}