public void Given_2_sites_with_same_when_get_view_model_Then_return_correct_view_model()
        {
            //Given
            var target = CreateViewModelFactory();

            var returnDocumentTypesList = new List<DocHandlerDocumentTypeDto>()
                                              {
                                                  new DocHandlerDocumentTypeDto()
                                                      {
                                                          Id = 1
                                                      },
                                                  new DocHandlerDocumentTypeDto()
                                                      {
                                                          Id = 2
                                                      }
                                              };
            _documentTypeService
                .Setup(x => x.GetForDocumentGroup(DocHandlerDocumentTypeGroup.BusinessSafeSystem))
                .Returns(returnDocumentTypesList);


            var peninsulaSiteId = 34587435;
            var siteId = 678L;

            _siteService
                .Setup(x => x.Search(It.IsAny<SearchSitesRequest>()))
                .Returns(() => new SiteDto[] { 
                    new SiteDto() { Id = siteId, SiteId = peninsulaSiteId,Name = "Test"} 
                    ,new SiteDto() {Id=siteId,SiteId = peninsulaSiteId,Name="Test"}, 
                });

            var documentType = new ClientDocumentService.DocumentTypeDto()
            {
                Id = 1,
                Title = "DocumentType"
            };

            var returnDocuments = new[]{
                                          new ClientDocumentDto() 
                                              {
                                                  Id = 1,
                                                  CreatedOn = DateTime.Now,
                                                  Title = "Title1",
                                                  Description = "Test Description",
                                                  DocumentType = documentType,
                                                  SiteId = peninsulaSiteId
                                              }
                                      };
            _clientDocumentService
                .Setup(x => x.Search(It.IsAny<SearchClientDocumentsRequest>()))
                .Returns(returnDocuments);

            //When
            var result = target
                .WithCompanyId(_companyId)
                .WithDocHandlerDocumentTypeGroup(DocHandlerDocumentTypeGroup.BusinessSafeSystem)
                .WithDocumentTitle(_title)
                .WithDocumentTypeId(_documentTypeId)
                .WithAllowedSites(new List<long> { siteId })
                .GetViewModel();

            //Then
            Assert.That(result.Sites.Count(), Is.EqualTo(3));
          
        }
        public void Given_view_model_with_document_type_ids_when_get_view_model_Then_pass_document_type_ids_to_request()
        {
            //Given
            var target = CreateViewModelFactory();

            var returnDocumentTypesList = new List<DocHandlerDocumentTypeDto>()
                                              {
                                                  new DocHandlerDocumentTypeDto()
                                                      {
                                                          Id = 1
                                                      },
                                                  new DocHandlerDocumentTypeDto()
                                                      {
                                                          Id = 2
                                                      }
                                              };
            _documentTypeService
                .Setup(x => x.GetForDocumentGroup(DocHandlerDocumentTypeGroup.BusinessSafeSystem))
                .Returns(returnDocumentTypesList);


            var peninsulaSiteId = 34587435;
            var siteId = 678L;

            _siteService
                .Setup(x => x.Search(It.IsAny<SearchSitesRequest>()))
                .Returns(() => new SiteDto[] { 
                    new SiteDto() { Id = siteId, SiteId = peninsulaSiteId,Name = "Test"} 
                    ,new SiteDto() {Id=siteId,SiteId = peninsulaSiteId,Name="Test"}, 
                });

            var documentTypeEvaluationReport = new ClientDocumentService.DocumentTypeDto()
            {
                Id = 1,
                Title = "Site Evaluation Reports"
            };

            var documentTypeBBSManagementReviews = new ClientDocumentService.DocumentTypeDto()
            {
                Id = 2,
                Title = "Management Reviews"
            };

            var documentTypeEvaluationReportSafeDoc = new ClientDocumentService.DocumentTypeDto()
            {
                Id = 3,
                Title = "Site Evaluation Reports safe docs"
            };

            var documentTypeHandsBookSafeDoc = new ClientDocumentService.DocumentTypeDto()
            {
                Id = 4,
                Title = "Site Evaluation Reports safe docs"
            };

            var docTypeIdsToSerachFor = new List<long> {1, 2};

            var returnDocuments = new[]{
                                          new ClientDocumentDto() 
                                              {
                                                  Id = 1,
                                                  CreatedOn = DateTime.Now,
                                                  Title = "Title1",
                                                  Description = "Test Description",
                                                  DocumentType = documentTypeEvaluationReport,
                                                  SiteId = peninsulaSiteId
                                              },

                                               new ClientDocumentDto() 
                                              {
                                                  Id = 2,
                                                  CreatedOn = DateTime.Now,
                                                  Title = "Title2",
                                                  Description = "Test Description",
                                                  DocumentType = documentTypeBBSManagementReviews,
                                                  SiteId = peninsulaSiteId
                                              },

                                              new ClientDocumentDto() 
                                              {
                                                  Id = 3,
                                                  CreatedOn = DateTime.Now,
                                                  Title = "Title3",
                                                  Description = "Test Description",
                                                  DocumentType = documentTypeHandsBookSafeDoc,
                                                  SiteId = peninsulaSiteId
                                              },

                                              new ClientDocumentDto() 
                                              {
                                                  Id = 4,
                                                  CreatedOn = DateTime.Now,
                                                  Title = "Title4",
                                                  Description = "Test Description",
                                                  DocumentType = documentTypeEvaluationReportSafeDoc,
                                                  SiteId = peninsulaSiteId
                                              }
                                      };

            var searchClientDocumentsRequest = new SearchClientDocumentsRequest();
            _clientDocumentService
                .Setup(x => x.Search(It.IsAny<SearchClientDocumentsRequest>()))
                .Callback<SearchClientDocumentsRequest>(y => searchClientDocumentsRequest= y)
                .Returns(returnDocuments);

            //When
            var result = target
                .WithCompanyId(_companyId)
                .WithDocHandlerDocumentTypeGroup(DocHandlerDocumentTypeGroup.BusinessSafeSystem)
                .WithDocumentTitle(_title)
                .WithDocumentTypeIds(docTypeIdsToSerachFor)
                .WithAllowedSites(new List<long> { siteId })
                .GetViewModel();

            //Then
            Assert.That(searchClientDocumentsRequest.DocumentTypeIds.Count(), Is.EqualTo(2));
        }
        public void When_get_view_model_Then_return_correct_view_model()
        {
            //Given
            var target = CreateViewModelFactory();

            var returnDocumentTypesList = new List<DocHandlerDocumentTypeDto>()
                                              {
                                                  new DocHandlerDocumentTypeDto()
                                                      {
                                                          Id = 1
                                                      },
                                                  new DocHandlerDocumentTypeDto()
                                                      {
                                                          Id = 2
                                                      }
                                              };
            _documentTypeService
                .Setup(x => x.GetForDocumentGroup(DocHandlerDocumentTypeGroup.BusinessSafeSystem))
                .Returns(returnDocumentTypesList);


            var peninsulaSiteId = 34587435;
            var siteId = 678L;

            _siteService
                .Setup(x => x.Search(It.IsAny<SearchSitesRequest>()))
                .Returns(new SiteDto[] {new SiteDto {Id = siteId, SiteId = peninsulaSiteId}});

            var documentType = new ClientDocumentService.DocumentTypeDto()
                                   {
                                       Id = 1,
                                       Title = "DocumentType"
                                   };

            var returnDocuments = new[]
                                      {
                                          new ClientDocumentDto() 
                                              {
                                                  Id = 1,
                                                  CreatedOn = DateTime.Now,
                                                  Title = "Title1",
                                                  Description = "Test Description",
                                                  DocumentType = documentType,
                                                  SiteId = peninsulaSiteId
                                              },
                                          new ClientDocumentDto()
                                              {
                                                  Id = 2,
                                                  CreatedOn = DateTime.Now,
                                                  Title = "Title2",
                                                  DocumentType = documentType,
                                                  SiteId = peninsulaSiteId
                                              },
                                          new ClientDocumentDto()
                                              {
                                                  Id = 3,
                                                  CreatedOn = DateTime.Now,
                                                  Title = "Title3",
                                                  DocumentType = documentType,
                                                  SiteId = peninsulaSiteId
                                              }, 
                                      };
            _clientDocumentService
                .Setup(x => x.Search(It.IsAny<SearchClientDocumentsRequest>()))
                .Returns(returnDocuments);

            //When
            var result = target
                .WithCompanyId(_companyId)
                .WithDocHandlerDocumentTypeGroup(DocHandlerDocumentTypeGroup.BusinessSafeSystem)
                .WithDocumentTitle(_title)
                .WithDocumentTypeId(_documentTypeId)
                .WithAllowedSites(new List<long>{siteId})
                .GetViewModel();

            //Then
            Assert.That(result, Is.TypeOf<BusinessSafeSystemDocumentsLibraryViewModel>());
            Assert.That(result.CompanyId, Is.EqualTo(_companyId));
            Assert.That(result.Title, Is.EqualTo(_title));
            Assert.That(result.Documents.Count(), Is.EqualTo(returnDocuments.Count()));

            var firstViewModel = result.Documents.First();
            var firstClientDocumentDto = returnDocuments.First();

            Assert.That(firstViewModel.Id, Is.EqualTo(firstClientDocumentDto.Id));
            Assert.That(firstViewModel.Title, Is.EqualTo(firstClientDocumentDto.Title));
            Assert.That(firstViewModel.DocumentType, Is.EqualTo(firstClientDocumentDto.DocumentType.Title));
            Assert.That(firstViewModel.Description, Is.EqualTo(firstClientDocumentDto.Description));
            Assert.That(result.Documents.Last().Title, Is.EqualTo(returnDocuments.Last().Title));
        }