package model import ( "testing" "github.com/glebarez/sqlite" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "gorm.io/gorm" "gorm.io/gorm/logger" ) func setupUserAssetGroupDB(t *testing.T) *gorm.DB { t.Helper() db, err := gorm.Open(sqlite.Open("file:user_asset_groups?mode=memory&cache=shared"), &gorm.Config{ Logger: logger.Default.LogMode(logger.Silent), }) require.NoError(t, err) sqlDB, err := db.DB() require.NoError(t, err) sqlDB.SetMaxOpenConns(1) origDB := DB DB = db require.NoError(t, db.AutoMigrate(&UserAssetGroup{})) t.Cleanup(func() { DB = origDB require.NoError(t, sqlDB.Close()) }) return db } func TestUserAssetGroupScopesByUserAndChannel(t *testing.T) { setupUserAssetGroupDB(t) require.NoError(t, CreateUserAssetGroup(10, 101, "group-a")) require.NoError(t, CreateUserAssetGroup(11, 101, "group-b")) require.NoError(t, CreateUserAssetGroup(10, 102, "group-c")) binding, err := GetUserAssetGroup(10, 101) require.NoError(t, err) require.NotNil(t, binding) assert.Equal(t, "group-a", binding.GroupId) } func TestUserAssetGroupRejectsDuplicateUserChannel(t *testing.T) { setupUserAssetGroupDB(t) require.NoError(t, CreateUserAssetGroup(10, 101, "first")) assert.Error(t, CreateUserAssetGroup(10, 101, "second")) } func TestGetUserAssetGroupReturnsNilWhenNotFound(t *testing.T) { setupUserAssetGroupDB(t) binding, err := GetUserAssetGroup(10, 101) require.NoError(t, err) assert.Nil(t, binding) }