Chore: ErrOrgNameTaken error at org insert instead of SQL error (#69325)

* Add ErrOrgNameTaken check to org insert

* Add tests for ErrOrgNameTaken
This commit is contained in:
Pierre Baumard 2023-09-13 16:42:19 +02:00 committed by GitHub
parent a482795a96
commit 81551a4cb4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 31 additions and 7 deletions

View File

@ -74,26 +74,32 @@ func (ss *sqlStore) Get(ctx context.Context, orgID int64) (*org.Org, error) {
return &orga, nil 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 orgID int64
var err error var err error
err = ss.db.WithDbSession(ctx, func(sess *db.Session) 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 return err
} }
orgID = org.ID orgID = orga.ID
if org.ID != 0 { if orga.ID != 0 {
// it sets the setval in the sequence // it sets the setval in the sequence
if err := ss.dialect.PostInsertId("org", sess.Session); err != nil { if err := ss.dialect.PostInsertId("org", sess.Session); err != nil {
return err return err
} }
} }
sess.PublishAfterCommit(&events.OrgCreated{ sess.PublishAfterCommit(&events.OrgCreated{
Timestamp: org.Created, Timestamp: orga.Created,
Id: org.ID, Id: orga.ID,
Name: org.Name, Name: orga.Name,
}) })
return nil return nil
}) })

View File

@ -48,6 +48,16 @@ func TestIntegrationOrgDataAccess(t *testing.T) {
require.NoError(t, err) 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) { t.Run("org inserted with next available org ID", func(t *testing.T) {
orgID, err := orgStore.Insert(context.Background(), &org.Org{ orgID, err := orgStore.Insert(context.Background(), &org.Org{
ID: 55, ID: 55,
@ -61,6 +71,14 @@ func TestIntegrationOrgDataAccess(t *testing.T) {
require.NoError(t, err) 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) { t.Run("delete by user", func(t *testing.T) {
err := orgStore.DeleteUserFromAll(context.Background(), 1) err := orgStore.DeleteUserFromAll(context.Background(), 1)
require.NoError(t, err) require.NoError(t, err)