Compare commits

...

1 Commits

Author SHA1 Message Date
ryanfkeepers
5dac78db7f start centralizing intg test setup
we duplicate a lot of boilerplate code in integration tests
involving the creation of an api client and the aggregation
of external IDs.  In some packages we've begun
to add quality-of-life structs to aggregate these setup details.
This change begins moving those structs to a singular
package so that we can clear out the common setup boilerplate
found elsewhere in the code.
2023-10-26 14:59:02 -06:00
15 changed files with 273 additions and 252 deletions

View File

@ -0,0 +1,130 @@
package tsetup
import (
"testing"
"github.com/alcionai/clues"
"github.com/stretchr/testify/require"
"github.com/alcionai/corso/src/internal/common/ptr"
"github.com/alcionai/corso/src/internal/m365/graph"
"github.com/alcionai/corso/src/internal/m365/graph/mock"
"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/control"
"github.com/alcionai/corso/src/pkg/services/m365/api"
)
// ---------------------------------------------------------------------------
// Gockable client
// ---------------------------------------------------------------------------
// GockClient produces a new exchange api client that can be
// mocked using gock.
func gockClient(creds account.M365Config) (api.Client, error) {
s, err := mock.NewService(creds)
if err != nil {
return api.Client{}, err
}
li, err := mock.NewService(creds, graph.NoTimeout())
if err != nil {
return api.Client{}, err
}
return api.Client{
Credentials: creds,
Stable: s,
LargeItem: li,
}, nil
}
// ---------------------------------------------------------------------------
// Suite Setup
// ---------------------------------------------------------------------------
type m365IDs struct {
ID string
Email string
DriveID string
DriveRootFolderID string
TestContainerID string
}
type M365 struct {
AC api.Client
GockAC api.Client
User m365IDs
Site m365IDs
Group m365IDs
NonTeamGroup m365IDs // group which does not have an associated team
}
func NewM365IntegrationTester(t *testing.T) M365 {
mit := M365{}
ctx, flush := tester.NewContext(t)
defer flush()
graph.InitializeConcurrencyLimiter(ctx, true, 4)
a := tconfig.NewM365Account(t)
creds, err := a.M365Config()
require.NoError(t, err, clues.ToCore(err))
mit.AC, err = api.NewClient(creds, control.DefaultOptions())
require.NoError(t, err, clues.ToCore(err))
mit.GockAC, err = gockClient(creds)
require.NoError(t, err, clues.ToCore(err))
// user drive
mit.User.ID = tconfig.M365UserID(t)
userDrive, err := mit.AC.Users().GetDefaultDrive(ctx, mit.User.ID)
require.NoError(t, err, clues.ToCore(err))
mit.User.DriveID = ptr.Val(userDrive.GetId())
userDriveRootFolder, err := mit.AC.Drives().GetRootFolder(ctx, mit.User.DriveID)
require.NoError(t, err, clues.ToCore(err))
mit.User.DriveRootFolderID = ptr.Val(userDriveRootFolder.GetId())
// site
mit.Site.ID = tconfig.M365SiteID(t)
siteDrive, err := mit.AC.Sites().GetDefaultDrive(ctx, mit.Site.ID)
require.NoError(t, err, clues.ToCore(err))
mit.Site.DriveID = ptr.Val(siteDrive.GetId())
siteDriveRootFolder, err := mit.AC.Drives().GetRootFolder(ctx, mit.Site.DriveID)
require.NoError(t, err, clues.ToCore(err))
mit.Site.DriveRootFolderID = ptr.Val(siteDriveRootFolder.GetId())
// groups/teams
// use of the TeamID is intentional here, so that we are assured
// the group has full usage of the teams api.
mit.Group.ID = tconfig.M365TeamID(t)
mit.Group.Email = tconfig.M365TeamEmail(t)
mit.NonTeamGroup.ID = tconfig.M365GroupID(t)
channel, err := mit.AC.Channels().
GetChannelByName(
ctx,
mit.Group.ID,
"Test")
require.NoError(t, err, clues.ToCore(err))
require.Equal(t, "Test", ptr.Val(channel.GetDisplayName()))
mit.Group.TestContainerID = ptr.Val(channel.GetId())
return mit
}

View File

