diff --git a/pkg/services/org/orgimpl/store.go b/pkg/services/org/orgimpl/store.go index 63d4fca440c..c8ab01d84d2 100644 --- a/pkg/services/org/orgimpl/store.go +++ b/pkg/services/org/orgimpl/store.go @@ -74,26 +74,32 @@ func (ss *sqlStore) Get(ctx context.Context, orgID int64) (*org.Org, error) { return &orga, nil } -func (ss *sqlStore) Insert(ctx context.Context, org *org.Org) (int64, error) { +func (ss *sqlStore) Insert(ctx context.Context, orga *org.Org) (int64, error) { var orgID int64 var err error err = ss.db.WithDbSession(ctx, func(sess *db.Session) error { - if _, err = sess.Insert(org); err != nil { + if isNameTaken, err := isOrgNameTaken(orga.Name, orga.ID, sess); err != nil { + return err + } else if isNameTaken { + return org.ErrOrgNameTaken + } + + if _, err = sess.Insert(orga); err != nil { return err } - orgID = org.ID + orgID = orga.ID - if org.ID != 0 { + if orga.ID != 0 { // it sets the setval in the sequence if err := ss.dialect.PostInsertId("org", sess.Session); err != nil { return err } } sess.PublishAfterCommit(&events.OrgCreated{ - Timestamp: org.Created, - Id: org.ID, - Name: org.Name, + Timestamp: orga.Created, + Id: orga.ID, + Name: orga.Name, }) return nil }) diff --git a/pkg/services/org/orgimpl/store_test.go b/pkg/services/org/orgimpl/store_test.go index d24c28388ba..882139fe33e 100644 --- a/pkg/services/org/orgimpl/store_test.go +++ b/pkg/services/org/orgimpl/store_test.go @@ -48,6 +48,16 @@ func TestIntegrationOrgDataAccess(t *testing.T) { require.NoError(t, err) }) + t.Run("insert with org name taken", func(t *testing.T) { + _, err := orgStore.Insert(context.Background(), &org.Org{ + Version: 1, + Name: "test1", + Created: time.Now(), + Updated: time.Now(), + }) + require.Error(t, err, org.ErrOrgNameTaken) + }) + t.Run("org inserted with next available org ID", func(t *testing.T) { orgID, err := orgStore.Insert(context.Background(), &org.Org{ ID: 55, @@ -61,6 +71,14 @@ func TestIntegrationOrgDataAccess(t *testing.T) { require.NoError(t, err) }) + t.Run("update with org name taken", func(t *testing.T) { + err := orgStore.Update(context.Background(), &org.UpdateOrgCommand{ + OrgId: 55, + Name: "test1", + }) + require.Error(t, err, org.ErrOrgNameTaken) + }) + t.Run("delete by user", func(t *testing.T) { err := orgStore.DeleteUserFromAll(context.Background(), 1) require.NoError(t, err)