corso/src/pkg/services/m365/groups_test.go
Keepers 9aa32d2755
allow groups to have no display name (#5020)
relax conditions on groups by allowing them to have an empty display name.

---

#### Does this PR need a docs update or release note?

- [x]  Yes, it's included

#### Type of change

- [x] 🐛 Bugfix

#### Issue(s)

* Fixes #4918

#### Test Plan

- [x] 💪 Manual
- [x]  Unit test
2024-01-12 19:16:35 +00:00

238 lines
5.2 KiB
Go

package m365
import (
"testing"
"github.com/alcionai/clues"
"github.com/google/uuid"
"github.com/microsoftgraph/msgraph-sdk-go/models"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/stretchr/testify/suite"
"github.com/alcionai/corso/src/internal/common/ptr"
"github.com/alcionai/corso/src/internal/tester"
"github.com/alcionai/corso/src/internal/tester/tconfig"
"github.com/alcionai/corso/src/pkg/errs"
"github.com/alcionai/corso/src/pkg/errs/core"
"github.com/alcionai/corso/src/pkg/fault"
)
type GroupsIntgSuite struct {
tester.Suite
cli client
}
func TestGroupsIntgSuite(t *testing.T) {
suite.Run(t, &GroupsIntgSuite{
Suite: tester.NewIntegrationSuite(
t,
[][]string{tconfig.M365AcctCredEnvs}),
})
}
func (suite *GroupsIntgSuite) SetupSuite() {
t := suite.T()
ctx, flush := tester.NewContext(t)
defer flush()
acct := tconfig.NewM365Account(t)
var err error
// will init the concurrency limiter
suite.cli, err = NewM365Client(ctx, acct)
require.NoError(t, err, clues.ToCore(err))
}
func (suite *GroupsIntgSuite) TestGroupByID() {
t := suite.T()
ctx, flush := tester.NewContext(t)
defer flush()
gid := tconfig.M365TeamID(t)
group, err := suite.cli.GroupByID(ctx, gid)
require.NoError(t, err, clues.ToCore(err))
require.NotNil(t, group)
assert.Equal(t, gid, group.ID, "must match expected id")
assert.NotEmpty(t, group.DisplayName)
}
func (suite *GroupsIntgSuite) TestGroupByID_ByEmail() {
t := suite.T()
ctx, flush := tester.NewContext(t)
defer flush()
gid := tconfig.M365TeamID(t)
group, err := suite.cli.GroupByID(ctx, gid)
require.NoError(t, err, clues.ToCore(err))
require.NotNil(t, group)
assert.Equal(t, gid, group.ID, "must match expected id")
assert.NotEmpty(t, group.DisplayName)
gemail := tconfig.M365TeamEmail(t)
groupByEmail, err := suite.cli.GroupByID(ctx, gemail)
require.NoError(t, err, clues.ToCore(err))
require.NotNil(t, group)
assert.Equal(t, groupByEmail, group, "must be the same group as the one gotten by id")
}
func (suite *GroupsIntgSuite) TestTeamByID() {
t := suite.T()
ctx, flush := tester.NewContext(t)
defer flush()
gid := tconfig.M365TeamID(t)
group, err := suite.cli.TeamByID(ctx, gid)
require.NoError(t, err, clues.ToCore(err))
require.NotNil(t, group)
assert.Equal(t, gid, group.ID, "must match expected id")
assert.NotEmpty(t, group.DisplayName)
}
func (suite *GroupsIntgSuite) TestGroupByID_notFound() {
t := suite.T()
ctx, flush := tester.NewContext(t)
defer flush()
group, err := suite.cli.GroupByID(ctx, uuid.NewString())
require.Nil(t, group)
require.ErrorIs(t, err, core.ErrNotFound, clues.ToCore(err))
require.True(t, errs.Is(err, core.ErrNotFound))
}
func (suite *GroupsIntgSuite) TestGroups() {
t := suite.T()
ctx, flush := tester.NewContext(t)
defer flush()
groups, err := suite.cli.Groups(ctx, fault.New(true))
assert.NoError(t, err, clues.ToCore(err))
assert.NotEmpty(t, groups)
for _, group := range groups {
suite.Run("group_"+group.ID, func() {
t := suite.T()
assert.NotEmpty(t, group.ID)
assert.NotEmpty(t, group.DisplayName)
// at least one known group should be a team
if group.ID == tconfig.M365TeamID(t) {
assert.True(t, group.IsTeam)
}
})
}
}
func (suite *GroupsIntgSuite) TestSitesInGroup() {
t := suite.T()
ctx, flush := tester.NewContext(t)
defer flush()
gid := tconfig.M365TeamID(t)
sites, err := suite.cli.SitesInGroup(ctx, gid, fault.New(true))
assert.NoError(t, err, clues.ToCore(err))
assert.NotEmpty(t, sites)
}
// ---------------------------------------------------------------------------
// unit tests
// ---------------------------------------------------------------------------
type GroupsUnitSuite struct {
tester.Suite
}
func TestGroupsUnitSuite(t *testing.T) {
suite.Run(t, &GroupsUnitSuite{Suite: tester.NewUnitSuite(t)})
}
func (suite *GroupsUnitSuite) TestParseGroupFromTeamable() {
id := uuid.NewString()
name := uuid.NewString()
table := []struct {
name string
team func() models.Teamable
expectErr assert.ErrorAssertionFunc
expect Group
}{
{
name: "good team",
team: func() models.Teamable {
team := models.NewTeam()
team.SetId(ptr.To(id))
team.SetDisplayName(ptr.To(name))
return team
},
expectErr: assert.NoError,
expect: Group{
ID: id,
DisplayName: name,
IsTeam: true,
},
},
{
name: "no display name",
team: func() models.Teamable {
team := models.NewTeam()
team.SetId(ptr.To(id))
return team
},
expectErr: assert.NoError,
expect: Group{
ID: id,
DisplayName: "",
IsTeam: true,
},
},
{
name: "no id",
team: func() models.Teamable {
team := models.NewTeam()
team.SetDisplayName(ptr.To(name))
return team
},
expectErr: assert.Error,
expect: Group{},
},
}
for _, test := range table {
suite.Run(test.name, func() {
t := suite.T()
ctx, flush := tester.NewContext(t)
defer flush()
result, err := parseGroupFromTeamable(ctx, test.team())
test.expectErr(t, err, clues.ToCore(err))
if err != nil {
assert.Nil(t, result)
} else {
assert.Equal(t, test.expect, *result)
}
})
}
}