141 lines
3.4 KiB
Go
141 lines
3.4 KiB
Go
package db
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
"testing"
|
|
|
|
_ "github.com/mattn/go-sqlite3"
|
|
)
|
|
|
|
func TestHasSkipSegmentOverrideTableReturnsFalseWhenMissing(t *testing.T) {
|
|
sqlDB, err := sql.Open("sqlite3", ":memory:")
|
|
if err != nil {
|
|
t.Fatalf("open sqlite: %v", err)
|
|
}
|
|
defer func() {
|
|
if err := sqlDB.Close(); err != nil {
|
|
t.Errorf("close sqlite: %v", err)
|
|
}
|
|
}()
|
|
|
|
ok, err := New(sqlDB).HasSkipSegmentOverrideTable(context.Background())
|
|
if err != nil {
|
|
t.Fatalf("HasSkipSegmentOverrideTable: %v", err)
|
|
}
|
|
if ok {
|
|
t.Fatalf("HasSkipSegmentOverrideTable returned true for missing table")
|
|
}
|
|
}
|
|
|
|
func TestHasSkipSegmentOverrideTableReturnsTrueWhenPresent(t *testing.T) {
|
|
sqlDB, err := openSkipSegmentOverrideTestDB(t)
|
|
if err != nil {
|
|
t.Fatalf("open test db: %v", err)
|
|
}
|
|
defer func() {
|
|
if err := sqlDB.Close(); err != nil {
|
|
t.Errorf("close sqlite: %v", err)
|
|
}
|
|
}()
|
|
|
|
queries := New(sqlDB)
|
|
|
|
ok, err := queries.HasSkipSegmentOverrideTable(context.Background())
|
|
if err != nil {
|
|
t.Fatalf("HasSkipSegmentOverrideTable: %v", err)
|
|
}
|
|
if !ok {
|
|
t.Fatal("HasSkipSegmentOverrideTable returned false for existing table")
|
|
}
|
|
}
|
|
|
|
func TestSkipSegmentOverrideUpsertAndList(t *testing.T) {
|
|
sqlDB, err := openSkipSegmentOverrideTestDB(t)
|
|
if err != nil {
|
|
t.Fatalf("open test db: %v", err)
|
|
}
|
|
defer func() {
|
|
if err := sqlDB.Close(); err != nil {
|
|
t.Errorf("close sqlite: %v", err)
|
|
}
|
|
}()
|
|
|
|
queries := New(sqlDB)
|
|
|
|
row := SkipSegmentOverrideRow{
|
|
ID: "override-1",
|
|
UserID: "user-a",
|
|
AnimeID: 123,
|
|
Episode: 4,
|
|
SkipType: "op",
|
|
StartTime: 12.5,
|
|
EndTime: 28.25,
|
|
}
|
|
if err := queries.UpsertSkipSegmentOverride(context.Background(), row); err != nil {
|
|
t.Fatalf("UpsertSkipSegmentOverride insert: %v", err)
|
|
}
|
|
|
|
got, err := queries.ListSkipSegmentOverrides(context.Background(), row.UserID, row.AnimeID, row.Episode)
|
|
if err != nil {
|
|
t.Fatalf("ListSkipSegmentOverrides insert: %v", err)
|
|
}
|
|
assertSingleSkipSegmentOverrideRow(t, got, row)
|
|
|
|
updated := row
|
|
updated.StartTime = 13.75
|
|
updated.EndTime = 29.5
|
|
if err := queries.UpsertSkipSegmentOverride(context.Background(), updated); err != nil {
|
|
t.Fatalf("UpsertSkipSegmentOverride update: %v", err)
|
|
}
|
|
|
|
got, err = queries.ListSkipSegmentOverrides(context.Background(), row.UserID, row.AnimeID, row.Episode)
|
|
if err != nil {
|
|
t.Fatalf("ListSkipSegmentOverrides update: %v", err)
|
|
}
|
|
assertSingleSkipSegmentOverrideRow(t, got, updated)
|
|
}
|
|
|
|
func assertSingleSkipSegmentOverrideRow(t *testing.T, got []SkipSegmentOverrideRow, want SkipSegmentOverrideRow) {
|
|
t.Helper()
|
|
|
|
if len(got) != 1 {
|
|
t.Fatalf("len(got) = %d, want 1", len(got))
|
|
}
|
|
if got[0] != want {
|
|
t.Fatalf("row = %+v, want %+v", got[0], want)
|
|
}
|
|
}
|
|
|
|
func openSkipSegmentOverrideTestDB(t *testing.T) (*sql.DB, error) {
|
|
t.Helper()
|
|
|
|
sqlDB, err := sql.Open("sqlite3", ":memory:")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
_, err = sqlDB.ExecContext(context.Background(), `
|
|
CREATE TABLE skip_segment_override (
|
|
id TEXT PRIMARY KEY,
|
|
user_id TEXT NOT NULL,
|
|
anime_id INTEGER NOT NULL,
|
|
episode INTEGER NOT NULL,
|
|
skip_type TEXT NOT NULL,
|
|
start_time REAL NOT NULL,
|
|
end_time REAL NOT NULL,
|
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
UNIQUE(user_id, anime_id, episode, skip_type)
|
|
);
|
|
`)
|
|
if err != nil {
|
|
if closeErr := sqlDB.Close(); closeErr != nil {
|
|
return nil, closeErr
|
|
}
|
|
return nil, err
|
|
}
|
|
|
|
return sqlDB, nil
|
|
}
|