package shows import ( "fmt" "os" "testing" "gitlab.quimbo.fr/odwrtw/canape-sql/sqly" "gitlab.quimbo.fr/odwrtw/canape-sql/users" "github.com/Sirupsen/logrus" "github.com/jmoiron/sqlx" _ "github.com/lib/pq" _ "github.com/mattes/migrate/driver/postgres" "github.com/odwrtw/polochon/lib" "github.com/odwrtw/polochon/modules/mock" ) 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 TestIntegrate(t *testing.T) { sqly.RunWithLastestMigration(db, pgdsn, t, func(db *sqlx.DB, t *testing.T) { detailer, _ := mock.NewDetailer(nil) polochonConfig := polochon.ShowConfig{ Detailers: []polochon.Detailer{ detailer, }, } show := Show{ Show: polochon.Show{ ShowConfig: polochonConfig, ImdbID: "tt12345", }, } log := logrus.NewEntry(logrus.New()) err := show.GetDetails(db, log) if err != nil { t.Fatal(err) } if len(show.Episodes) != 50 { t.Fatalf("Unexpected number of episodes: %d", len(show.Episodes)) } // Get from db show2 := Show{ Show: polochon.Show{ ShowConfig: polochonConfig, ImdbID: "tt12345", }, } err = show2.Get(db) if err != nil { t.Fatal(err) } err = show2.GetEpisodes(db) if err != nil { t.Fatal(err) } if len(show2.Episodes) != 50 { t.Fatalf("Unexpected number of episodes: %d", len(show2.Episodes)) } err = show.Delete(db) if err != nil { t.Fatal(err) } err = show.Get(db) if err != ErrNotFound { t.Fatalf("Unexpected error: %q", err) } }) } func TestTrackedShow(t *testing.T) { sqly.RunWithLastestMigration(db, pgdsn, t, func(db *sqlx.DB, t *testing.T) { detailer, _ := mock.NewDetailer(nil) polochonConfig := polochon.ShowConfig{ Detailers: []polochon.Detailer{ detailer, }, } show := Show{ Show: polochon.Show{ ShowConfig: polochonConfig, ImdbID: "tt12345", }, } err := show.Add(db) if err != nil { t.Fatal(err) } u := &users.User{Name: "plop"} err = u.Add(db) if err != nil { t.Fatal(err) } err = show.GetAsUser(db, u) if err != nil { t.Fatal(err) } if show.IsTracked() { t.Fatal("Tracked must be false here") } q := `INSERT INTO shows_tracked (show_id, user_id, season, episode) VALUES ($1, $2, $3, $4);` _, err = db.Exec(q, show.ID, u.ID, 1, 1) if err != nil { t.Fatal(err) } err = show.GetAsUser(db, u) if err != nil { t.Fatal(err) } if !show.IsTracked() { t.Fatal("Tracked must be true here") } }) }