Example #1
0
        public async Task DisposeProductFromStock(Guid productId, int amount, DisposalType type)
        {
            var product = await Get(productId);

            await _context.StockChanges.AddAsync(new StockDisposal()
            {
                Amount  = amount,
                Type    = type,
                Product = product
            });

            product.StockInventory -= amount;
            await _context.SaveChangesAsync();
        }
        /// <summary>
        /// Empty a specific folder.
        /// </summary>
        /// <param name="folderId">The folder identifier of the folder need to be emptied.</param>
        /// <param name="deleteType">How an item is deleted.</param>
        /// <param name="deleteSubfolder">Indicates whether the subfolders are also to be deleted. </param>
        /// <returns>Empty folder response instance that will send to server.</returns>
        protected EmptyFolderResponseType CallEmptyFolderOperation(BaseFolderIdType folderId, DisposalType deleteType, bool deleteSubfolder)
        {
            // EmptyFolder request.
            EmptyFolderType emptyFolderRequest = new EmptyFolderType();

            // Specify the delete type.
            emptyFolderRequest.DeleteType = deleteType;

            // Specify which folder will be emptied.
            emptyFolderRequest.FolderIds = new BaseFolderIdType[1];
            emptyFolderRequest.FolderIds[0] = folderId;
            emptyFolderRequest.DeleteSubFolders = deleteSubfolder;

            // Empty the specific folder
            EmptyFolderResponseType emptyFolderResponse = this.FOLDAdapter.EmptyFolder(emptyFolderRequest);

            return emptyFolderResponse;
        }
        /// <summary>
        /// Generate the request message for operation "DeleteFolder".
        /// </summary>
        /// <param name="deleteType">How folders are to be deleted.</param>
        /// <param name="folderIds">An array of folder identifier of the folders need to be deleted</param>
        /// <returns>Delete folder request instance that will send to server.</returns>
        protected DeleteFolderType GetDeleteFolderRequest(DisposalType deleteType, params BaseFolderIdType[] folderIds)
        {
            Site.Assert.IsNotNull(folderIds, "Folders id should not be null!");
            Site.Assert.AreNotEqual<int>(0, folderIds.Length, "Folders id should contains at least one Id!");
            DeleteFolderType deleteFolderRequest = new DeleteFolderType();

            // Specify the delete type.
            deleteFolderRequest.DeleteType = deleteType;
            int folderCount = folderIds.Length;

            // Set the request's folderId field.
            deleteFolderRequest.FolderIds = new BaseFolderIdType[folderCount];
            for (int folderIdIndex = 0; folderIdIndex < folderCount; folderIdIndex++)
            {
                deleteFolderRequest.FolderIds[folderIdIndex] = folderIds[folderIdIndex];
            }

            return deleteFolderRequest;
        }
        public void MSOXWSCORE_S01_TC20_VerifyItemWithDisposalTypeEnum()
        {
            DisposalType[] disposalTypes = new DisposalType[] { DisposalType.HardDelete, DisposalType.SoftDelete, DisposalType.MoveToDeletedItems };

            // Define an array to store the find item results from FindItem operation response.
            bool[] findInDeleteditems = new bool[disposalTypes.Length];
            for (int i = 0; i < disposalTypes.Length; i++)
            {
                DisposalType disposalType = disposalTypes[i];

                #region Step 1: Create the item.
                ItemType[] createdItems = new ItemType[] { new ItemType() };

                createdItems[0].Subject = Common.GenerateResourceName(
                    this.Site,
                    TestSuiteHelper.SubjectForCreateItem);

                CreateItemResponseType createItemResponse = this.CallCreateItemOperation(DistinguishedFolderIdNameType.drafts, createdItems);

                // Check the operation response.
                Common.CheckOperationSuccess(createItemResponse, 1, this.Site);

                ItemIdType[] createdItemIds = Common.GetItemIdsFromInfoResponse(createItemResponse);

                // One created item should be returned.
                Site.Assert.AreEqual<int>(
                     1,
                     createdItemIds.GetLength(0),
                     "One created item should be returned! Expected Item Count: {0}, Actual Item Count: {1}",
                     1,
                     createdItemIds.GetLength(0));
                #endregion

                #region Step 2: Delete the item with different DisposalType.
                DeleteItemResponseType deleteItemResponse = this.CallDeleteItemOperation(disposalType);

                // Check the operation response.
                Common.CheckOperationSuccess(deleteItemResponse, 1, this.Site);

                this.ExistItemIds.Remove(createdItemIds[0]);

                #endregion

                #region Step 3: Fail to get the deleted item.
                // Call the GetItem operation.
                GetItemResponseType getItemResponse = this.CallGetItemOperation(createdItemIds);

                ItemType[] getItems = Common.GetItemsFromInfoResponse<ItemType>(getItemResponse);

                // No item should be returned
                Site.Assert.AreEqual<int>(
                     0,
                     getItems.GetLength(0),
                     "No item should be returned! Expected Item Count: {0}, Actual Item Count: {1}",
                     0,
                     getItems.GetLength(0));

                #endregion

                #region Step 4: Find the deleted item in deleteditems folder.
                if (disposalType == DisposalType.MoveToDeletedItems)
                {
                    // Find the deleted item in deleteditems folder.
                    ItemIdType[] findItemIds = this.FindItemsInFolder(DistinguishedFolderIdNameType.deleteditems, createdItems[0].Subject, "User1");
                    findInDeleteditems[i] = findItemIds != null;

                    if (findInDeleteditems[i])
                    {
                        this.CallMoveItemOperation(DistinguishedFolderIdNameType.drafts, findItemIds);
                    }

                    // Add the debug information
                    Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSCORE_R1668");

                    // The item[2] is deleted using SoftDelete value, and it cannot be got in step 3 after DeleteItem operation, also it cannot be found in deleteditems folder, this represent the item is moved to the Deleted Items folder.
                    Site.CaptureRequirementIfIsTrue(
                        findInDeleteditems[2],
                        1668,
                        @"[In m:DeleteItemType Complex Type] The value ""MoveToDeletedItems"" of ""DeleteType"" which specifies that an item or folder is moved to the Deleted Items folder.");
                }
                else if (disposalType == DisposalType.SoftDelete)
                {
                    if (Common.IsRequirementEnabled(4000, this.Site))
                    {
                        // Find the deleted item in deleteditems folder.
                        ItemIdType[] findItemIds = this.FindItemsInFolder(DistinguishedFolderIdNameType.recoverableitemsdeletions, createdItems[0].Subject, "User1");
                        findInDeleteditems[i] = findItemIds != null;

                        if (findInDeleteditems[i])
                        {
                            this.CallMoveItemOperation(DistinguishedFolderIdNameType.recoverableitemsdeletions, findItemIds);

                            // Add the debug information
                            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSCORE_R1669");

                            // The item[1] is deleted using SoftDelete value, and it cannot be got in step 3 after DeleteItem operation, also it cannot be found in deleteditems folder, this represent the item is moved to the Recoverable Items folder.
                            Site.CaptureRequirementIfIsTrue(
                                findInDeleteditems[1],
                                1669,
                                @"[In m:DeleteItemType Complex Type] The value ""SoftDelete"" of ""DeleteType"" which specifies that an item or folder is moved to the dumpster if the dumpster is enabled.");
                        }
                    }
                }
                else
                {
                    // Items should not be found in the deleteditems folder if the disposal type is HardDelete or SoftDelete.
                    ItemType[] findItems = this.FindItemWithRestriction(DistinguishedFolderIdNameType.deleteditems, createdItems[0].Subject);
                    findInDeleteditems[i] = findItems != null;
                }
                #endregion
            }

            #region Capture Code

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSCORE_R1667");

            // The item[0] is deleted using HardDelete value, and it cannot be gotten in step 3 after DeleteItem operation, also it cannot be found in deleteditems folder, this represent the item is permanently removed.
            Site.CaptureRequirementIfIsFalse(
                findInDeleteditems[0],
                1667,
                @"[In m:DeleteItemType Complex Type] The value ""HardDelete"" of  ""DeleteType"" which specifies that an item or folder is permanently removed from the store.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSCORE_R1668");

            // The item[2] is deleted using MoveToDeletedItems value, and it cannot be got in step 3 after DeleteItem operation, also it can be found in deleteditems folder, this represent the item is moved to the Deleted Items folder.
            Site.CaptureRequirementIfIsTrue(
                findInDeleteditems[2],
                1668,
                @"[In m:DeleteItemType Complex Type] The value ""MoveToDeletedItems"" of ""DeleteType"" which specifies that an item or folder is moved to the Deleted Items folder.");
            #endregion
        }