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