@ -9,13 +9,14 @@ import (
"github.com/alcionai/corso/src/internal/tester" "github.com/alcionai/corso/src/internal/tester"
"github.com/alcionai/corso/src/internal/tester/tconfig" "github.com/alcionai/corso/src/internal/tester/tconfig"
"github.com/alcionai/corso/src/internal/tester/tsetup"
"github.com/alcionai/corso/src/pkg/account" "github.com/alcionai/corso/src/pkg/account"
"github.com/alcionai/corso/src/pkg/control" "github.com/alcionai/corso/src/pkg/control"
) )
type AccessAPIIntgSuite struct { type AccessAPIIntgSuite struct {
tester.Suite tester.Suite
its intgTesterSetup its tsetup.M365
} }
func TestAccessAPIIntgSuite(t *testing.T) { func TestAccessAPIIntgSuite(t *testing.T) {
@ -27,7 +28,7 @@ func TestAccessAPIIntgSuite(t *testing.T) {
} }
func (suite *AccessAPIIntgSuite) SetupSuite() { func (suite *AccessAPIIntgSuite) SetupSuite() {
suite.its = newIntegrationTesterSetup(suite.T()) suite.its = tsetup.NewM365IntegrationTester(suite.T())
} }
func (suite *AccessAPIIntgSuite) TestGetToken() { func (suite *AccessAPIIntgSuite) TestGetToken() {
@ -38,13 +39,13 @@ func (suite *AccessAPIIntgSuite) TestGetToken() {
}{ }{
{ {
name: "good", name: "good",
creds: func() account.M365Config { return suite.its.ac.Credentials }, creds: func() account.M365Config { return suite.its.AC.Credentials },
expectErr: require.NoError, expectErr: require.NoError,
}, },
{ {
name: "bad tenant ID", name: "bad tenant ID",
creds: func() account.M365Config { creds: func() account.M365Config {
creds := suite.its.ac.Credentials creds := suite.its.AC.Credentials
creds.AzureTenantID = "ZIM" creds.AzureTenantID = "ZIM"
return creds return creds
@ -54,7 +55,7 @@ func (suite *AccessAPIIntgSuite) TestGetToken() {
{ {
name: "missing tenant ID", name: "missing tenant ID",
creds: func() account.M365Config { creds: func() account.M365Config {
creds := suite.its.ac.Credentials creds := suite.its.AC.Credentials
creds.AzureTenantID = "" creds.AzureTenantID = ""
return creds return creds
@ -64,7 +65,7 @@ func (suite *AccessAPIIntgSuite) TestGetToken() {
{ {
name: "bad client ID", name: "bad client ID",
creds: func() account.M365Config { creds: func() account.M365Config {
creds := suite.its.ac.Credentials creds := suite.its.AC.Credentials
creds.AzureClientID = "GIR" creds.AzureClientID = "GIR"
return creds return creds
@ -74,7 +75,7 @@ func (suite *AccessAPIIntgSuite) TestGetToken() {
{ {
name: "missing client ID", name: "missing client ID",
creds: func() account.M365Config { creds: func() account.M365Config {
creds := suite.its.ac.Credentials creds := suite.its.AC.Credentials
creds.AzureClientID = "" creds.AzureClientID = ""
return creds return creds
@ -84,7 +85,7 @@ func (suite *AccessAPIIntgSuite) TestGetToken() {
{ {
name: "bad client secret", name: "bad client secret",
creds: func() account.M365Config { creds: func() account.M365Config {
creds := suite.its.ac.Credentials creds := suite.its.AC.Credentials
creds.AzureClientSecret = "MY TALLEST" creds.AzureClientSecret = "MY TALLEST"
return creds return creds
@ -94,7 +95,7 @@ func (suite *AccessAPIIntgSuite) TestGetToken() {
{ {
name: "missing client secret", name: "missing client secret",
creds: func() account.M365Config { creds: func() account.M365Config {
creds := suite.its.ac.Credentials creds := suite.its.AC.Credentials
creds.AzureClientSecret = "" creds.AzureClientSecret = ""
return creds return creds
@ -109,7 +110,7 @@ func (suite *AccessAPIIntgSuite) TestGetToken() {
ctx, flush := tester.NewContext(t) ctx, flush := tester.NewContext(t)
defer flush() defer flush()
ac, err := NewClient(suite.its.ac.Credentials, control.DefaultOptions()) ac, err := NewClient(suite.its.AC.Credentials, control.DefaultOptions())
require.NoError(t, err, clues.ToCore(err)) require.NoError(t, err, clues.ToCore(err))
ac.Credentials = test.creds() ac.Credentials = test.creds()

View File

@ -14,11 +14,12 @@ import (
"github.com/alcionai/corso/src/internal/common/str" "github.com/alcionai/corso/src/internal/common/str"
"github.com/alcionai/corso/src/internal/tester" "github.com/alcionai/corso/src/internal/tester"
"github.com/alcionai/corso/src/internal/tester/tconfig" "github.com/alcionai/corso/src/internal/tester/tconfig"
"github.com/alcionai/corso/src/internal/tester/tsetup"
) )
type ChannelsPagerIntgSuite struct { type ChannelsPagerIntgSuite struct {
tester.Suite tester.Suite
its intgTesterSetup its tsetup.M365
} }
func TestChannelPagerIntgSuite(t *testing.T) { func TestChannelPagerIntgSuite(t *testing.T) {
@ -30,19 +31,19 @@ func TestChannelPagerIntgSuite(t *testing.T) {
} }
func (suite *ChannelsPagerIntgSuite) SetupSuite() { func (suite *ChannelsPagerIntgSuite) SetupSuite() {
suite.its = newIntegrationTesterSetup(suite.T()) suite.its = tsetup.NewM365IntegrationTester(suite.T())
} }
func (suite *ChannelsPagerIntgSuite) TestEnumerateChannels() { func (suite *ChannelsPagerIntgSuite) TestEnumerateChannels() {
var ( var (
t = suite.T() t = suite.T()
ac = suite.its.ac.Channels() ac = suite.its.AC.Channels()
) )
ctx, flush := tester.NewContext(t) ctx, flush := tester.NewContext(t)
defer flush() defer flush()
chans, err := ac.GetChannels(ctx, suite.its.group.id) chans, err := ac.GetChannels(ctx, suite.its.Group.ID)
require.NoError(t, err, clues.ToCore(err)) require.NoError(t, err, clues.ToCore(err))
require.NotEmpty(t, chans) require.NotEmpty(t, chans)
} }
@ -50,7 +51,7 @@ func (suite *ChannelsPagerIntgSuite) TestEnumerateChannels() {
func (suite *ChannelsPagerIntgSuite) TestEnumerateChannelMessages() { func (suite *ChannelsPagerIntgSuite) TestEnumerateChannelMessages() {
var ( var (
t = suite.T() t = suite.T()
ac = suite.its.ac.Channels() ac = suite.its.AC.Channels()
) )
ctx, flush := tester.NewContext(t) ctx, flush := tester.NewContext(t)
@ -58,8 +59,8 @@ func (suite *ChannelsPagerIntgSuite) TestEnumerateChannelMessages() {
addedIDs, _, _, du, err := ac.GetChannelMessageIDs( addedIDs, _, _, du, err := ac.GetChannelMessageIDs(
ctx, ctx,
suite.its.group.id, suite.its.Group.ID,
suite.its.group.testContainerID, suite.its.Group.TestContainerID,
"", "",
true) true)
require.NoError(t, err, clues.ToCore(err)) require.NoError(t, err, clues.ToCore(err))
@ -69,8 +70,8 @@ func (suite *ChannelsPagerIntgSuite) TestEnumerateChannelMessages() {
addedIDs, _, deletedIDs, du, err := ac.GetChannelMessageIDs( addedIDs, _, deletedIDs, du, err := ac.GetChannelMessageIDs(
ctx, ctx,
suite.its.group.id, suite.its.Group.ID,
suite.its.group.testContainerID, suite.its.Group.TestContainerID,
du.URL, du.URL,
true) true)
require.NoError(t, err, clues.ToCore(err)) require.NoError(t, err, clues.ToCore(err))
@ -83,9 +84,9 @@ func (suite *ChannelsPagerIntgSuite) TestEnumerateChannelMessages() {
suite.Run(id+"-replies", func() { suite.Run(id+"-replies", func() {
testEnumerateChannelMessageReplies( testEnumerateChannelMessageReplies(
suite.T(), suite.T(),
suite.its.ac.Channels(), suite.its.AC.Channels(),
suite.its.group.id, suite.its.Group.ID,
suite.its.group.testContainerID, suite.its.Group.TestContainerID,
id) id)
}) })
} }

View File

@ -12,11 +12,12 @@ import (
"github.com/alcionai/corso/src/internal/common/ptr" "github.com/alcionai/corso/src/internal/common/ptr"
"github.com/alcionai/corso/src/internal/tester" "github.com/alcionai/corso/src/internal/tester"
"github.com/alcionai/corso/src/internal/tester/tconfig" "github.com/alcionai/corso/src/internal/tester/tconfig"
"github.com/alcionai/corso/src/internal/tester/tsetup"
) )
type ContactsPagerIntgSuite struct { type ContactsPagerIntgSuite struct {
tester.Suite tester.Suite
its intgTesterSetup its tsetup.M365
} }
func TestContactsPagerIntgSuite(t *testing.T) { func TestContactsPagerIntgSuite(t *testing.T) {
@ -28,23 +29,23 @@ func TestContactsPagerIntgSuite(t *testing.T) {
} }
func (suite *ContactsPagerIntgSuite) SetupSuite() { func (suite *ContactsPagerIntgSuite) SetupSuite() {
suite.its = newIntegrationTesterSetup(suite.T()) suite.its = tsetup.NewM365IntegrationTester(suite.T())
} }
func (suite *ContactsPagerIntgSuite) TestContacts_GetItemsInContainerByCollisionKey() { func (suite *ContactsPagerIntgSuite) TestContacts_GetItemsInContainerByCollisionKey() {
t := suite.T() t := suite.T()
ac := suite.its.ac.Contacts() ac := suite.its.AC.Contacts()
ctx, flush := tester.NewContext(t) ctx, flush := tester.NewContext(t)
defer flush() defer flush()
container, err := ac.GetContainerByID(ctx, suite.its.user.id, "contacts") container, err := ac.GetContainerByID(ctx, suite.its.User.ID, "contacts")
require.NoError(t, err, clues.ToCore(err)) require.NoError(t, err, clues.ToCore(err))
conts, err := ac.Stable. conts, err := ac.Stable.
Client(). Client().
Users(). Users().
ByUserId(suite.its.user.id). ByUserId(suite.its.User.ID).
ContactFolders(). ContactFolders().
ByContactFolderId(ptr.Val(container.GetId())). ByContactFolderId(ptr.Val(container.GetId())).
Contacts(). Contacts().
@ -60,7 +61,7 @@ func (suite *ContactsPagerIntgSuite) TestContacts_GetItemsInContainerByCollision
expect := maps.Keys(expectM) expect := maps.Keys(expectM)
results, err := suite.its.ac.Contacts().GetItemsInContainerByCollisionKey(ctx, suite.its.user.id, "contacts") results, err := suite.its.AC.Contacts().GetItemsInContainerByCollisionKey(ctx, suite.its.User.ID, "contacts")
require.NoError(t, err, clues.ToCore(err)) require.NoError(t, err, clues.ToCore(err))
require.Less(t, 0, len(results), "requires at least one result") require.Less(t, 0, len(results), "requires at least one result")
@ -85,18 +86,18 @@ func (suite *ContactsPagerIntgSuite) TestContacts_GetItemsInContainerByCollision
func (suite *ContactsPagerIntgSuite) TestContacts_GetItemsIDsInContainer() { func (suite *ContactsPagerIntgSuite) TestContacts_GetItemsIDsInContainer() {
t := suite.T() t := suite.T()
ac := suite.its.ac.Contacts() ac := suite.its.AC.Contacts()
ctx, flush := tester.NewContext(t) ctx, flush := tester.NewContext(t)
defer flush() defer flush()
container, err := ac.GetContainerByID(ctx, suite.its.user.id, DefaultContacts) container, err := ac.GetContainerByID(ctx, suite.its.User.ID, DefaultContacts)
require.NoError(t, err, clues.ToCore(err)) require.NoError(t, err, clues.ToCore(err))
msgs, err := ac.Stable. msgs, err := ac.Stable.
Client(). Client().
Users(). Users().
ByUserId(suite.its.user.id). ByUserId(suite.its.User.ID).
ContactFolders(). ContactFolders().
ByContactFolderId(ptr.Val(container.GetId())). ByContactFolderId(ptr.Val(container.GetId())).
Contacts(). Contacts().
@ -110,8 +111,8 @@ func (suite *ContactsPagerIntgSuite) TestContacts_GetItemsIDsInContainer() {
expect[ptr.Val(m.GetId())] = struct{}{} expect[ptr.Val(m.GetId())] = struct{}{}
} }
results, err := suite.its.ac.Contacts(). results, err := suite.its.AC.Contacts().
GetItemIDsInContainer(ctx, suite.its.user.id, DefaultContacts) GetItemIDsInContainer(ctx, suite.its.User.ID, DefaultContacts)
require.NoError(t, err, clues.ToCore(err)) require.NoError(t, err, clues.ToCore(err))
require.Less(t, 0, len(results), "requires at least one result") require.Less(t, 0, len(results), "requires at least one result")
require.Equal(t, len(expect), len(results), "must have same count of items") require.Equal(t, len(expect), len(results), "must have same count of items")

View File

@ -14,6 +14,7 @@ import (
exchMock "github.com/alcionai/corso/src/internal/m365/service/exchange/mock" exchMock "github.com/alcionai/corso/src/internal/m365/service/exchange/mock"
"github.com/alcionai/corso/src/internal/tester" "github.com/alcionai/corso/src/internal/tester"
"github.com/alcionai/corso/src/internal/tester/tconfig" "github.com/alcionai/corso/src/internal/tester/tconfig"
"github.com/alcionai/corso/src/internal/tester/tsetup"
"github.com/alcionai/corso/src/pkg/backup/details" "github.com/alcionai/corso/src/pkg/backup/details"
"github.com/alcionai/corso/src/pkg/control/testdata" "github.com/alcionai/corso/src/pkg/control/testdata"
) )
@ -116,7 +117,7 @@ func (suite *ContactsAPIUnitSuite) TestBytesToContactable() {
type ContactsAPIIntgSuite struct { type ContactsAPIIntgSuite struct {
tester.Suite tester.Suite
its intgTesterSetup its tsetup.M365
} }
func TestContactsAPIntgSuite(t *testing.T) { func TestContactsAPIntgSuite(t *testing.T) {
@ -128,7 +129,7 @@ func TestContactsAPIntgSuite(t *testing.T) {
} }
func (suite *ContactsAPIIntgSuite) SetupSuite() { func (suite *ContactsAPIIntgSuite) SetupSuite() {
suite.its = newIntegrationTesterSetup(suite.T()) suite.its = tsetup.NewM365IntegrationTester(suite.T())
} }
func (suite *ContactsAPIIntgSuite) TestContacts_GetContainerByName() { func (suite *ContactsAPIIntgSuite) TestContacts_GetContainerByName() {
@ -142,9 +143,9 @@ func (suite *ContactsAPIIntgSuite) TestContacts_GetContainerByName() {
rc := testdata.DefaultRestoreConfig("contacts_api") rc := testdata.DefaultRestoreConfig("contacts_api")
cc, err := suite.its.ac.Contacts().CreateContainer( cc, err := suite.its.AC.Contacts().CreateContainer(
ctx, ctx,
suite.its.user.id, suite.its.User.ID,
"", "",
rc.Location) rc.Location)
require.NoError(t, err, clues.ToCore(err)) require.NoError(t, err, clues.ToCore(err))
@ -169,9 +170,9 @@ func (suite *ContactsAPIIntgSuite) TestContacts_GetContainerByName() {
ctx, flush := tester.NewContext(t) ctx, flush := tester.NewContext(t)
defer flush() defer flush()
_, err := suite.its.ac. _, err := suite.its.AC.
Contacts(). Contacts().
GetContainerByName(ctx, suite.its.user.id, "", test.name) GetContainerByName(ctx, suite.its.User.ID, "", test.name)
test.expectErr(t, err, clues.ToCore(err)) test.expectErr(t, err, clues.ToCore(err))
}) })
} }

View File

@ -12,11 +12,12 @@ import (
"github.com/alcionai/corso/src/internal/common/ptr" "github.com/alcionai/corso/src/internal/common/ptr"
"github.com/alcionai/corso/src/internal/tester" "github.com/alcionai/corso/src/internal/tester"
"github.com/alcionai/corso/src/internal/tester/tconfig" "github.com/alcionai/corso/src/internal/tester/tconfig"
"github.com/alcionai/corso/src/internal/tester/tsetup"
) )
type DrivePagerIntgSuite struct { type DrivePagerIntgSuite struct {
tester.Suite tester.Suite
its intgTesterSetup its tsetup.M365
} }
func TestDrivePagerIntgSuite(t *testing.T) { func TestDrivePagerIntgSuite(t *testing.T) {
@ -28,7 +29,7 @@ func TestDrivePagerIntgSuite(t *testing.T) {
} }
func (suite *DrivePagerIntgSuite) SetupSuite() { func (suite *DrivePagerIntgSuite) SetupSuite() {
suite.its = newIntegrationTesterSetup(suite.T()) suite.its = tsetup.NewM365IntegrationTester(suite.T())
} }
func (suite *DrivePagerIntgSuite) TestDrives_GetItemsInContainerByCollisionKey() { func (suite *DrivePagerIntgSuite) TestDrives_GetItemsInContainerByCollisionKey() {
@ -39,13 +40,13 @@ func (suite *DrivePagerIntgSuite) TestDrives_GetItemsInContainerByCollisionKey()
}{ }{
{ {
name: "user drive", name: "user drive",
driveID: suite.its.user.driveID, driveID: suite.its.User.DriveID,
rootFolderID: suite.its.user.driveRootFolderID, rootFolderID: suite.its.User.DriveRootFolderID,
}, },
{ {
name: "site drive", name: "site drive",
driveID: suite.its.site.driveID, driveID: suite.its.Site.DriveID,
rootFolderID: suite.its.site.driveRootFolderID, rootFolderID: suite.its.Site.DriveRootFolderID,
}, },
} }
for _, test := range table { for _, test := range table {
@ -58,7 +59,7 @@ func (suite *DrivePagerIntgSuite) TestDrives_GetItemsInContainerByCollisionKey()
t.Log("drive", test.driveID) t.Log("drive", test.driveID)
t.Log("rootFolder", test.rootFolderID) t.Log("rootFolder", test.rootFolderID)
items, err := suite.its.ac.Stable. items, err := suite.its.AC.Stable.
Client(). Client().
Drives(). Drives().
ByDriveId(test.driveID). ByDriveId(test.driveID).
@ -75,9 +76,9 @@ func (suite *DrivePagerIntgSuite) TestDrives_GetItemsInContainerByCollisionKey()
t, t,
ims, ims,
"need at least one item to compare in user %s drive %s folder %s", "need at least one item to compare in user %s drive %s folder %s",
suite.its.user.id, test.driveID, test.rootFolderID) suite.its.User.ID, test.driveID, test.rootFolderID)
results, err := suite.its.ac. results, err := suite.its.AC.
Drives(). Drives().
GetItemsInContainerByCollisionKey(ctx, test.driveID, test.rootFolderID) GetItemsInContainerByCollisionKey(ctx, test.driveID, test.rootFolderID)
require.NoError(t, err, clues.ToCore(err)) require.NoError(t, err, clues.ToCore(err))
@ -113,13 +114,13 @@ func (suite *DrivePagerIntgSuite) TestDrives_GetItemIDsInContainer() {
}{ }{
{ {
name: "user drive", name: "user drive",
driveID: suite.its.user.driveID, driveID: suite.its.User.DriveID,
rootFolderID: suite.its.user.driveRootFolderID, rootFolderID: suite.its.User.DriveRootFolderID,
}, },
{ {
name: "site drive", name: "site drive",
driveID: suite.its.site.driveID, driveID: suite.its.Site.DriveID,
rootFolderID: suite.its.site.driveRootFolderID, rootFolderID: suite.its.Site.DriveRootFolderID,
}, },
} }
for _, test := range table { for _, test := range table {
@ -132,7 +133,7 @@ func (suite *DrivePagerIntgSuite) TestDrives_GetItemIDsInContainer() {
t.Log("drive", test.driveID) t.Log("drive", test.driveID)
t.Log("rootFolder", test.rootFolderID) t.Log("rootFolder", test.rootFolderID)
items, err := suite.its.ac.Stable. items, err := suite.its.AC.Stable.
Client(). Client().
Drives(). Drives().
ByDriveId(test.driveID). ByDriveId(test.driveID).
@ -149,7 +150,7 @@ func (suite *DrivePagerIntgSuite) TestDrives_GetItemIDsInContainer() {
t, t,
igv, igv,
"need at least one item to compare in user %s drive %s folder %s", "need at least one item to compare in user %s drive %s folder %s",
suite.its.user.id, test.driveID, test.rootFolderID) suite.its.User.ID, test.driveID, test.rootFolderID)
for _, itm := range igv { for _, itm := range igv {
expect[ptr.Val(itm.GetId())] = DriveItemIDType{ expect[ptr.Val(itm.GetId())] = DriveItemIDType{
@ -158,7 +159,7 @@ func (suite *DrivePagerIntgSuite) TestDrives_GetItemIDsInContainer() {
} }
} }
results, err := suite.its.ac. results, err := suite.its.AC.
Drives(). Drives().
GetItemIDsInContainer(ctx, test.driveID, test.rootFolderID) GetItemIDsInContainer(ctx, test.driveID, test.rootFolderID)
require.NoError(t, err, clues.ToCore(err)) require.NoError(t, err, clues.ToCore(err))
@ -188,11 +189,11 @@ func (suite *DrivePagerIntgSuite) TestEnumerateDriveItems() {
items := []models.DriveItemable{} items := []models.DriveItemable{}
pager := suite.its. pager := suite.its.
ac. AC.
Drives(). Drives().
EnumerateDriveItemsDelta( EnumerateDriveItemsDelta(
ctx, ctx,
suite.its.user.driveID, suite.its.User.DriveID,
"", "",
CallConfig{ CallConfig{
Select: DefaultDriveItemProps(), Select: DefaultDriveItemProps(),

View File

@ -16,17 +16,18 @@ import (
"github.com/alcionai/corso/src/internal/m365/graph" "github.com/alcionai/corso/src/internal/m365/graph"
"github.com/alcionai/corso/src/internal/tester" "github.com/alcionai/corso/src/internal/tester"
"github.com/alcionai/corso/src/internal/tester/tconfig" "github.com/alcionai/corso/src/internal/tester/tconfig"
"github.com/alcionai/corso/src/internal/tester/tsetup"
"github.com/alcionai/corso/src/pkg/control" "github.com/alcionai/corso/src/pkg/control"
"github.com/alcionai/corso/src/pkg/control/testdata" "github.com/alcionai/corso/src/pkg/control/testdata"
) )
type DriveAPIIntgSuite struct { type DriveAPIIntgSuite struct {
tester.Suite tester.Suite
its intgTesterSetup its tsetup.M365
} }
func (suite *DriveAPIIntgSuite) SetupSuite() { func (suite *DriveAPIIntgSuite) SetupSuite() {
suite.its = newIntegrationTesterSetup(suite.T()) suite.its = tsetup.NewM365IntegrationTester(suite.T())
} }
func TestDriveAPIs(t *testing.T) { func TestDriveAPIs(t *testing.T) {
@ -44,7 +45,7 @@ func (suite *DriveAPIIntgSuite) TestDrives_CreatePagerAndGetPage() {
defer flush() defer flush()
siteID := tconfig.M365SiteID(t) siteID := tconfig.M365SiteID(t)
pager := suite.its.ac.Drives().NewSiteDrivePager(siteID, []string{"name"}) pager := suite.its.AC.Drives().NewSiteDrivePager(siteID, []string{"name"})
a, err := pager.GetPage(ctx) a, err := pager.GetPage(ctx)
assert.NoError(t, err, clues.ToCore(err)) assert.NoError(t, err, clues.ToCore(err))
@ -58,13 +59,13 @@ func (suite *DriveAPIIntgSuite) TestDrives_PostItemInContainer() {
defer flush() defer flush()
rc := testdata.DefaultRestoreConfig("drive_api_post_item") rc := testdata.DefaultRestoreConfig("drive_api_post_item")
acd := suite.its.ac.Drives() acd := suite.its.AC.Drives()
// generate a parent for the test data // generate a parent for the test data
parent, err := acd.PostItemInContainer( parent, err := acd.PostItemInContainer(
ctx, ctx,
suite.its.user.driveID, suite.its.User.DriveID,
suite.its.user.driveRootFolderID, suite.its.User.DriveRootFolderID,
NewDriveItem(rc.Location, true), NewDriveItem(rc.Location, true),
control.Replace) control.Replace)
require.NoError(t, err, clues.ToCore(err)) require.NoError(t, err, clues.ToCore(err))
@ -73,7 +74,7 @@ func (suite *DriveAPIIntgSuite) TestDrives_PostItemInContainer() {
folder := NewDriveItem("collision", true) folder := NewDriveItem("collision", true)
origFolder, err := acd.PostItemInContainer( origFolder, err := acd.PostItemInContainer(
ctx, ctx,
suite.its.user.driveID, suite.its.User.DriveID,
ptr.Val(parent.GetId()), ptr.Val(parent.GetId()),
folder, folder,
control.Copy) control.Copy)
@ -83,7 +84,7 @@ func (suite *DriveAPIIntgSuite) TestDrives_PostItemInContainer() {
file := NewDriveItem("collision.txt", false) file := NewDriveItem("collision.txt", false)
origFile, err := acd.PostItemInContainer( origFile, err := acd.PostItemInContainer(
ctx, ctx,
suite.its.user.driveID, suite.its.User.DriveID,
ptr.Val(parent.GetId()), ptr.Val(parent.GetId()),
file, file,
control.Copy) control.Copy)
@ -234,7 +235,7 @@ func (suite *DriveAPIIntgSuite) TestDrives_PostItemInContainer() {
t := suite.T() t := suite.T()
i, err := acd.PostItemInContainer( i, err := acd.PostItemInContainer(
ctx, ctx,
suite.its.user.driveID, suite.its.User.DriveID,
ptr.Val(parent.GetId()), ptr.Val(parent.GetId()),
test.postItem, test.postItem,
test.onCollision) test.onCollision)
@ -255,15 +256,15 @@ func (suite *DriveAPIIntgSuite) TestDrives_PostItemInContainer_replaceFolderRegr
var ( var (
rc = testdata.DefaultRestoreConfig("drive_folder_replace_regression") rc = testdata.DefaultRestoreConfig("drive_folder_replace_regression")
acd = suite.its.ac.Drives() acd = suite.its.AC.Drives()
files = make([]models.DriveItemable, 0, 5) files = make([]models.DriveItemable, 0, 5)
) )
// generate a folder for the test data // generate a folder for the test data
folder, err := acd.PostItemInContainer( folder, err := acd.PostItemInContainer(
ctx, ctx,
suite.its.user.driveID, suite.its.User.DriveID,
suite.its.user.driveRootFolderID, suite.its.User.DriveRootFolderID,
NewDriveItem(rc.Location, true), NewDriveItem(rc.Location, true),
// skip instead of replace here to get // skip instead of replace here to get
// an ErrItemAlreadyExistsConflict, just in case. // an ErrItemAlreadyExistsConflict, just in case.
@ -275,7 +276,7 @@ func (suite *DriveAPIIntgSuite) TestDrives_PostItemInContainer_replaceFolderRegr
file := NewDriveItem(fmt.Sprintf("collision_%d.txt", i), false) file := NewDriveItem(fmt.Sprintf("collision_%d.txt", i), false)
f, err := acd.PostItemInContainer( f, err := acd.PostItemInContainer(
ctx, ctx,
suite.its.user.driveID, suite.its.User.DriveID,
ptr.Val(folder.GetId()), ptr.Val(folder.GetId()),
file, file,
control.Copy) control.Copy)
@ -286,7 +287,7 @@ func (suite *DriveAPIIntgSuite) TestDrives_PostItemInContainer_replaceFolderRegr
resultFolder, err := acd.PostItemInContainer( resultFolder, err := acd.PostItemInContainer(
ctx, ctx,
suite.its.user.driveID, suite.its.User.DriveID,
ptr.Val(folder.GetParentReference().GetId()), ptr.Val(folder.GetParentReference().GetId()),
NewDriveItem(rc.Location, true), NewDriveItem(rc.Location, true),
control.Replace) control.Replace)
@ -297,7 +298,7 @@ func (suite *DriveAPIIntgSuite) TestDrives_PostItemInContainer_replaceFolderRegr
resultFileColl, err := acd.Stable. resultFileColl, err := acd.Stable.
Client(). Client().
Drives(). Drives().
ByDriveId(suite.its.user.driveID). ByDriveId(suite.its.User.DriveID).
Items(). Items().
ByDriveItemId(ptr.Val(resultFolder.GetId())). ByDriveItemId(ptr.Val(resultFolder.GetId())).
Children(). Children().

View File

@ -12,11 +12,12 @@ import (
"github.com/alcionai/corso/src/internal/common/ptr" "github.com/alcionai/corso/src/internal/common/ptr"
"github.com/alcionai/corso/src/internal/tester" "github.com/alcionai/corso/src/internal/tester"
"github.com/alcionai/corso/src/internal/tester/tconfig" "github.com/alcionai/corso/src/internal/tester/tconfig"
"github.com/alcionai/corso/src/internal/tester/tsetup"
) )
type EventsPagerIntgSuite struct { type EventsPagerIntgSuite struct {
tester.Suite tester.Suite
its intgTesterSetup its tsetup.M365
} }
func TestEventsPagerIntgSuite(t *testing.T) { func TestEventsPagerIntgSuite(t *testing.T) {
@ -28,23 +29,23 @@ func TestEventsPagerIntgSuite(t *testing.T) {
} }
func (suite *EventsPagerIntgSuite) SetupSuite() { func (suite *EventsPagerIntgSuite) SetupSuite() {
suite.its = newIntegrationTesterSetup(suite.T()) suite.its = tsetup.NewM365IntegrationTester(suite.T())
} }
func (suite *EventsPagerIntgSuite) TestEvents_GetItemsInContainerByCollisionKey() { func (suite *EventsPagerIntgSuite) TestEvents_GetItemsInContainerByCollisionKey() {
t := suite.T() t := suite.T()
ac := suite.its.ac.Events() ac := suite.its.AC.Events()
ctx, flush := tester.NewContext(t) ctx, flush := tester.NewContext(t)
defer flush() defer flush()
container, err := ac.GetContainerByID(ctx, suite.its.user.id, "calendar") container, err := ac.GetContainerByID(ctx, suite.its.User.ID, "calendar")
require.NoError(t, err, clues.ToCore(err)) require.NoError(t, err, clues.ToCore(err))
evts, err := ac.Stable. evts, err := ac.Stable.
Client(). Client().
Users(). Users().
ByUserId(suite.its.user.id). ByUserId(suite.its.User.ID).
Calendars(). Calendars().
ByCalendarId(ptr.Val(container.GetId())). ByCalendarId(ptr.Val(container.GetId())).
Events(). Events().
@ -60,9 +61,9 @@ func (suite *EventsPagerIntgSuite) TestEvents_GetItemsInContainerByCollisionKey(
expect := maps.Keys(expectM) expect := maps.Keys(expectM)
results, err := suite.its.ac. results, err := suite.its.AC.
Events(). Events().
GetItemsInContainerByCollisionKey(ctx, suite.its.user.id, "calendar") GetItemsInContainerByCollisionKey(ctx, suite.its.User.ID, "calendar")
require.NoError(t, err, clues.ToCore(err)) require.NoError(t, err, clues.ToCore(err))
require.Less(t, 0, len(results), "requires at least one result") require.Less(t, 0, len(results), "requires at least one result")

View File

@ -16,6 +16,7 @@ import (
exchMock "github.com/alcionai/corso/src/internal/m365/service/exchange/mock" exchMock "github.com/alcionai/corso/src/internal/m365/service/exchange/mock"
"github.com/alcionai/corso/src/internal/tester" "github.com/alcionai/corso/src/internal/tester"
"github.com/alcionai/corso/src/internal/tester/tconfig" "github.com/alcionai/corso/src/internal/tester/tconfig"
"github.com/alcionai/corso/src/internal/tester/tsetup"
"github.com/alcionai/corso/src/pkg/backup/details" "github.com/alcionai/corso/src/pkg/backup/details"
"github.com/alcionai/corso/src/pkg/control/testdata" "github.com/alcionai/corso/src/pkg/control/testdata"
) )
@ -219,7 +220,7 @@ func (suite *EventsAPIUnitSuite) TestBytesToEventable() {
type EventsAPIIntgSuite struct { type EventsAPIIntgSuite struct {
tester.Suite tester.Suite
its intgTesterSetup its tsetup.M365
} }
func TestEventsAPIIntgSuite(t *testing.T) { func TestEventsAPIIntgSuite(t *testing.T) {
@ -231,7 +232,7 @@ func TestEventsAPIIntgSuite(t *testing.T) {
} }
func (suite *EventsAPIIntgSuite) SetupSuite() { func (suite *EventsAPIIntgSuite) SetupSuite() {
suite.its = newIntegrationTesterSetup(suite.T()) suite.its = tsetup.NewM365IntegrationTester(suite.T())
} }
func (suite *EventsAPIIntgSuite) TestEvents_RestoreLargeAttachment() { func (suite *EventsAPIIntgSuite) TestEvents_RestoreLargeAttachment() {
@ -243,7 +244,7 @@ func (suite *EventsAPIIntgSuite) TestEvents_RestoreLargeAttachment() {
userID := tconfig.M365UserID(suite.T()) userID := tconfig.M365UserID(suite.T())
folderName := testdata.DefaultRestoreConfig("eventlargeattachmenttest").Location folderName := testdata.DefaultRestoreConfig("eventlargeattachmenttest").Location
evts := suite.its.ac.Events() evts := suite.its.AC.Events()
calendar, err := evts.CreateContainer(ctx, userID, "", folderName) calendar, err := evts.CreateContainer(ctx, userID, "", folderName)
require.NoError(t, err, clues.ToCore(err)) require.NoError(t, err, clues.ToCore(err))
@ -282,10 +283,10 @@ func (suite *EventsAPIIntgSuite) TestEvents_canFindNonStandardFolder() {
ctx, flush := tester.NewContext(t) ctx, flush := tester.NewContext(t)
defer flush() defer flush()
ac := suite.its.ac.Events() ac := suite.its.AC.Events()
rc := testdata.DefaultRestoreConfig("api_calendar_discovery") rc := testdata.DefaultRestoreConfig("api_calendar_discovery")
cal, err := ac.CreateContainer(ctx, suite.its.user.id, "", rc.Location) cal, err := ac.CreateContainer(ctx, suite.its.User.ID, "", rc.Location)
require.NoError(t, err, clues.ToCore(err)) require.NoError(t, err, clues.ToCore(err))
var ( var (
@ -302,7 +303,7 @@ func (suite *EventsAPIIntgSuite) TestEvents_canFindNonStandardFolder() {
containers, err := ac.EnumerateContainers( containers, err := ac.EnumerateContainers(
ctx, ctx,
suite.its.user.id, suite.its.User.ID,
DefaultCalendar, DefaultCalendar,
false) false)
require.NoError(t, err, clues.ToCore(err)) require.NoError(t, err, clues.ToCore(err))
@ -341,9 +342,9 @@ func (suite *EventsAPIIntgSuite) TestEvents_GetContainerByName() {
ctx, flush := tester.NewContext(t) ctx, flush := tester.NewContext(t)
defer flush() defer flush()
_, err := suite.its.ac. _, err := suite.its.AC.
Events(). Events().
GetContainerByName(ctx, suite.its.user.id, "", test.name) GetContainerByName(ctx, suite.its.User.ID, "", test.name)
test.expectErr(t, err, clues.ToCore(err)) test.expectErr(t, err, clues.ToCore(err))
}) })
} }
@ -399,7 +400,7 @@ func (suite *EventsAPIIntgSuite) TestEvents_GetContainerByName_mocked() {
Reply(200). Reply(200).
JSON(test.results(t)) JSON(test.results(t))
_, err := suite.its.gockAC. _, err := suite.its.GockAC.
Events(). Events().
GetContainerByName(ctx, "u", "", test.name) GetContainerByName(ctx, "u", "", test.name)
test.expectErr(t, err, clues.ToCore(err)) test.expectErr(t, err, clues.ToCore(err))

View File

@ -13,6 +13,7 @@ import (
"github.com/alcionai/corso/src/internal/common/ptr" "github.com/alcionai/corso/src/internal/common/ptr"
"github.com/alcionai/corso/src/internal/tester" "github.com/alcionai/corso/src/internal/tester"
"github.com/alcionai/corso/src/internal/tester/tconfig" "github.com/alcionai/corso/src/internal/tester/tconfig"
"github.com/alcionai/corso/src/internal/tester/tsetup"
"github.com/alcionai/corso/src/pkg/fault" "github.com/alcionai/corso/src/pkg/fault"
) )
@ -76,7 +77,7 @@ func (suite *GroupUnitSuite) TestValidateGroup() {
type GroupsIntgSuite struct { type GroupsIntgSuite struct {
tester.Suite tester.Suite
its intgTesterSetup its tsetup.M365
} }
func TestGroupsIntgSuite(t *testing.T) { func TestGroupsIntgSuite(t *testing.T) {
@ -88,7 +89,7 @@ func TestGroupsIntgSuite(t *testing.T) {
} }
func (suite *GroupsIntgSuite) SetupSuite() { func (suite *GroupsIntgSuite) SetupSuite() {
suite.its = newIntegrationTesterSetup(suite.T()) suite.its = tsetup.NewM365IntegrationTester(suite.T())
} }
func (suite *GroupsIntgSuite) TestGetAll() { func (suite *GroupsIntgSuite) TestGetAll() {
@ -97,7 +98,7 @@ func (suite *GroupsIntgSuite) TestGetAll() {
ctx, flush := tester.NewContext(t) ctx, flush := tester.NewContext(t)
defer flush() defer flush()
groups, err := suite.its.ac. groups, err := suite.its.AC.
Groups(). Groups().
GetAll(ctx, fault.New(true)) GetAll(ctx, fault.New(true))
require.NoError(t, err) require.NoError(t, err)
@ -110,8 +111,8 @@ func (suite *GroupsIntgSuite) TestGetAllSites() {
ctx, flush := tester.NewContext(t) ctx, flush := tester.NewContext(t)
defer flush() defer flush()
channels, err := suite.its.ac. channels, err := suite.its.AC.
Channels().GetChannels(ctx, suite.its.group.id) Channels().GetChannels(ctx, suite.its.Group.ID)
require.NoError(t, err, "getting channels") require.NoError(t, err, "getting channels")
require.NotZero(t, len(channels), "must have at least one channel") require.NotZero(t, len(channels), "must have at least one channel")
@ -123,9 +124,9 @@ func (suite *GroupsIntgSuite) TestGetAllSites() {
} }
} }
sites, err := suite.its.ac. sites, err := suite.its.AC.
Groups(). Groups().
GetAllSites(ctx, suite.its.group.id, fault.New(true)) GetAllSites(ctx, suite.its.Group.ID, fault.New(true))
require.NoError(t, err) require.NoError(t, err)
require.NotZero(t, len(sites), "must have at least one site") require.NotZero(t, len(sites), "must have at least one site")
require.Equal(t, siteCount, len(sites), "incorrect number of sites") require.Equal(t, siteCount, len(sites), "incorrect number of sites")
@ -138,13 +139,13 @@ func (suite *GroupsIntgSuite) TestGetAllSitesNonTeam() {
ctx, flush := tester.NewContext(t) ctx, flush := tester.NewContext(t)
defer flush() defer flush()
group, err := suite.its.ac.Groups().GetByID(ctx, suite.its.nonTeamGroup.id, CallConfig{}) group, err := suite.its.AC.Groups().GetByID(ctx, suite.its.NonTeamGroup.ID, CallConfig{})
require.NoError(t, err) require.NoError(t, err)
require.False(t, IsTeam(ctx, group), "group should not be a team for this test") require.False(t, IsTeam(ctx, group), "group should not be a team for this test")
sites, err := suite.its.ac. sites, err := suite.its.AC.
Groups(). Groups().
GetAllSites(ctx, suite.its.nonTeamGroup.id, fault.New(true)) GetAllSites(ctx, suite.its.NonTeamGroup.ID, fault.New(true))
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, 1, len(sites), "incorrect number of sites") require.Equal(t, 1, len(sites), "incorrect number of sites")
} }
@ -156,9 +157,9 @@ func (suite *GroupsIntgSuite) TestGroups_GetByID() {
defer flush() defer flush()
var ( var (
groupID = suite.its.group.id groupID = suite.its.Group.ID
groupsEmail = suite.its.group.email groupsEmail = suite.its.Group.Email
groupsAPI = suite.its.ac.Groups() groupsAPI = suite.its.AC.Groups()
) )
grp, err := groupsAPI.GetByID(ctx, groupID, CallConfig{}) grp, err := groupsAPI.GetByID(ctx, groupID, CallConfig{})

View File

@ -5,46 +5,13 @@ import (
"strings" "strings"
"testing" "testing"
"github.com/alcionai/clues"
"github.com/h2non/gock" "github.com/h2non/gock"
"github.com/microsoft/kiota-abstractions-go/serialization" "github.com/microsoft/kiota-abstractions-go/serialization"
kjson "github.com/microsoft/kiota-serialization-json-go" kjson "github.com/microsoft/kiota-serialization-json-go"
"github.com/microsoftgraph/msgraph-sdk-go/models/odataerrors" "github.com/microsoftgraph/msgraph-sdk-go/models/odataerrors"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"github.com/alcionai/corso/src/internal/common/ptr"
"github.com/alcionai/corso/src/internal/m365/graph"
gmock "github.com/alcionai/corso/src/internal/m365/graph/mock"
"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/control"
) )
// ---------------------------------------------------------------------------
// Gockable client
// ---------------------------------------------------------------------------
// GockClient produces a new exchange api client that can be
// mocked using gock.
func gockClient(creds account.M365Config) (Client, error) {
s, err := gmock.NewService(creds)
if err != nil {
return Client{}, err
}
li, err := gmock.NewService(creds, graph.NoTimeout())
if err != nil {
return Client{}, err
}
return Client{
Credentials: creds,
Stable: s,
LargeItem: li,
}, nil
}
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
// Intercepting calls with Gock // Intercepting calls with Gock
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
@ -94,92 +61,3 @@ func requireParseableToMap(t *testing.T, thing serialization.Parsable) map[strin
return out return out
} }
// ---------------------------------------------------------------------------
// Suite Setup
// ---------------------------------------------------------------------------
type ids struct {
id string
email string
driveID string
driveRootFolderID string
testContainerID string
}
type intgTesterSetup struct {
ac Client
gockAC Client
user ids
site ids
group ids
nonTeamGroup ids // group which does not have an associated team
}
func newIntegrationTesterSetup(t *testing.T) intgTesterSetup {
its := intgTesterSetup{}
ctx, flush := tester.NewContext(t)
defer flush()
graph.InitializeConcurrencyLimiter(ctx, true, 4)
a := tconfig.NewM365Account(t)
creds, err := a.M365Config()
require.NoError(t, err, clues.ToCore(err))
its.ac, err = NewClient(creds, control.DefaultOptions())
require.NoError(t, err, clues.ToCore(err))
its.gockAC, err = gockClient(creds)
require.NoError(t, err, clues.ToCore(err))
// user drive
its.user.id = tconfig.M365UserID(t)
userDrive, err := its.ac.Users().GetDefaultDrive(ctx, its.user.id)
require.NoError(t, err, clues.ToCore(err))
its.user.driveID = ptr.Val(userDrive.GetId())
userDriveRootFolder, err := its.ac.Drives().GetRootFolder(ctx, its.user.driveID)
require.NoError(t, err, clues.ToCore(err))
its.user.driveRootFolderID = ptr.Val(userDriveRootFolder.GetId())
// site
its.site.id = tconfig.M365SiteID(t)
siteDrive, err := its.ac.Sites().GetDefaultDrive(ctx, its.site.id)
require.NoError(t, err, clues.ToCore(err))
its.site.driveID = ptr.Val(siteDrive.GetId())
siteDriveRootFolder, err := its.ac.Drives().GetRootFolder(ctx, its.site.driveID)
require.NoError(t, err, clues.ToCore(err))
its.site.driveRootFolderID = ptr.Val(siteDriveRootFolder.GetId())
// groups/teams
// use of the TeamID is intentional here, so that we are assured
// the group has full usage of the teams api.
its.group.id = tconfig.M365TeamID(t)
its.group.email = tconfig.M365TeamEmail(t)
its.nonTeamGroup.id = tconfig.M365GroupID(t)
channel, err := its.ac.Channels().
GetChannelByName(
ctx,
its.group.id,
"Test")
require.NoError(t, err, clues.ToCore(err))
require.Equal(t, "Test", ptr.Val(channel.GetDisplayName()))
its.group.testContainerID = ptr.Val(channel.GetId())
return its
}

View File

@ -12,16 +12,17 @@ import (
"github.com/alcionai/corso/src/internal/m365/graph" "github.com/alcionai/corso/src/internal/m365/graph"
"github.com/alcionai/corso/src/internal/tester" "github.com/alcionai/corso/src/internal/tester"
"github.com/alcionai/corso/src/internal/tester/tconfig" "github.com/alcionai/corso/src/internal/tester/tconfig"
"github.com/alcionai/corso/src/internal/tester/tsetup"
"github.com/alcionai/corso/src/pkg/control/testdata" "github.com/alcionai/corso/src/pkg/control/testdata"
) )
type ListsAPIIntgSuite struct { type ListsAPIIntgSuite struct {
tester.Suite tester.Suite
its intgTesterSetup its tsetup.M365
} }
func (suite *ListsAPIIntgSuite) SetupSuite() { func (suite *ListsAPIIntgSuite) SetupSuite() {
suite.its = newIntegrationTesterSetup(suite.T()) suite.its = tsetup.NewM365IntegrationTester(suite.T())
} }
func TestListsAPIIntgSuite(t *testing.T) { func TestListsAPIIntgSuite(t *testing.T) {
@ -39,9 +40,9 @@ func (suite *ListsAPIIntgSuite) TestLists_PostDrive() {
defer flush() defer flush()
var ( var (
acl = suite.its.ac.Lists() acl = suite.its.AC.Lists()
driveName = testdata.DefaultRestoreConfig("list_api_post_drive").Location driveName = testdata.DefaultRestoreConfig("list_api_post_drive").Location
siteID = suite.its.site.id siteID = suite.its.Site.ID
) )
// first post, should have no errors // first post, should have no errors

View File

@ -13,11 +13,12 @@ import (
"github.com/alcionai/corso/src/internal/common/ptr" "github.com/alcionai/corso/src/internal/common/ptr"
"github.com/alcionai/corso/src/internal/tester" "github.com/alcionai/corso/src/internal/tester"
"github.com/alcionai/corso/src/internal/tester/tconfig" "github.com/alcionai/corso/src/internal/tester/tconfig"
"github.com/alcionai/corso/src/internal/tester/tsetup"
) )
type MailPagerIntgSuite struct { type MailPagerIntgSuite struct {
tester.Suite tester.Suite
its intgTesterSetup its tsetup.M365
} }
func TestMailPagerIntgSuite(t *testing.T) { func TestMailPagerIntgSuite(t *testing.T) {
@ -29,23 +30,23 @@ func TestMailPagerIntgSuite(t *testing.T) {
} }
func (suite *MailPagerIntgSuite) SetupSuite() { func (suite *MailPagerIntgSuite) SetupSuite() {
suite.its = newIntegrationTesterSetup(suite.T()) suite.its = tsetup.NewM365IntegrationTester(suite.T())
} }
func (suite *MailPagerIntgSuite) TestMail_GetItemsInContainerByCollisionKey() { func (suite *MailPagerIntgSuite) TestMail_GetItemsInContainerByCollisionKey() {
t := suite.T() t := suite.T()
ac := suite.its.ac.Mail() ac := suite.its.AC.Mail()
ctx, flush := tester.NewContext(t) ctx, flush := tester.NewContext(t)
defer flush() defer flush()
container, err := ac.GetContainerByID(ctx, suite.its.user.id, MailInbox) container, err := ac.GetContainerByID(ctx, suite.its.User.ID, MailInbox)
require.NoError(t, err, clues.ToCore(err)) require.NoError(t, err, clues.ToCore(err))
msgs, err := ac.Stable. msgs, err := ac.Stable.
Client(). Client().
Users(). Users().
ByUserId(suite.its.user.id). ByUserId(suite.its.User.ID).
MailFolders(). MailFolders().
ByMailFolderId(ptr.Val(container.GetId())). ByMailFolderId(ptr.Val(container.GetId())).
Messages(). Messages().
@ -61,7 +62,7 @@ func (suite *MailPagerIntgSuite) TestMail_GetItemsInContainerByCollisionKey() {
expect := maps.Keys(expectM) expect := maps.Keys(expectM)
results, err := suite.its.ac.Mail().GetItemsInContainerByCollisionKey(ctx, suite.its.user.id, MailInbox) results, err := suite.its.AC.Mail().GetItemsInContainerByCollisionKey(ctx, suite.its.User.ID, MailInbox)
require.NoError(t, err, clues.ToCore(err)) require.NoError(t, err, clues.ToCore(err))
require.Less(t, 0, len(results), "requires at least one result") require.Less(t, 0, len(results), "requires at least one result")
@ -86,7 +87,7 @@ func (suite *MailPagerIntgSuite) TestMail_GetItemsInContainerByCollisionKey() {
func (suite *MailPagerIntgSuite) TestMail_GetItemsIDsInContainer() { func (suite *MailPagerIntgSuite) TestMail_GetItemsIDsInContainer() {
t := suite.T() t := suite.T()
ac := suite.its.ac.Mail() ac := suite.its.AC.Mail()
ctx, flush := tester.NewContext(t) ctx, flush := tester.NewContext(t)
defer flush() defer flush()
@ -100,7 +101,7 @@ func (suite *MailPagerIntgSuite) TestMail_GetItemsIDsInContainer() {
msgs, err := ac.Stable. msgs, err := ac.Stable.
Client(). Client().
Users(). Users().
ByUserId(suite.its.user.id). ByUserId(suite.its.User.ID).
MailFolders(). MailFolders().
ByMailFolderId(MailInbox). ByMailFolderId(MailInbox).
Messages(). Messages().
@ -114,8 +115,8 @@ func (suite *MailPagerIntgSuite) TestMail_GetItemsIDsInContainer() {
expect[ptr.Val(m.GetId())] = struct{}{} expect[ptr.Val(m.GetId())] = struct{}{}
} }
results, err := suite.its.ac.Mail(). results, err := suite.its.AC.Mail().
GetItemIDsInContainer(ctx, suite.its.user.id, MailInbox) GetItemIDsInContainer(ctx, suite.its.User.ID, MailInbox)
require.NoError(t, err, clues.ToCore(err)) require.NoError(t, err, clues.ToCore(err))
require.Less(t, 0, len(results), "requires at least one result") require.Less(t, 0, len(results), "requires at least one result")
require.Equal(t, len(expect), len(results), "must have same count of items") require.Equal(t, len(expect), len(results), "must have same count of items")

View File

@ -15,6 +15,7 @@ import (
exchMock "github.com/alcionai/corso/src/internal/m365/service/exchange/mock" exchMock "github.com/alcionai/corso/src/internal/m365/service/exchange/mock"
"github.com/alcionai/corso/src/internal/tester" "github.com/alcionai/corso/src/internal/tester"
"github.com/alcionai/corso/src/internal/tester/tconfig" "github.com/alcionai/corso/src/internal/tester/tconfig"
"github.com/alcionai/corso/src/internal/tester/tsetup"
"github.com/alcionai/corso/src/pkg/backup/details" "github.com/alcionai/corso/src/pkg/backup/details"
"github.com/alcionai/corso/src/pkg/control/testdata" "github.com/alcionai/corso/src/pkg/control/testdata"
"github.com/alcionai/corso/src/pkg/fault" "github.com/alcionai/corso/src/pkg/fault"
@ -187,7 +188,7 @@ func (suite *MailAPIUnitSuite) TestBytesToMessagable() {
type MailAPIIntgSuite struct { type MailAPIIntgSuite struct {
tester.Suite tester.Suite
its intgTesterSetup its tsetup.M365
} }
// We do end up mocking the actual request, but creating the rest // We do end up mocking the actual request, but creating the rest
@ -201,7 +202,7 @@ func TestMailAPIIntgSuite(t *testing.T) {
} }
func (suite *MailAPIIntgSuite) SetupSuite() { func (suite *MailAPIIntgSuite) SetupSuite() {
suite.its = newIntegrationTesterSetup(suite.T()) suite.its = tsetup.NewM365IntegrationTester(suite.T())
} }
func (suite *MailAPIIntgSuite) TestHugeAttachmentListDownload() { func (suite *MailAPIIntgSuite) TestHugeAttachmentListDownload() {
@ -338,7 +339,7 @@ func (suite *MailAPIIntgSuite) TestHugeAttachmentListDownload() {
defer gock.Off() defer gock.Off()
test.setupf() test.setupf()
item, _, err := suite.its.gockAC.Mail().GetItem( item, _, err := suite.its.GockAC.Mail().GetItem(
ctx, ctx,
"user", "user",
mid, mid,
@ -378,7 +379,7 @@ func (suite *MailAPIIntgSuite) TestMail_RestoreLargeAttachment() {
userID := tconfig.M365UserID(suite.T()) userID := tconfig.M365UserID(suite.T())
folderName := testdata.DefaultRestoreConfig("maillargeattachmenttest").Location folderName := testdata.DefaultRestoreConfig("maillargeattachmenttest").Location
msgs := suite.its.ac.Mail() msgs := suite.its.AC.Mail()
mailfolder, err := msgs.CreateContainer(ctx, userID, MsgFolderRoot, folderName) mailfolder, err := msgs.CreateContainer(ctx, userID, MsgFolderRoot, folderName)
require.NoError(t, err, clues.ToCore(err)) require.NoError(t, err, clues.ToCore(err))
@ -402,14 +403,14 @@ func (suite *MailAPIIntgSuite) TestMail_RestoreLargeAttachment() {
func (suite *MailAPIIntgSuite) TestMail_GetContainerByName() { func (suite *MailAPIIntgSuite) TestMail_GetContainerByName() {
var ( var (
t = suite.T() t = suite.T()
acm = suite.its.ac.Mail() acm = suite.its.AC.Mail()
rc = testdata.DefaultRestoreConfig("mail_get_container_by_name") rc = testdata.DefaultRestoreConfig("mail_get_container_by_name")
) )
ctx, flush := tester.NewContext(t) ctx, flush := tester.NewContext(t)
defer flush() defer flush()
parent, err := acm.CreateContainer(ctx, suite.its.user.id, "msgfolderroot", rc.Location) parent, err := acm.CreateContainer(ctx, suite.its.User.ID, "msgfolderroot", rc.Location)
require.NoError(t, err, clues.ToCore(err)) require.NoError(t, err, clues.ToCore(err))
table := []struct { table := []struct {
@ -443,7 +444,7 @@ func (suite *MailAPIIntgSuite) TestMail_GetContainerByName() {
ctx, flush := tester.NewContext(t) ctx, flush := tester.NewContext(t)
defer flush() defer flush()
_, err := acm.GetContainerByName(ctx, suite.its.user.id, test.parentContainerID, test.name) _, err := acm.GetContainerByName(ctx, suite.its.User.ID, test.parentContainerID, test.name)
test.expectErr(t, err, clues.ToCore(err)) test.expectErr(t, err, clues.ToCore(err))
}) })
} }
@ -455,10 +456,10 @@ func (suite *MailAPIIntgSuite) TestMail_GetContainerByName() {
ctx, flush := tester.NewContext(t) ctx, flush := tester.NewContext(t)
defer flush() defer flush()
child, err := acm.CreateContainer(ctx, suite.its.user.id, pid, rc.Location) child, err := acm.CreateContainer(ctx, suite.its.User.ID, pid, rc.Location)
require.NoError(t, err, clues.ToCore(err)) require.NoError(t, err, clues.ToCore(err))
result, err := acm.GetContainerByName(ctx, suite.its.user.id, pid, rc.Location) result, err := acm.GetContainerByName(ctx, suite.its.User.ID, pid, rc.Location)
assert.NoError(t, err, clues.ToCore(err)) assert.NoError(t, err, clues.ToCore(err))
assert.Equal(t, ptr.Val(child.GetId()), ptr.Val(result.GetId())) assert.Equal(t, ptr.Val(child.GetId()), ptr.Val(result.GetId()))
}) })
@ -514,7 +515,7 @@ func (suite *MailAPIIntgSuite) TestMail_GetContainerByName_mocked() {
Reply(200). Reply(200).
JSON(test.results(t)) JSON(test.results(t))
_, err := suite.its.gockAC. _, err := suite.its.GockAC.
Mail(). Mail().
GetContainerByName(ctx, "u", "", test.name) GetContainerByName(ctx, "u", "", test.name)
test.expectErr(t, err, clues.ToCore(err)) test.expectErr(t, err, clues.ToCore(err))

View File

@ -15,6 +15,7 @@ import (
"github.com/alcionai/corso/src/internal/m365/graph" "github.com/alcionai/corso/src/internal/m365/graph"
"github.com/alcionai/corso/src/internal/tester" "github.com/alcionai/corso/src/internal/tester"
"github.com/alcionai/corso/src/internal/tester/tconfig" "github.com/alcionai/corso/src/internal/tester/tconfig"
"github.com/alcionai/corso/src/internal/tester/tsetup"
"github.com/alcionai/corso/src/pkg/fault" "github.com/alcionai/corso/src/pkg/fault"
) )
@ -99,7 +100,7 @@ func (suite *SitesUnitSuite) TestValidateSite() {
type SitesIntgSuite struct { type SitesIntgSuite struct {
tester.Suite tester.Suite
its intgTesterSetup its tsetup.M365
} }
func TestSitesIntgSuite(t *testing.T) { func TestSitesIntgSuite(t *testing.T) {
@ -111,7 +112,7 @@ func TestSitesIntgSuite(t *testing.T) {
} }
func (suite *SitesIntgSuite) SetupSuite() { func (suite *SitesIntgSuite) SetupSuite() {
suite.its = newIntegrationTesterSetup(suite.T()) suite.its = tsetup.NewM365IntegrationTester(suite.T())
} }
func (suite *SitesIntgSuite) TestGetAll() { func (suite *SitesIntgSuite) TestGetAll() {
@ -120,7 +121,7 @@ func (suite *SitesIntgSuite) TestGetAll() {
ctx, flush := tester.NewContext(t) ctx, flush := tester.NewContext(t)
defer flush() defer flush()
sites, err := suite.its.ac. sites, err := suite.its.AC.
Sites(). Sites().
GetAll(ctx, fault.New(true)) GetAll(ctx, fault.New(true))
require.NoError(t, err) require.NoError(t, err)
@ -146,7 +147,7 @@ func (suite *SitesIntgSuite) TestSites_GetByID() {
uuids = strings.Join(parts[1:], ",") uuids = strings.Join(parts[1:], ",")
} }
sitesAPI := suite.its.ac.Sites() sitesAPI := suite.its.AC.Sites()
table := []struct { table := []struct {
name string name string
@ -249,7 +250,7 @@ func (suite *SitesIntgSuite) TestGetRoot() {
ctx, flush := tester.NewContext(t) ctx, flush := tester.NewContext(t)
defer flush() defer flush()
result, err := suite.its.ac.Sites().GetRoot(ctx, CallConfig{Expand: []string{"drive"}}) result, err := suite.its.AC.Sites().GetRoot(ctx, CallConfig{Expand: []string{"drive"}})
require.NoError(t, err) require.NoError(t, err)
require.NotNil(t, result, "must find the root site") require.NotNil(t, result, "must find the root site")
require.NotEmpty(t, ptr.Val(result.GetId()), "must have an id") require.NotEmpty(t, ptr.Val(result.GetId()), "must have an id")