corso/src/pkg/services/m365/users_test.go
Abhishek Pandey 35ccb985df
Cleanup old user info code (#4189)
<!-- PR description-->

---

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

- [ ]  Yes, it's included
- [ ] 🕐 Yes, but in a later PR
- [x]  No

#### Type of change

<!--- Please check the type of change your PR introduces: --->
- [ ] 🌻 Feature
- [ ] 🐛 Bugfix
- [ ] 🗺️ Documentation
- [ ] 🤖 Supportability/Tests
- [ ] 💻 CI/Deployment
- [x] 🧹 Tech Debt/Cleanup

#### Issue(s)

<!-- Can reference multiple issues. Use one of the following "magic words" - "closes, fixes" to auto-close the Github issue. -->
* #<issue>

#### Test Plan

<!-- How will this be tested prior to merging.-->
- [ ] 💪 Manual
- [x]  Unit test
- [ ] 💚 E2E
2023-09-08 08:41:58 +00:00

243 lines
5.5 KiB
Go

package m365
import (
"testing"
"github.com/alcionai/clues"
"github.com/google/uuid"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/stretchr/testify/suite"
"github.com/alcionai/corso/src/internal/m365/graph"
"github.com/alcionai/corso/src/internal/tester"
"github.com/alcionai/corso/src/internal/tester/tconfig"
"github.com/alcionai/corso/src/pkg/account"
"github.com/alcionai/corso/src/pkg/credentials"
"github.com/alcionai/corso/src/pkg/services/m365/api"
)
type userIntegrationSuite struct {
tester.Suite
acct account.Account
}
func TestUserIntegrationSuite(t *testing.T) {
suite.Run(t, &userIntegrationSuite{
Suite: tester.NewIntegrationSuite(
t,
[][]string{tconfig.M365AcctCredEnvs}),
})
}
func (suite *userIntegrationSuite) SetupSuite() {
ctx, flush := tester.NewContext(suite.T())
defer flush()
graph.InitializeConcurrencyLimiter(ctx, true, 4)
suite.acct = tconfig.NewM365Account(suite.T())
}
func (suite *userIntegrationSuite) TestUsersCompat_HasNoInfo() {
t := suite.T()
ctx, flush := tester.NewContext(t)
defer flush()
graph.InitializeConcurrencyLimiter(ctx, true, 4)
acct := tconfig.NewM365Account(suite.T())
users, err := UsersCompatNoInfo(ctx, acct)
assert.NoError(t, err, clues.ToCore(err))
assert.NotEmpty(t, users)
for _, u := range users {
suite.Run("user_"+u.ID, func() {
t := suite.T()
assert.NotEmpty(t, u.ID)
assert.NotEmpty(t, u.PrincipalName)
assert.NotEmpty(t, u.Name)
})
}
}
func (suite *userIntegrationSuite) TestUserHasMailbox() {
t := suite.T()
acct := tconfig.NewM365Account(t)
userID := tconfig.M365UserID(t)
table := []struct {
name string
user string
expect bool
}{
{
name: "user with no mailbox",
user: "a53c26f7-5100-4acb-a910-4d20960b2c19", // User: testevents@10rqc2.onmicrosoft.com
expect: false,
},
{
name: "user with mailbox",
user: userID,
expect: true,
},
}
for _, test := range table {
suite.Run(test.name, func() {
t := suite.T()
ctx, flush := tester.NewContext(t)
defer flush()
enabled, err := UserHasMailbox(ctx, acct, test.user)
require.NoError(t, err, clues.ToCore(err))
assert.Equal(t, test.expect, enabled)
})
}
}
func (suite *userIntegrationSuite) TestUserHasDrive() {
t := suite.T()
acct := tconfig.NewM365Account(t)
userID := tconfig.M365UserID(t)
table := []struct {
name string
user string
expect bool
expectErr require.ErrorAssertionFunc
}{
{
name: "user without drive",
user: "a53c26f7-5100-4acb-a910-4d20960b2c19", // User: testevents@10rqc2.onmicrosoft.com
expect: false,
expectErr: require.NoError,
},
{
name: "user with drive",
user: userID,
expect: true,
expectErr: require.NoError,
},
}
for _, test := range table {
suite.Run(test.name, func() {
t := suite.T()
ctx, flush := tester.NewContext(t)
defer flush()
enabled, err := UserHasDrives(ctx, acct, test.user)
test.expectErr(t, err, clues.ToCore(err))
assert.Equal(t, test.expect, enabled)
})
}
}
func (suite *userIntegrationSuite) TestUserGetMailboxInfo() {
t := suite.T()
acct := tconfig.NewM365Account(t)
userID := tconfig.M365UserID(t)
table := []struct {
name string
user string
expect func(t *testing.T, info api.MailboxInfo)
expectErr require.ErrorAssertionFunc
}{
{
name: "shared mailbox",
user: "bb1a2049-3fc1-4fdc-93b8-7a14f63dd0db", // User: neha-test-shared-mailbox@10rqc2.onmicrosoft.com
expect: func(t *testing.T, info api.MailboxInfo) {
require.NotNil(t, info)
assert.Equal(t, "shared", info.Purpose)
},
expectErr: require.NoError,
},
{
name: "user mailbox",
user: userID,
expect: func(t *testing.T, info api.MailboxInfo) {
require.NotNil(t, info)
assert.Equal(t, "user", info.Purpose)
},
expectErr: require.NoError,
},
{
name: "user with no mailbox",
user: "a53c26f7-5100-4acb-a910-4d20960b2c19", // User: testevents@10rqc2.onmicrosoft.com
expect: func(t *testing.T, info api.MailboxInfo) {
require.NotNil(t, info)
assert.Contains(t, info.ErrGetMailBoxSetting, api.ErrMailBoxNotFound)
},
expectErr: require.NoError,
},
{
name: "invalid user",
user: uuid.NewString(),
expect: func(t *testing.T, info api.MailboxInfo) {
mi := api.MailboxInfo{
ErrGetMailBoxSetting: []error{},
}
require.Equal(t, mi, info)
},
expectErr: require.Error,
},
}
for _, test := range table {
suite.Run(test.name, func() {
t := suite.T()
ctx, flush := tester.NewContext(t)
defer flush()
info, err := UserGetMailboxInfo(ctx, acct, test.user)
test.expectErr(t, err, clues.ToCore(err))
test.expect(t, info)
})
}
}
func (suite *userIntegrationSuite) TestUsers_InvalidCredentials() {
table := []struct {
name string
acct func(t *testing.T) account.Account
}{
{
name: "Invalid Credentials",
acct: func(t *testing.T) account.Account {
a, err := account.NewAccount(
account.ProviderM365,
account.M365Config{
M365: credentials.M365{
AzureClientID: "Test",
AzureClientSecret: "without",
},
AzureTenantID: "data",
},
)
require.NoError(t, err, clues.ToCore(err))
return a
},
},
}
for _, test := range table {
suite.Run(test.name, func() {
t := suite.T()
ctx, flush := tester.NewContext(t)
defer flush()
users, err := UsersCompatNoInfo(ctx, test.acct(t))
assert.Empty(t, users, "returned some users")
assert.NotNil(t, err)
})
}
}