public void DeleteDocumentById_ShouldReturnExceptionUserPemissionDeniedDocAccessTypeIdDeptMismatch()
        {
            #region Arrange

            var  docId           = 1;
            bool exceptionCaught = false;

            MRMUser testMRMUser = new MRMUser()
            {
                Id           = 1,
                FirstName    = "TestFirst",
                LastName     = "TestLast",
                DepartmentId = 19//Finance
            };

            DocumentAccessType testDocAccessType = new DocumentAccessType()
            {
                Code = Constants.DocumentAccessType.Department,
                Name = "Department"
            };

            Document testDocument = new Document()
            {
                Id   = 1,
                Name = "TestDocumentName",
                OthersCanDeleteFlag  = true,
                DocumentAccessTypeId = 1,  //Department
                DepartmentId         = 84, //MRM Team
                DeliverableId        = 1,
                FileName             = "TestFileName",
                Description          = "TestDescription",
                IsActiveFlag         = true,
                OwnerMRMUserId       = 99,
                DocumentAccessType   = testDocAccessType
            };

            mockUserRepository.Setup(user => user.GetById(It.IsAny <int>())).Returns((MRMUser)null);
            mockDocumentRepository.Setup(doc => doc.GetSingle(It.IsAny <Expression <Func <Document, bool> > >())).Returns(
                (Expression <Func <Document, bool> > expr) => testDocument);
            #endregion

            #region Act
            try
            {
                var docService = new DocumentsService(mockUnitOfWork.Object, null, mockDocumentRepository.Object, mockUserRepository.Object,
                                                      mockDocumentAccessTypeRepository.Object, mockMRMUserRepository.Object, mockDeliverableDocumentRepository.Object, mockContractRequestMasterVendorDocumentRepository.Object);

                docService.DeleteDocumentById(docId);
            }
            catch
            {
                exceptionCaught = true;
            }

            #endregion


            //Assert
            Assert.IsTrue(exceptionCaught);
        }
        public void DeleteDocumentById_ShouldReturnExceptionUserPemissionToDeleteDenied()
        {
            #region Arrange

            var  nonExistentDocId = -99;
            bool exceptionCaught  = false;

            MRMUser testMRMUser = new MRMUser()
            {
                Id        = 1,
                FirstName = "TestFirst",
                LastName  = "TestLast"
            };


            mockUserRepository.Setup(user => user.GetById(It.IsAny <int>())).Returns((MRMUser)null);
            mockDocumentRepository.Setup(doc => doc.GetSingle(It.IsAny <Expression <Func <Document, bool> > >())).Returns(
                (Expression <Func <Document, bool> > expr) => null);
            #endregion

            #region Act
            try
            {
                var docService = new DocumentsService(mockUnitOfWork.Object, null, mockDocumentRepository.Object, mockUserRepository.Object,
                                                      mockDocumentAccessTypeRepository.Object, mockMRMUserRepository.Object, mockDeliverableDocumentRepository.Object, mockContractRequestMasterVendorDocumentRepository.Object);

                docService.DeleteDocumentById(nonExistentDocId);
            }
            catch
            {
                exceptionCaught = true;
            }

            #endregion


            //Assert
            Assert.IsTrue(exceptionCaught);
        }
        public void DeleteDocumentById_ShouldSuccessfullyDelete()
        {
            #region Arrange

            var  docId           = 1;
            bool exceptionCaught = false;

            MRMUser testMRMUser = new MRMUser()
            {
                Id           = 1,
                FirstName    = "TestFirst",
                LastName     = "TestLast",
                DepartmentId = 84//MRM Team
            };

            DocumentAccessType testDocAccessType = new DocumentAccessType()
            {
                Code = Constants.DocumentAccessType.Department,
                Name = "Department"
            };

            Document testDocument = new Document()
            {
                Id   = 1,
                Name = "TestDocumentName",
                OthersCanDeleteFlag  = true,
                DocumentAccessTypeId = 1,  //Department
                DepartmentId         = 84, //MRM Team
                DeliverableId        = 1,
                FileName             = "TestFileName",
                FileId             = Guid.Empty,
                Description        = "TestDescription",
                IsActiveFlag       = true,
                OwnerMRMUserId     = 99,
                DocumentAccessType = testDocAccessType
            };

            mockUserRepository.Setup(user => user.GetById(It.IsAny <long>())).Returns(testMRMUser);

            mockDocumentRepository.Setup(doc => doc.GetSingle(It.IsAny <Expression <Func <Document, bool> > >())).Returns(
                (Expression <Func <Document, bool> > expr) => testDocument);

            mockDocumentRepository.Setup(doc => doc.Update(It.IsAny <Document>()));

            mockDeliverableDocumentRepository.Setup(mongo => mongo.Delete(It.IsAny <Guid>()));

            mockUnitOfWork.Setup(uow => uow.Commit());
            #endregion

            #region Act
            try
            {
                var docService = new DocumentsService(mockUnitOfWork.Object, null, mockDocumentRepository.Object, mockUserRepository.Object,
                                                      mockDocumentAccessTypeRepository.Object, mockMRMUserRepository.Object, mockDeliverableDocumentRepository.Object, mockContractRequestMasterVendorDocumentRepository.Object);
                docService.DeleteDocumentById(docId);
            }
            catch (Exception ex)
            {
                exceptionCaught = true;
            }

            #endregion


            //Assert
            Assert.IsFalse(exceptionCaught);
        }