package shows import ( "database/sql" "fmt" "os" "strings" "testing" "gitlab.quimbo.fr/odwrtw/canape-sql/sqly" "gitlab.quimbo.fr/odwrtw/canape-sql/users" "github.com/jmoiron/sqlx" _ "github.com/lib/pq" _ "github.com/mattes/migrate/driver/postgres" "github.com/odwrtw/polochon/lib" ) const showNFO1 = ` Marvel's Jessica Jones Marvel's Jessica Jones 8 Ever since her short-lived stint as a Super Hero ended in tragedy, Jessica Jones has been rebuilding her personal life and career as a hot-tempered, sardonic, badass private detective in Hell's Kitchen, New York City. Plagued by self-loathing, and a wicked case of PTSD, Jessica battles demons from within and without, using her extraordinary abilities as an unlikely champion for those in need... especially if they're willing to cut her a check. http://www.thetvdb.com/api/1D62F2F90030C444/series/284190/all/en.zip 284190 tt2357547 2015 ` const showNFO1E1 = ` AKA Ladies Night Marvel's Jessica Jones 1 1 5311261 2015-11-20 2015-11-20 Jessica Jones is hired to find a pretty NYU student who's vanished, but it turns out to be more than a simple missing persons case. 60 http://thetvdb.com/banners/episodes/284190/5311261.jpg 7.5 tt2357547 284190 tt4162058 ` const showNFO1E2 = ` AKA Crush Syndrome Marvel's Jessica Jones 1 2 5311262 2015-11-20 2015-11-20 Jessica vows to prove Hope's innocence, even though it means tracking down a terrifying figure from her own past. 60 http://thetvdb.com/banners/episodes/284190/5311262.jpg 7.7 tt2357547 284190 tt4162062 ` var db *sqlx.DB var pgdsn string func init() { var err error pgdsn = os.Getenv("POSTGRES_DSN") db, err = sqlx.Connect("postgres", pgdsn) if err != nil { fmt.Printf("Unavailable PG tests:\n %v\n", err) os.Exit(1) } } func TestAddRemoveShow(t *testing.T) { sqly.RunWithLastestMigration(db, pgdsn, t, func(db *sqlx.DB, t *testing.T) { nfo := strings.NewReader(showNFO1) s := &polochon.Show{} polochon.ReadNFO(nfo, s) nfo = strings.NewReader(showNFO1E1) ep1 := &polochon.ShowEpisode{} polochon.ReadNFO(nfo, ep1) nfo = strings.NewReader(showNFO1E2) ep2 := &polochon.ShowEpisode{} polochon.ReadNFO(nfo, ep2) s.Episodes = append(s.Episodes, ep1) s.Episodes = append(s.Episodes, ep2) show := Show{Show: *s} err := show.Add(db) if err != nil { t.Fatal(err) } show1, err := Get(db, "tt2357547") if err != nil { t.Fatal(err) } err = show1.GetEpisodes(db) if err != nil { t.Fatal(err) } if len(show1.Episodes) != 2 { t.Fatalf("Unexpected number of episodes: %d", len(show1.Episodes)) } err = show1.Delete(db) if err != nil { t.Fatal(err) } show2, err := Get(db, "tt2357547") if err == nil { t.Fatal("We expect an error here, the show didn't exist anymore") } if err != sql.ErrNoRows { t.Fatalf("Unexpected error: %q", err) } if show2 != nil { t.Fatal("Show have to be nil here") } }) } func TestTrackedShow(t *testing.T) { sqly.RunWithLastestMigration(db, pgdsn, t, func(db *sqlx.DB, t *testing.T) { nfo := strings.NewReader(showNFO1) s := &polochon.Show{} polochon.ReadNFO(nfo, s) show := Show{Show: *s} show.Add(db) u := &users.User{Name: "plop"} err := u.Add(db) if err != nil { t.Fatal(err) } show1, err := GetAsUser(db, u, "tt2357547") if err != nil { t.Fatal(err) } if show1.IsTracked() { t.Fatal("Tracked must be false here") } q := `INSERT INTO shows_tracked (shows_id, users_id, season, episode) VALUES ($1, $2, $3, $4);` _, err = db.Exec(q, show1.ID, u.ID, 1, 1) if err != nil { t.Fatal(err) } show2, err := GetAsUser(db, u, "tt2357547") if err != nil { t.Fatal(err) } if !show2.IsTracked() { t.Fatal("Tracked must be true here") } }) }