239 lines
9.3 KiB
Go
Executable File
239 lines
9.3 KiB
Go
Executable File
package webserver
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
"time"
|
|
|
|
data "git.martyn.berlin/martyn/twitchsingstools/internal/data"
|
|
)
|
|
|
|
func TestDateRegex(t *testing.T) {
|
|
var sourceValue videoStruct
|
|
sourceValue.Title = "Duet with FullOfEmily: Words Fail"
|
|
sourceValue.CreatedAt = "2018-03-02T20:53:41Z"
|
|
convert, err := twitchVidToSingsVid(sourceValue)
|
|
if err != nil {
|
|
t.Errorf("twitchVidToSingsVid threw error : %s\n", err.Error())
|
|
}
|
|
fmt.Printf("Testing Video date '%s'\n", sourceValue.CreatedAt)
|
|
if convert.Date.Format(time.RFC1123Z) != "Fri, 02 Mar 2018 20:53:41 +0000" {
|
|
t.Errorf("%s should give Date of %s, gave '%s'\n", sourceValue.CreatedAt, "Fri, 02 Mar 2018 20:53:41 +0000", convert.Date.Format(time.RFC1123Z))
|
|
} else {
|
|
fmt.Printf("Parsed date is %s\n", convert.Date.Format(time.RFC1123Z))
|
|
}
|
|
}
|
|
|
|
func TestDuetRegexes(t *testing.T) {
|
|
var sourceValue videoStruct
|
|
sourceValue.Title = "Duet with FullOfEmily: Words Fail"
|
|
sourceValue.CreatedAt = "2018-03-02T20:53:41Z"
|
|
convert, err := twitchVidToSingsVid(sourceValue)
|
|
fmt.Printf("Testing Video title '%s'\n", sourceValue.Title)
|
|
if err != nil {
|
|
t.Errorf("twitchVidToSingsVid threw error : %s\n", err.Error())
|
|
}
|
|
if convert.SongTitle != "Words Fail" {
|
|
t.Errorf("%s should give Title %s, gave '%s'\n", sourceValue.Title, "Words Fail", convert.SongTitle)
|
|
} else {
|
|
fmt.Printf("Song Title is '%s'\n", convert.SongTitle)
|
|
}
|
|
if convert.OtherSinger != "FullOfEmily" {
|
|
t.Errorf("%s should give Other Singer of %s, gave '%s'\n", sourceValue.Title, "FullOfEmily", convert.OtherSinger)
|
|
} else {
|
|
fmt.Printf("Other Singer is '%s'\n", convert.OtherSinger)
|
|
}
|
|
if !convert.Duet {
|
|
t.Errorf("%s should be reported as Duet, returned false\n", sourceValue.Title)
|
|
} else {
|
|
fmt.Println("Correctly seen as Duet")
|
|
}
|
|
}
|
|
|
|
func TestSoloRegexes(t *testing.T) {
|
|
var sourceValue videoStruct
|
|
sourceValue.Title = "Solo performance: Freedom! '90 x Cups"
|
|
sourceValue.CreatedAt = "2018-03-02T20:53:41Z"
|
|
convert, err := twitchVidToSingsVid(sourceValue)
|
|
fmt.Printf("Testing Video title '%s'\n", sourceValue.Title)
|
|
if err != nil {
|
|
t.Errorf("twitchVidToSingsVid threw error : %s\n", err.Error())
|
|
}
|
|
if convert.SongTitle != "Freedom! '90 x Cups" {
|
|
t.Errorf("%s should give Title %s, gave '%s'\n", sourceValue.Title, "Freedom! '90 x Cups", convert.SongTitle)
|
|
} else {
|
|
fmt.Printf("Song Title is '%s'\n", convert.SongTitle)
|
|
}
|
|
if convert.Duet {
|
|
t.Errorf("%s should be reported as Not a Duet, returned true!\n", sourceValue.Title)
|
|
} else {
|
|
fmt.Println("Correctly seen as Solo performance")
|
|
}
|
|
}
|
|
|
|
func TestCalculatedDates(t *testing.T) {
|
|
var record data.SingsVideoStruct
|
|
format := "2006-01-02 15:04:05 +0000 UTC"
|
|
var mockCache []data.SingsVideoStruct
|
|
record.Date, _ = time.Parse(format, "2020-07-13 19:43:11 +0000 UTC")
|
|
record.SongTitle = "Words Fail"
|
|
record.OtherSinger = "FullOfEmily"
|
|
record.Duet = true
|
|
mockCache = append(mockCache, record)
|
|
//2020-07-13 19:43:11 +0000 UTC Words Fail FullOfEmily
|
|
record.Date, _ = time.Parse(format, "2020-07-13 19:20:27 +0000 UTC")
|
|
record.SongTitle = "Only Us"
|
|
record.OtherSinger = "PrincessPashley"
|
|
record.Duet = true
|
|
mockCache = append(mockCache, record)
|
|
//2020-07-13 19:20:27 +0000 UTC Only Us PrincessPashley
|
|
record.Date, _ = time.Parse(format, "2020-07-11 16:20:57 +0000 UTC")
|
|
record.SongTitle = "Words Fail"
|
|
record.OtherSinger = "springfanS"
|
|
record.Duet = true
|
|
mockCache = append(mockCache, record)
|
|
//2020-07-11 16:20:57 +0000 UTC Words Fail springfanS
|
|
record.Date, _ = time.Parse(format, "2020-06-06 17:00:00 +0000 UTC")
|
|
record.SongTitle = "Don't Speak"
|
|
record.OtherSinger = "PrincessPashley"
|
|
record.Duet = true
|
|
mockCache = append(mockCache, record)
|
|
//2020-06-06 17:00:00 +0000 UTC Don't Speak PrincessPashley
|
|
|
|
// First test, only sung once with this person
|
|
testPerson := "FullOfEmily"
|
|
testDate, _ := time.Parse(format, "2020-07-13 19:43:11 +0000 UTC")
|
|
checker := calculateLastSungSingerDate(mockCache, testPerson)
|
|
if checker.IsZero() {
|
|
t.Errorf("[functional test] There is a record in the cache for %s, but we got zero from the check!\n", testPerson)
|
|
} else {
|
|
if checker.Equal(testDate) {
|
|
fmt.Printf("[functional test] Correctly assertained last sing with %s was %v\n", testPerson, testDate)
|
|
} else {
|
|
t.Errorf("[functional test] Expected to have last sung with %s on %v, found %v", testPerson, testDate, checker)
|
|
}
|
|
}
|
|
|
|
// Second test, sang more than once with this person
|
|
testPerson = "PrincessPashley"
|
|
testDate, _ = time.Parse(format, "2020-07-13 19:20:27 +0000 UTC")
|
|
checker = calculateLastSungSingerDate(mockCache, testPerson)
|
|
if checker.IsZero() {
|
|
t.Errorf("[functional test] There is a record in the cache for %s, but we got zero from the check!\n", testPerson)
|
|
} else {
|
|
if checker.Equal(testDate) {
|
|
fmt.Printf("[functional test] Correctly assertained last sing with %s was %v\n", testPerson, testDate)
|
|
} else {
|
|
t.Errorf("[functional test] Expected to have last sung with %s on %v, found %v", testPerson, testDate, checker)
|
|
}
|
|
}
|
|
|
|
updateCalculatedFields(mockCache)
|
|
|
|
// Test for full cache - same as first test
|
|
testRecord := mockCache[0]
|
|
testPerson = testRecord.OtherSinger
|
|
testDate = mockCache[0].Date
|
|
if testRecord.LastSungSinger.IsZero() {
|
|
t.Errorf("[full cache test] There is a record in the cache for %s, but we got zero from the check!\n", testPerson)
|
|
} else {
|
|
if testRecord.LastSungSinger.Equal(testDate) {
|
|
fmt.Printf("[full cache test] Correctly assertained last sing with %s was %v\n", testPerson, testDate)
|
|
} else {
|
|
t.Errorf("[full cache test] Expected to have last sung with %s on %v, found %v", testPerson, testDate, testRecord.LastSungSinger)
|
|
}
|
|
}
|
|
|
|
// Test for full cache - same as second test
|
|
testRecord = mockCache[1]
|
|
testPerson = testRecord.OtherSinger
|
|
testDate = mockCache[1].Date
|
|
if testRecord.LastSungSinger.IsZero() {
|
|
t.Errorf("[full cache test - 2nd hit] There is a record in the cache for %s, but we got zero from the check!\n", testPerson)
|
|
} else {
|
|
if testRecord.LastSungSinger.Equal(testDate) {
|
|
fmt.Printf("[full cache test - 2nd hit] Correctly assertained last sing with %s was %v\n", testPerson, testDate)
|
|
} else {
|
|
t.Errorf("[full cache test - 2nd hit] Expected to have last sung with %s on %v, found %v", testPerson, testDate, testRecord.LastSungSinger)
|
|
}
|
|
}
|
|
|
|
// Test for full cache - should give same date as 2nd test, but with record of earlier sing.
|
|
testRecord = mockCache[3]
|
|
testPerson = testRecord.OtherSinger
|
|
testDate = mockCache[1].Date
|
|
if testRecord.LastSungSinger.IsZero() {
|
|
t.Errorf("[full cache test - 3rd hit] There is a record in the cache for %s, but we got zero from the check!\n", testPerson)
|
|
} else {
|
|
if testRecord.LastSungSinger.Equal(testDate) {
|
|
fmt.Printf("[full cache test - 3rd hit] Correctly assertained last sing with %s was %v\n", testPerson, testDate)
|
|
} else {
|
|
t.Errorf("[full cache test - 3rd hit] Expected to have last sung with %s on %v, found %v", testPerson, testDate, testRecord.LastSungSinger)
|
|
}
|
|
}
|
|
|
|
// First song test, only sung this song once
|
|
testSong := mockCache[1].SongTitle
|
|
testDate = mockCache[1].Date
|
|
checker = calculateLastSungSongDate(mockCache, testSong)
|
|
if checker.IsZero() {
|
|
t.Errorf("[functional test] There is a record in the cache for %s, but we got zero from the check!\n", testSong)
|
|
} else {
|
|
if checker.Equal(testDate) {
|
|
fmt.Printf("[functional test] Correctly assertained last sing of %s was %v\n", testPerson, testSong)
|
|
} else {
|
|
t.Errorf("[functional test] Expected to have last sing of %s on %v, found %v", testPerson, testSong, checker)
|
|
}
|
|
}
|
|
|
|
// Same check, but against the cache
|
|
testSong = mockCache[1].SongTitle
|
|
testDate = mockCache[1].Date
|
|
checker = mockCache[1].LastSungSong
|
|
if checker.IsZero() {
|
|
t.Errorf("[functional test] There is a record in the cache for %s, but we got zero from the check!\n", testSong)
|
|
} else {
|
|
if checker.Equal(testDate) {
|
|
fmt.Printf("[functional test] Correctly assertained last sing of %s was %v\n", testSong, testDate)
|
|
} else {
|
|
t.Errorf("[functional test] Expected to have last sing of %s on %v, found %v", testSong, testDate, checker)
|
|
}
|
|
}
|
|
|
|
// Second song test, this time we expect the latest sing to match
|
|
testSong = mockCache[2].SongTitle
|
|
testDate = mockCache[0].Date
|
|
checker = calculateLastSungSongDate(mockCache, testSong)
|
|
if checker.IsZero() {
|
|
t.Errorf("[functional test] There is a record in the cache for %s, but we got zero from the check!\n", testSong)
|
|
} else {
|
|
if checker.Equal(testDate) {
|
|
fmt.Printf("[functional test] Correctly assertained last sing of %s was %v\n", testSong, testDate)
|
|
} else {
|
|
t.Errorf("[functional test] Expected to have last sing of %s on %v, found %v", testSong, testDate, checker)
|
|
}
|
|
}
|
|
|
|
// Now check cache for same as above
|
|
testSong = mockCache[2].SongTitle
|
|
testDate = mockCache[0].Date
|
|
checker = mockCache[2].LastSungSong
|
|
if checker.IsZero() {
|
|
t.Errorf("[functional test] There is a record in the cache for %s, but we got zero from the check!\n", testSong)
|
|
} else {
|
|
if checker.Equal(testDate) {
|
|
fmt.Printf("[functional test] Correctly assertained last sing of %s was %v\n", testSong, testDate)
|
|
} else {
|
|
t.Errorf("[functional test] Expected to have last sing of %s on %v, found %v", testSong, testDate, checker)
|
|
}
|
|
}
|
|
}
|
|
|
|
// func TestHumanDate(t *testing.T) {
|
|
// format := "2006-01-02 15:04:05 +0000 UTC"
|
|
// d, _ := time.Parse(format, "2020-06-06 17:00:00 +0000 UTC")
|
|
// t.Errorf("%v\n", humanize.Time(d))
|
|
// t.Errorf("%v\n", humanTimeFromTimeString("2020-07-11 16:20:57 +0000 UTC"))
|
|
|
|
// }
|