From 8fc5a5e8a15f09eab3f731e48eb0be3d83b5f4a8 Mon Sep 17 00:00:00 2001 From: Chaim Lev-Ari Date: Thu, 23 Dec 2021 07:57:32 +0200 Subject: [PATCH] fix(teams): create more then one team [EE-2184] (#6305) fixes [EE-2184] --- api/dataservices/team/team.go | 2 +- api/dataservices/team/tests/team_test.go | 53 ++++++++++++++++++++++++ api/dataservices/team/tests/utils.go | 28 +++++++++++++ 3 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 api/dataservices/team/tests/team_test.go create mode 100644 api/dataservices/team/tests/utils.go diff --git a/api/dataservices/team/team.go b/api/dataservices/team/team.go index cf8fe2d4e..14aa1c131 100644 --- a/api/dataservices/team/team.go +++ b/api/dataservices/team/team.go @@ -63,7 +63,7 @@ func (service *Service) TeamByName(name string) (*portainer.Team, error) { logrus.WithField("obj", obj).Errorf("Failed to convert to Team object") return nil, fmt.Errorf("Failed to convert to Team object: %s", obj) } - if strings.EqualFold(t.Name, name) { + if strings.EqualFold(team.Name, name) { t = team return nil, stop } diff --git a/api/dataservices/team/tests/team_test.go b/api/dataservices/team/tests/team_test.go new file mode 100644 index 000000000..45755ad4a --- /dev/null +++ b/api/dataservices/team/tests/team_test.go @@ -0,0 +1,53 @@ +package tests + +import ( + "testing" + + "github.com/portainer/portainer/api/dataservices/errors" + "github.com/portainer/portainer/api/datastore" + "github.com/stretchr/testify/assert" +) + +func Test_teamByName(t *testing.T) { + t.Run("When store is empty should return ErrObjectNotFound", func(t *testing.T) { + _, store, teardown := datastore.MustNewTestStore(true) + defer teardown() + + _, err := store.Team().TeamByName("name") + assert.ErrorIs(t, err, errors.ErrObjectNotFound) + + }) + + t.Run("When there is no object with the same name should return ErrObjectNotFound", func(t *testing.T) { + _, store, teardown := datastore.MustNewTestStore(true) + defer teardown() + + teamBuilder := teamBuilder{ + t: t, + store: store, + count: 0, + } + + teamBuilder.createNew("name1") + + _, err := store.Team().TeamByName("name") + assert.ErrorIs(t, err, errors.ErrObjectNotFound) + }) + + t.Run("When there is an object with the same name should return the object", func(t *testing.T) { + _, store, teardown := datastore.MustNewTestStore(true) + defer teardown() + + teamBuilder := teamBuilder{ + t: t, + store: store, + count: 0, + } + + expectedTeam := teamBuilder.createNew("name1") + + team, err := store.Team().TeamByName("name1") + assert.NoError(t, err, "TeamByName should succeed") + assert.Equal(t, expectedTeam, team) + }) +} diff --git a/api/dataservices/team/tests/utils.go b/api/dataservices/team/tests/utils.go new file mode 100644 index 000000000..cdcd29ee3 --- /dev/null +++ b/api/dataservices/team/tests/utils.go @@ -0,0 +1,28 @@ +package tests + +import ( + "testing" + + portainer "github.com/portainer/portainer/api" + "github.com/portainer/portainer/api/datastore" + "github.com/stretchr/testify/assert" +) + +type teamBuilder struct { + t *testing.T + count int + store *datastore.Store +} + +func (b *teamBuilder) createNew(name string) *portainer.Team { + b.count++ + team := &portainer.Team{ + ID: portainer.TeamID(b.count), + Name: name, + } + + err := b.store.Team().Create(team) + assert.NoError(b.t, err) + + return team +}