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 SaveDocumentInsert_Success()
        {
            bool exceptionCaught = false;
            int  result          = 0;

            //Arrange

            byte[] fileData = { 0x32, 0x00, 0x1E, 0x00 };

            DeliverableDocument testDeliverableDocument = new DeliverableDocument()
            {
                DeliverableId = 1,
                FileData      = fileData,
                FileName      = "NewFileName",
                FileSize      = 1000,
                FileType      = "MongoFileType",
                CreateDate    = DateTime.Now,
                UserId        = 0,
                UserName      = "******",
                IsActive      = true,
                Id            = Guid.Empty
            };

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

            Document testDocument = new Document()
            {
                Id   = 1,
                Name = "TestDocumentName",
                OthersCanDeleteFlag  = true,
                DocumentAccessTypeId = 4,  //User Only
                DepartmentId         = 84, //MRM Team
                DeliverableId        = 1,
                FileName             = "TestFileName",
                Description          = "TestDescription",
                IsActiveFlag         = true,
                FileId = null
            };

            List <Document_MRMUser> testDocMRMUsers = new List <Document_MRMUser>();

            Document_MRMUser testDocMRMUser = new Document_MRMUser()
            {
                MRMUserId = 0
            };

            testDocMRMUsers.Add(testDocMRMUser);

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

            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) => null);

            mockDeliverableDocumentRepository.Setup(dd => dd.Add(It.IsAny <DeliverableDocument>())).Returns(true);

            mockDocumentRepository.Setup(doc => doc.Add(It.IsAny <Document>())).Returns(testDocument);

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

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

                result = docService.Save(testDocument, testDeliverableDocument);
            }
            catch (Exception ex)
            {
                exceptionCaught = true;
            }

            //Assert
            Assert.IsFalse(exceptionCaught);
            Assert.IsTrue(testDocument.FileId == Guid.Empty);
        }
        public void SaveDocumentUpdate_Success()
        {
            bool exceptionCaught = false;
            int  result          = 0;
            //Arrange

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

            Document testDocument = new Document()
            {
                Id   = 1,
                Name = "TestDocumentName",
                OthersCanDeleteFlag  = true,
                DocumentAccessTypeId = 4,  //User Only
                DepartmentId         = 84, //MRM Team
                DeliverableId        = 1,
                FileName             = "TestFileName",
                Description          = "TestDescription",
                IsActiveFlag         = true
            };

            List <Document_MRMUser> testDocMRMUsers = new List <Document_MRMUser>();

            Document_MRMUser testDocMRMUser = new Document_MRMUser()
            {
                MRMUserId = 0
            };

            testDocMRMUsers.Add(testDocMRMUser);

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

            Document testExistingDocument = new Document()
            {
                Id   = 1,
                Name = "TestDocumentName",
                OthersCanDeleteFlag  = true,
                DocumentAccessTypeId = 4,  //User Only
                DocumentAccessType   = testDocAccessType,
                DepartmentId         = 84, //MRM Team
                DeliverableId        = 1,
                FileName             = "TestFileName",
                Description          = "TestDescriptionChange",
                IsActiveFlag         = true,
                Document_MRMUser     = testDocMRMUsers,
                OwnerMRMUserId       = 0
            };

            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) => testExistingDocument);

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

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

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

                result = docService.Save(testDocument, null);
            }
            catch (Exception ex)
            {
                exceptionCaught = true;
            }

            //Assert
            Assert.IsFalse(exceptionCaught);
            Assert.IsTrue(result > 0);
        }
        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);
        }