package repository import ( "context" "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/gochat/gochat/internal/model" ) func newTestFolder(portalID uint, name string) *model.Folder { return &model.Folder{ PortalID: portalID, Name: name, Slug: name + "-slug", Position: 1, } } // ========== Create ========== func TestFolderRepo_Create(t *testing.T) { db := setupTestDB(t, &model.Folder{}) repo := NewFolderRepo(db) folder := newTestFolder(1, "TestFolder") err := repo.Create(context.Background(), folder) require.NoError(t, err) assert.NotZero(t, folder.ID) assert.Equal(t, uint(1), folder.PortalID) } // ========== GetByID ========== func TestFolderRepo_GetByID(t *testing.T) { db := setupTestDB(t, &model.Folder{}) repo := NewFolderRepo(db) folder := newTestFolder(1, "FindByIDFolder") err := repo.Create(context.Background(), folder) require.NoError(t, err) found, err := repo.GetByID(context.Background(), folder.ID) require.NoError(t, err) assert.Equal(t, folder.ID, found.ID) } func TestFolderRepo_GetByID_NotFound(t *testing.T) { db := setupTestDB(t, &model.Folder{}) repo := NewFolderRepo(db) found, err := repo.GetByID(context.Background(), 9999) assert.Error(t, err) assert.Nil(t, found) } // ========== Update ========== func TestFolderRepo_Update(t *testing.T) { db := setupTestDB(t, &model.Folder{}) repo := NewFolderRepo(db) folder := newTestFolder(1, "BeforeUpdate") err := repo.Create(context.Background(), folder) require.NoError(t, err) folder.Name = "AfterUpdate" folder.Position = 2 err = repo.Update(context.Background(), folder) require.NoError(t, err) found, err := repo.GetByID(context.Background(), folder.ID) require.NoError(t, err) assert.Equal(t, "AfterUpdate", found.Name) assert.Equal(t, 2, found.Position) } // ========== Delete ========== func TestFolderRepo_Delete(t *testing.T) { db := setupTestDB(t, &model.Folder{}) repo := NewFolderRepo(db) folder := newTestFolder(1, "DeleteFolder") err := repo.Create(context.Background(), folder) require.NoError(t, err) err = repo.Delete(context.Background(), folder.ID) require.NoError(t, err) found, err := repo.GetByID(context.Background(), folder.ID) assert.Error(t, err) assert.Nil(t, found) } // ========== FindByPortalID ========== func TestFolderRepo_FindByPortalID(t *testing.T) { db := setupTestDB(t, &model.Folder{}) repo := NewFolderRepo(db) portalID := uint(10) for i := 0; i < 3; i++ { f := newTestFolder(portalID, "Folder"+string(rune('A'+i))) f.Position = i + 1 err := repo.Create(context.Background(), f) require.NoError(t, err) } folders, count, err := repo.FindByPortalID(context.Background(), portalID, 0, 10) require.NoError(t, err) assert.Equal(t, int64(3), count) assert.Len(t, folders, 3) }