package db_test import ( "testing" "github.com/jmoiron/sqlx" _ "github.com/mattn/go-sqlite3" "github.com/stretchr/testify/require" "git.offline-twitter.com/offline-labs/gas-stack/pkg/db" ) func TestVSCDBRoundTrip(t *testing.T) { conn, err := sqlx.Open("sqlite3", ":memory:") require.NoError(t, err) t.Cleanup(func() { require.NoError(t, conn.Close()) }) _, err = conn.Exec(`create table vsc_items (id integer primary key, items text not null)`) require.NoError(t, err) type vscRow struct { ID int `db:"id"` Items db.VSC `db:"items"` } for _, want := range []vscRow{ {ID: 1, Items: db.VSC{"email"}}, {ID: 2, Items: db.VSC{"email", "profile"}}, {ID: 3, Items: db.VSC{}}, } { _, err = conn.NamedExec(`insert into vsc_items (id, items) values (:id, :items)`, want) require.NoError(t, err) var got vscRow require.NoError(t, conn.Get(&got, `select id, items from vsc_items where id = ?`, want.ID)) require.Equal(t, want, got) } t.Run("nil gets upgrade to empty list", func(t *testing.T) { want := vscRow{ID: 4, Items: nil} _, err = conn.NamedExec(`insert into vsc_items (id, items) values (:id, :items)`, want) require.NoError(t, err) var got vscRow require.NoError(t, conn.Get(&got, `select id, items from vsc_items where id = ?`, want.ID)) require.NotNil(t, got.Items) require.Equal(t, db.VSC{}, got.Items) }) }