(Feat): Initial Commit
This commit is contained in:
104
internal/util/db/join_test.go
Normal file
104
internal/util/db/join_test.go
Normal file
@@ -0,0 +1,104 @@
|
||||
package db_test
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"testing"
|
||||
|
||||
"allaboutapps.dev/aw/go-starter/internal/models"
|
||||
"allaboutapps.dev/aw/go-starter/internal/test"
|
||||
"allaboutapps.dev/aw/go-starter/internal/test/fixtures"
|
||||
"allaboutapps.dev/aw/go-starter/internal/util/db"
|
||||
"github.com/aarondl/null/v8"
|
||||
"github.com/aarondl/sqlboiler/v4/queries"
|
||||
"github.com/aarondl/sqlboiler/v4/queries/qm"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestInnerJoinWithFilter(t *testing.T) {
|
||||
test.WithTestDatabase(t, func(sqlDB *sql.DB) {
|
||||
ctx := t.Context()
|
||||
fix := fixtures.Fixtures()
|
||||
|
||||
profiles, err := models.AppUserProfiles(db.InnerJoinWithFilter(models.TableNames.AppUserProfiles,
|
||||
models.AppUserProfileColumns.UserID,
|
||||
models.TableNames.Users,
|
||||
models.UserColumns.ID,
|
||||
models.UserColumns.Username,
|
||||
"user1@example.com",
|
||||
)).All(ctx, sqlDB)
|
||||
require.NoError(t, err)
|
||||
require.Len(t, profiles, 1)
|
||||
|
||||
assert.Equal(t, fix.User1AppUserProfile.UserID, profiles[0].UserID)
|
||||
|
||||
profiles, err = models.AppUserProfiles(db.InnerJoinWithFilter(models.TableNames.AppUserProfiles,
|
||||
models.AppUserProfileColumns.UserID,
|
||||
models.TableNames.Users,
|
||||
models.UserColumns.ID,
|
||||
models.UserColumns.Username,
|
||||
"user1@example.com",
|
||||
models.TableNames.Users,
|
||||
)).All(ctx, sqlDB)
|
||||
require.NoError(t, err)
|
||||
require.Len(t, profiles, 1)
|
||||
|
||||
assert.Equal(t, fix.User1AppUserProfile.UserID, profiles[0].UserID)
|
||||
})
|
||||
}
|
||||
|
||||
func TestInnerJoin(t *testing.T) {
|
||||
test.WithTestDatabase(t, func(sqlDB *sql.DB) {
|
||||
ctx := t.Context()
|
||||
fix := fixtures.Fixtures()
|
||||
|
||||
profiles, err := models.AppUserProfiles(db.InnerJoin(models.TableNames.AppUserProfiles,
|
||||
models.AppUserProfileColumns.UserID,
|
||||
models.TableNames.Users,
|
||||
models.UserColumns.ID,
|
||||
),
|
||||
models.UserWhere.Username.EQ(null.StringFrom("user1@example.com")),
|
||||
).All(ctx, sqlDB)
|
||||
require.NoError(t, err)
|
||||
require.Len(t, profiles, 1)
|
||||
|
||||
assert.Equal(t, fix.User1AppUserProfile.UserID, profiles[0].UserID)
|
||||
})
|
||||
}
|
||||
|
||||
func TestLeftOuterJoinWithFilter(t *testing.T) {
|
||||
query := models.NewQuery(
|
||||
qm.Select("*"),
|
||||
qm.From("users"),
|
||||
db.LeftOuterJoinWithFilter("users", "id", "app_user_profiles", "user_id", "first_name", "Max"),
|
||||
)
|
||||
|
||||
sql, args := queries.BuildQuery(query)
|
||||
|
||||
test.Snapshoter.Label("SQL").Save(t, sql)
|
||||
test.Snapshoter.Label("Args").Save(t, args...)
|
||||
|
||||
query = models.NewQuery(
|
||||
qm.Select("*"),
|
||||
qm.From("users"),
|
||||
db.LeftOuterJoinWithFilter("users", "id", "app_user_profiles", "user_id", "first_name", "Max", "app_user_profiles"),
|
||||
)
|
||||
|
||||
sql, args = queries.BuildQuery(query)
|
||||
|
||||
test.Snapshoter.Label("SQL").Save(t, sql)
|
||||
test.Snapshoter.Label("Args").Save(t, args...)
|
||||
}
|
||||
|
||||
func TestLeftOuterJoin(t *testing.T) {
|
||||
query := models.NewQuery(
|
||||
qm.Select("*"),
|
||||
qm.From("users"),
|
||||
db.LeftOuterJoin("users", "id", "app_user_profiles", "user_id"),
|
||||
)
|
||||
|
||||
sql, args := queries.BuildQuery(query)
|
||||
|
||||
test.Snapshoter.Label("SQL").Save(t, sql)
|
||||
test.Snapshoter.Label("Args").Save(t, args...)
|
||||
}
|
||||
Reference in New Issue
Block a user