public void MSOXWSMTGS_S06_TC03_CalendarPermissionLevelContributor()
{
this.MTGSAdapter = new MS_OXWSMTGSAdapter();
this.MTGSAdapter.Initialize(this.Site);
this.SRCHAdapter = new MS_OXWSSRCHAdapter();
this.SRCHAdapter.Initialize(this.Site);
this.FOLDAdapter = new MS_OXWSFOLDAdapter();
this.FOLDAdapter.Initialize(this.Site);
#region Organizer creates a calendar folder in the inbox folder and grant Contributor permission to attendee.
// Switch to user organizer.
this.FOLDAdapter.SwitchUser(this.Organizer, this.OrganizerPassword, this.Domain);
CalendarPermissionSetType calendarPermissionSet = new CalendarPermissionSetType();
calendarPermissionSet.CalendarPermissions = new CalendarPermissionType[1];
calendarPermissionSet.CalendarPermissions[0] = new CalendarPermissionType();
calendarPermissionSet.CalendarPermissions[0].CalendarPermissionLevel = CalendarPermissionLevelType.Contributor;
calendarPermissionSet.CalendarPermissions[0].UserId = new UserIdType();
calendarPermissionSet.CalendarPermissions[0].UserId.PrimarySmtpAddress = Common.GetConfigurationPropertyValue("AttendeeName", this.Site) + "@" + Common.GetConfigurationPropertyValue("Domain", this.Site);
CreateFolderType createFolderRequest = this.GetCreateFolderRequest(DistinguishedFolderIdNameType.inbox.ToString(), new string[] { "CustomFolderByOrganizer" }, new string[] { "IPF.Appointment" }, null);
((CalendarFolderType)createFolderRequest.Folders[0]).PermissionSet = calendarPermissionSet;
// Create a new folder.
CreateFolderResponseType createFolderResponse = this.FOLDAdapter.CreateFolder(createFolderRequest);
// Check the response.
Common.CheckOperationSuccess(createFolderResponse, 1, this.Site);
// Save the new created folder's folder id.
FolderIdType newFolderIdByOrganizer = ((FolderInfoResponseMessageType)createFolderResponse.ResponseMessages.Items[0]).Folders[0].FolderId;
this.FolderToDelete = newFolderIdByOrganizer;
#endregion
#region Organizer gets the new created folder.
// GetFolder request.
GetFolderType getNewFolderRequest = this.GetGetFolderRequest(DefaultShapeNamesType.AllProperties, newFolderIdByOrganizer);
// Get the new created folder.
GetFolderResponseType getInboxFolderResponse = this.FOLDAdapter.GetFolder(getNewFolderRequest);
// Check the response.
Common.CheckOperationSuccess(getInboxFolderResponse, 1, this.Site);
// Verify the folder is created successfully.
FolderInfoResponseMessageType foldersResponseInfo = (FolderInfoResponseMessageType)getInboxFolderResponse.ResponseMessages.Items[0];
Site.Assert.AreEqual<string>(newFolderIdByOrganizer.Id, foldersResponseInfo.Folders[0].FolderId.Id, "The calendar folder should be created successfully in inbox.");
#endregion
#region Organizer creates a calendar item in the created folder.
CalendarItemType calendarItembyOrganizer = new CalendarItemType();
calendarItembyOrganizer.UID = Guid.NewGuid().ToString();
calendarItembyOrganizer.Subject = Common.GenerateResourceName(this.Site, "CalendarItemCreatedByOrganizer");
NonEmptyArrayOfAllItemsType allItemArray = new NonEmptyArrayOfAllItemsType();
allItemArray.Items = new ItemType[] { calendarItembyOrganizer };
CreateItemType createItemRequest = new CreateItemType();
createItemRequest.Items = allItemArray;
createItemRequest.SendMeetingInvitationsSpecified = true;
createItemRequest.SendMeetingInvitations = CalendarItemCreateOrDeleteOperationType.SendToNone;
createItemRequest.SavedItemFolderId = new TargetFolderIdType();
createItemRequest.SavedItemFolderId.Item = newFolderIdByOrganizer;
CreateItemResponseType response = this.MTGSAdapter.CreateItem(createItemRequest);
Site.Assert.AreEqual<ResponseClassType>(ResponseClassType.Success, response.ResponseMessages.Items[0].ResponseClass, "The calendar item should be created successfully.");
ItemInfoResponseMessageType itemInfoResponse = response.ResponseMessages.Items[0] as ItemInfoResponseMessageType;
Site.Assert.IsNotNull(itemInfoResponse, "The calendar item should be created successfully.");
ItemIdType itemIdByOrganizer = itemInfoResponse.Items.Items[0].ItemId;
#endregion
#region Attendee creates a folder in the created folder.
// Switch to user attendee.
this.FOLDAdapter.SwitchUser(this.Attendee, this.AttendeePassword, this.Domain);
createFolderRequest = this.GetCreateFolderRequest(newFolderIdByOrganizer.Id, new string[] { "CustomFolderByAttendee" }, new string[] { "IPF.Appointment" }, null);
createFolderResponse = this.FOLDAdapter.CreateFolder(createFolderRequest);
bool canCreateSubFolder = ResponseClassType.Success == createFolderResponse.ResponseMessages.Items[0].ResponseClass;
#endregion
#region Attendee creates a calendar item in the created folder.
this.SwitchMTGSUser(Role.Attendee);
CalendarItemType calendarItembyAttendee = new CalendarItemType();
calendarItembyAttendee.UID = Guid.NewGuid().ToString();
calendarItembyAttendee.Subject = Common.GenerateResourceName(this.Site, "CalendarItemCreatedByAttendee");
createItemRequest.Items.Items[0] = calendarItembyAttendee;
response = this.MTGSAdapter.CreateItem(createItemRequest);
Site.Assert.AreEqual<ResponseClassType>(ResponseClassType.Success, response.ResponseMessages.Items[0].ResponseClass, "The calendar item should be created successfully.");
itemInfoResponse = response.ResponseMessages.Items[0] as ItemInfoResponseMessageType;
bool canCreateOwnItem = null != itemInfoResponse;
Site.Assert.IsTrue(canCreateOwnItem, "The calendar item should be created successfully.");
ItemIdType itemIdByAttendee = itemInfoResponse.Items.Items[0].ItemId;
#endregion
#region Attendee gets the calendar item created by hisself.
itemInfoResponse = this.GetSingleCalendarItem(Role.Attendee, itemIdByAttendee);
bool canReadOwnItem = null != itemInfoResponse;
#endregion
#region Attendee updates the calendar item created by hisself.
CalendarItemType calendarUpdate = new CalendarItemType();
calendarUpdate.Location = this.LocationUpdate;
AdapterHelper itemChangeInfo = new AdapterHelper();
itemChangeInfo.FieldURI = UnindexedFieldURIType.calendarLocation;
itemChangeInfo.Item = calendarUpdate;
itemChangeInfo.ItemId = itemIdByAttendee;
// Update the created calendar item.
UpdateItemResponseMessageType updatedItem = this.UpdateSingleCalendarItem(Role.Attendee, itemChangeInfo, CalendarItemUpdateOperationType.SendToNone);
bool canUpdateOwnItem = null != updatedItem;
#endregion
#region Attendee deletes the calendar item created by hisself.
ResponseMessageType responseMessage = this.DeleteSingleCalendarItem(Role.Attendee, itemIdByAttendee, CalendarItemCreateOrDeleteOperationType.SendToNone);
bool canDeleteOwnItem = null != responseMessage && responseMessage.ResponseClass == ResponseClassType.Success;
#endregion
#region Attendee gets the calendar item created by organizer.
itemInfoResponse = this.GetSingleCalendarItem(Role.Attendee, itemIdByOrganizer);
bool canReadNotOwnItem = null != itemInfoResponse;
#endregion
#region Attendee updates the calendar item created by organizer.
calendarUpdate = new CalendarItemType();
calendarUpdate.Location = this.LocationUpdate;
itemChangeInfo = new AdapterHelper();
itemChangeInfo.FieldURI = UnindexedFieldURIType.calendarLocation;
itemChangeInfo.Item = calendarUpdate;
itemChangeInfo.ItemId = itemIdByOrganizer;
// Update the created calendar item.
updatedItem = this.UpdateSingleCalendarItem(Role.Attendee, itemChangeInfo, CalendarItemUpdateOperationType.SendToNone);
bool canUpdateNotOwnItem = null != updatedItem;
#endregion
#region Attendee deletes the calendar item created by organizer.
responseMessage = this.DeleteSingleCalendarItem(Role.Attendee, itemIdByOrganizer, CalendarItemCreateOrDeleteOperationType.SendToNone);
bool canDeleteNotOwnItem = null != responseMessage && responseMessage.ResponseClass == ResponseClassType.Success;
#endregion
// Add the debug information
this.Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSMTGS_R486");
// Verify MS-OXWSMTGS requirement: MS-OXWSMTGS_R486
bool isVerifiedR486 = canCreateOwnItem && !canReadOwnItem && !canUpdateOwnItem && !canDeleteOwnItem && !canReadNotOwnItem
&& !canUpdateNotOwnItem && !canDeleteNotOwnItem && !canCreateSubFolder;
Site.Assert.IsTrue(
isVerifiedR486,
"Can create own item is {0};\n" +
"Can read own item is {1};\n" +
"Can edit own item is {2};\n " +
"Can delete own item is {3};\n" +
"Can read not own item is {4};\n" +
"Can edit not own item is {5};\n" +
"Can delete not own item is {6};\n" +
"Can create subfolders is {7};\n",
canCreateOwnItem,
canReadOwnItem,
canUpdateOwnItem,
canDeleteOwnItem,
canReadNotOwnItem,
canUpdateNotOwnItem,
canDeleteNotOwnItem,
canCreateSubFolder);
this.Site.CaptureRequirementIfIsTrue(
isVerifiedR486,
486,
@"[In t:CalendarPermissionLevelType Simple Type] Contributor: The user can create items in the folder.");
// Add the debug information
this.Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSMTGS_R487");
this.Site.CaptureRequirementIfIsTrue(
isVerifiedR486,
487,
@"[In t:CalendarPermissionLevelType Simple Type] Contributor: The contents of the folder do not appear.");
}