twitchsingstools/internal/webserver/webserver_test.go

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"))
// }