From ed260cbcb92f0b7e1a2f4c3ec8a4aab5922aa714 Mon Sep 17 00:00:00 2001 From: Joe Chen Date: Sun, 5 Nov 2023 10:25:06 -0500 Subject: [PATCH] orgsCreate --- internal/db/organizations_test.go | 68 +++++++++++++++++++++++++++++-- internal/db/users_test.go | 33 ++++++++------- 2 files changed, 84 insertions(+), 17 deletions(-) diff --git a/internal/db/organizations_test.go b/internal/db/organizations_test.go index 174cdda6c..83a92ecdb 100644 --- a/internal/db/organizations_test.go +++ b/internal/db/organizations_test.go @@ -9,15 +9,17 @@ import ( "os" "path/filepath" "testing" + "time" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "gogs.io/gogs/internal/conf" "gogs.io/gogs/internal/dbtest" + "gogs.io/gogs/internal/errutil" ) -func TestOrgs(t *testing.T) { +func TestOrganizations(t *testing.T) { if testing.Short() { t.Skip() } @@ -33,6 +35,7 @@ func TestOrgs(t *testing.T) { name string test func(t *testing.T, ctx context.Context, db *organizations) }{ + {"Create", orgsCreate}, {"List", orgsList}, {"SearchByName", orgsSearchByName}, {"CountByUser", orgsCountByUser}, @@ -50,6 +53,65 @@ func TestOrgs(t *testing.T) { } } +func orgsCreate(t *testing.T, ctx context.Context, db *organizations) { + usersStore := NewUsersStore(db.DB) + alice, err := usersStore.Create(ctx, "alice", "alice@example.com", CreateUserOptions{}) + require.NoError(t, err) + + t.Run("name not allowed", func(t *testing.T) { + _, err := db.Create(ctx, "-", alice.ID, CreateOrganizationOptions{}) + wantErr := ErrNameNotAllowed{ + args: errutil.Args{ + "reason": "reserved", + "name": "-", + }, + } + assert.Equal(t, wantErr, err) + }) + + // Users and organizations share the same namespace for names. + t.Run("name already exists", func(t *testing.T) { + _, err := db.Create(ctx, alice.Name, alice.ID, CreateOrganizationOptions{}) + wantErr := ErrOrganizationAlreadyExist{ + args: errutil.Args{ + "name": alice.Name, + }, + } + assert.Equal(t, wantErr, err) + }) + + tempPictureAvatarUploadPath := filepath.Join(os.TempDir(), "orgsCreate-tempPictureAvatarUploadPath") + conf.SetMockPicture(t, conf.PictureOpts{AvatarUploadPath: tempPictureAvatarUploadPath}) + + org, err := db.Create( + ctx, + "acme", + alice.ID, + CreateOrganizationOptions{ + FullName: "Acme Corp", + Email: "admin@acme.com", + Location: "Earth", + Website: "acme.com", + Description: "A popcorn company", + }, + ) + require.NoError(t, err) + + got, err := db.GetByName(ctx, org.Name) + require.NoError(t, err) + assert.Equal(t, org.Name, got.Name) + assert.Equal(t, org.FullName, got.FullName) + assert.Equal(t, org.Email, got.Email) + assert.Equal(t, org.Location, got.Location) + assert.Equal(t, org.Website, got.Website) + assert.Equal(t, org.Description, got.Description) + assert.Equal(t, -1, got.MaxRepoCreation) + assert.Equal(t, 1, got.NumTeams) + assert.Equal(t, 1, got.NumMembers) + assert.Equal(t, db.NowFunc().Format(time.RFC3339), got.Created.UTC().Format(time.RFC3339)) + assert.Equal(t, db.NowFunc().Format(time.RFC3339), got.Updated.UTC().Format(time.RFC3339)) +} + func orgsList(t *testing.T, ctx context.Context, db *organizations) { usersStore := NewUsersStore(db.DB) alice, err := usersStore.Create(ctx, "alice", "alice@example.com", CreateUserOptions{}) @@ -116,7 +178,7 @@ func orgsList(t *testing.T, ctx context.Context, db *organizations) { } func orgsSearchByName(t *testing.T, ctx context.Context, db *organizations) { - tempPictureAvatarUploadPath := filepath.Join(os.TempDir(), "orgsList-tempPictureAvatarUploadPath") + tempPictureAvatarUploadPath := filepath.Join(os.TempDir(), "orgsSearchByName-tempPictureAvatarUploadPath") conf.SetMockPicture(t, conf.PictureOpts{AvatarUploadPath: tempPictureAvatarUploadPath}) org1, err := db.Create(ctx, "org1", 1, CreateOrganizationOptions{FullName: "Acme Corp"}) @@ -163,7 +225,7 @@ func orgsCountByUser(t *testing.T, ctx context.Context, db *organizations) { bob, err := usersStore.Create(ctx, "bob", "bob@example.com", CreateUserOptions{}) require.NoError(t, err) - tempPictureAvatarUploadPath := filepath.Join(os.TempDir(), "orgsList-tempPictureAvatarUploadPath") + tempPictureAvatarUploadPath := filepath.Join(os.TempDir(), "orgsCountByUser-tempPictureAvatarUploadPath") conf.SetMockPicture(t, conf.PictureOpts{AvatarUploadPath: tempPictureAvatarUploadPath}) org1, err := db.Create(ctx, "org1", alice.ID, CreateOrganizationOptions{}) diff --git a/internal/db/users_test.go b/internal/db/users_test.go index 3653c1354..58392de7b 100644 --- a/internal/db/users_test.go +++ b/internal/db/users_test.go @@ -374,7 +374,7 @@ func usersCount(t *testing.T, ctx context.Context, db *users) { got = db.Count(ctx) assert.Equal(t, int64(1), got) - tempPictureAvatarUploadPath := filepath.Join(os.TempDir(), "orgsList-tempPictureAvatarUploadPath") + tempPictureAvatarUploadPath := filepath.Join(os.TempDir(), "usersCount-tempPictureAvatarUploadPath") conf.SetMockPicture(t, conf.PictureOpts{AvatarUploadPath: tempPictureAvatarUploadPath}) // Create an organization shouldn't count @@ -391,6 +391,9 @@ func usersCreate(t *testing.T, ctx context.Context, db *users) { "alice", "alice@example.com", CreateUserOptions{ + FullName: "Alice Jones", + Location: "Earth", + Website: "alice@example.com", Activated: true, }, ) @@ -427,10 +430,14 @@ func usersCreate(t *testing.T, ctx context.Context, db *users) { assert.Equal(t, wantErr, err) }) - user, err := db.GetByUsername(ctx, alice.Name) + got, err := db.GetByUsername(ctx, alice.Name) require.NoError(t, err) - assert.Equal(t, db.NowFunc().Format(time.RFC3339), user.Created.UTC().Format(time.RFC3339)) - assert.Equal(t, db.NowFunc().Format(time.RFC3339), user.Updated.UTC().Format(time.RFC3339)) + assert.Equal(t, alice.Name, got.Name) + assert.Equal(t, alice.FullName, got.FullName) + assert.Equal(t, alice.Location, got.Location) + assert.Equal(t, alice.Website, got.Website) + assert.Equal(t, db.NowFunc().Format(time.RFC3339), got.Created.UTC().Format(time.RFC3339)) + assert.Equal(t, db.NowFunc().Format(time.RFC3339), got.Updated.UTC().Format(time.RFC3339)) } func usersDeleteCustomAvatar(t *testing.T, ctx context.Context, db *users) { @@ -440,7 +447,7 @@ func usersDeleteCustomAvatar(t *testing.T, ctx context.Context, db *users) { avatar, err := public.Files.ReadFile("img/avatar_default.png") require.NoError(t, err) - tempPictureAvatarUploadPath := filepath.Join(os.TempDir(), "orgsList-tempPictureAvatarUploadPath") + tempPictureAvatarUploadPath := filepath.Join(os.TempDir(), "usersDeleteCustomAvatar-tempPictureAvatarUploadPath") conf.SetMockPicture(t, conf.PictureOpts{AvatarUploadPath: tempPictureAvatarUploadPath}) avatarPath := userutil.CustomAvatarPath(alice.ID) @@ -485,13 +492,13 @@ func usersDeleteByID(t *testing.T, ctx context.Context, db *users) { assert.Equal(t, wantErr, err) }) + tempPictureAvatarUploadPath := filepath.Join(os.TempDir(), "usersDeleteByID-tempPictureAvatarUploadPath") + conf.SetMockPicture(t, conf.PictureOpts{AvatarUploadPath: tempPictureAvatarUploadPath}) + t.Run("user still has organization membership", func(t *testing.T) { bob, err := db.Create(ctx, "bob", "bob@exmaple.com", CreateUserOptions{}) require.NoError(t, err) - tempPictureAvatarUploadPath := filepath.Join(os.TempDir(), "orgsList-tempPictureAvatarUploadPath") - conf.SetMockPicture(t, conf.PictureOpts{AvatarUploadPath: tempPictureAvatarUploadPath}) - _, err = NewOrganizationsStore(db.DB).Create(ctx, "org1", bob.ID, CreateOrganizationOptions{}) require.NoError(t, err) @@ -568,8 +575,6 @@ func usersDeleteByID(t *testing.T, ctx context.Context, db *users) { require.NoError(t, err) // Mock user custom avatar - tempPictureAvatarUploadPath := filepath.Join(os.TempDir(), "usersDeleteByID-tempPictureAvatarUploadPath") - conf.SetMockPicture(t, conf.PictureOpts{AvatarUploadPath: tempPictureAvatarUploadPath}) err = os.MkdirAll(tempPictureAvatarUploadPath, os.ModePerm) require.NoError(t, err) tempCustomAvatarPath := userutil.CustomAvatarPath(testUser.ID) @@ -685,7 +690,7 @@ func usersDeleteInactivated(t *testing.T, ctx context.Context, db *users) { bob, err := db.Create(ctx, "bob", "bob@exmaple.com", CreateUserOptions{}) require.NoError(t, err) - tempPictureAvatarUploadPath := filepath.Join(os.TempDir(), "orgsList-tempPictureAvatarUploadPath") + tempPictureAvatarUploadPath := filepath.Join(os.TempDir(), "usersDeleteInactivated-tempPictureAvatarUploadPath") conf.SetMockPicture(t, conf.PictureOpts{AvatarUploadPath: tempPictureAvatarUploadPath}) _, err = NewOrganizationsStore(db.DB).Create(ctx, "org1", bob.ID, CreateOrganizationOptions{}) @@ -722,7 +727,7 @@ func usersGetByEmail(t *testing.T, ctx context.Context, db *users) { }) t.Run("ignore organization", func(t *testing.T) { - tempPictureAvatarUploadPath := filepath.Join(os.TempDir(), "orgsList-tempPictureAvatarUploadPath") + tempPictureAvatarUploadPath := filepath.Join(os.TempDir(), "usersGetByEmail-tempPictureAvatarUploadPath") conf.SetMockPicture(t, conf.PictureOpts{AvatarUploadPath: tempPictureAvatarUploadPath}) org, err := NewOrganizationsStore(db.DB).Create(ctx, "gogs", 1, CreateOrganizationOptions{Email: "gogs@example.com"}) @@ -802,7 +807,7 @@ func usersGetByUsername(t *testing.T, ctx context.Context, db *users) { }) t.Run("wrong user type", func(t *testing.T) { - tempPictureAvatarUploadPath := filepath.Join(os.TempDir(), "orgsList-tempPictureAvatarUploadPath") + tempPictureAvatarUploadPath := filepath.Join(os.TempDir(), "usersGetByUsername-tempPictureAvatarUploadPath") conf.SetMockPicture(t, conf.PictureOpts{AvatarUploadPath: tempPictureAvatarUploadPath}) org1, err := NewOrganizationsStore(db.DB).Create(ctx, "org1", 1, CreateOrganizationOptions{}) @@ -910,7 +915,7 @@ func usersList(t *testing.T, ctx context.Context, db *users) { require.NoError(t, err) // Create an organization shouldn't count - tempPictureAvatarUploadPath := filepath.Join(os.TempDir(), "orgsList-tempPictureAvatarUploadPath") + tempPictureAvatarUploadPath := filepath.Join(os.TempDir(), "usersList-tempPictureAvatarUploadPath") conf.SetMockPicture(t, conf.PictureOpts{AvatarUploadPath: tempPictureAvatarUploadPath}) _, err = NewOrganizationsStore(db.DB).Create(ctx, "org1", bob.ID, CreateOrganizationOptions{})