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 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 GetDocumentsByDeliverableId_ShouldReturnSpecificUserDocument()
        {
            //Arrange

            int testDeliverableId = 1;

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

            Document testDocument1 = new Document()
            {
                Id   = 1,
                Name = "TestDocumentName1",
                OthersCanDeleteFlag = true,
                DocumentAccessType  = new DocumentAccessType()
                {
                    Code = Constants.DocumentAccessType.Department
                },
                DepartmentId   = 84,//MRM Team
                DeliverableId  = 1,
                FileName       = "TestFileName2",
                Description    = "TestDescription",
                IsActiveFlag   = true,
                FileId         = null,
                OwnerMRMUserId = 2
            };

            Document testDocument2 = new Document()
            {
                Id   = 2,
                Name = "TestDocumentName2",
                OthersCanDeleteFlag = true,
                DocumentAccessType  = new DocumentAccessType()
                {
                    Code = Constants.DocumentAccessType.GeneralAccess
                },
                DepartmentId   = 84,//MRM Team
                DeliverableId  = 1,
                FileName       = "TestFileName2",
                Description    = "TestDescription",
                IsActiveFlag   = true,
                FileId         = null,
                OwnerMRMUserId = 2
            };

            Document_MRMUser testSPDocUser = new Document_MRMUser()
            {
                MRMUserId = 10
            };

            List <Document_MRMUser> testSPDocUserList = new List <Document_MRMUser> {
                testSPDocUser
            };

            Document testSpecificPeople = new Document()
            {
                Id   = 3,
                Name = "TestSP",
                OthersCanDeleteFlag = true,
                DocumentAccessType  = new DocumentAccessType()
                {
                    Code = Constants.DocumentAccessType.SpecificPeople
                },
                DepartmentId     = 84,//MRM Team
                DeliverableId    = 1,
                FileName         = "TestSP",
                Description      = "TestSPDescription",
                IsActiveFlag     = true,
                FileId           = null,
                OwnerMRMUserId   = 2,
                Document_MRMUser = testSPDocUserList
            };

            //Build Document list
            List <Document> testDocumentList = new List <Document> {
                testDocument1, testDocument2, testSpecificPeople
            };

            IQueryable <Document> testDocumentQueryable = testDocumentList.AsQueryable();

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

            //Act


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

            docService.UserId = 10;

            var result = docService.GetDocumentsByDeliverableId(testDeliverableId).ToList();

            //Assert
            Assert.IsNotNull(result);
            Assert.IsTrue(result.Count == 2);
            var specificPeopleDoc = result.Where(x => x.Id == 3).ToList();

            Assert.IsTrue(specificPeopleDoc.Count() > 0);
        }