public ClientDocumentDto[] Search(SearchClientDocumentsRequest request)
        {
            LoadDocuments();

            var result = _documents.AsQueryable();

            if (!string.IsNullOrEmpty(request.TitleLike))
                result = result.Where(d => d.Title.StartsWith(request.TitleLike) || d.Title.EndsWith(request.TitleLike));

            if (request.DocumentTypeIds != null)
                result = result.Where(d => request.DocumentTypeIds.Contains(d.DocumentType.Id.Value));

            return result.ToArray();
        }
        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 GetViewModel_retrieves_docType_ids_from_dochandler_service_and_passes_to_clientdocument_webservice()
        {
            // Given
            var target = CreateViewModelFactory();
            var passedSearchClientDocumentsRequest = new SearchClientDocumentsRequest();
            var documentTypes = new List<DocHandlerDocumentTypeDto>()
                                    {
                                        new DocHandlerDocumentTypeDto { Id = 1 },
                                        new DocHandlerDocumentTypeDto { Id = 2 },
                                        new DocHandlerDocumentTypeDto { Id = 3 }
                                    };
            _documentTypeService
                .Setup(x => x.GetForDocumentGroup(DocHandlerDocumentTypeGroup.BusinessSafeSystem))
                .Returns(documentTypes);

            _clientDocumentService
                .Setup(x => x.Search(It.IsAny<SearchClientDocumentsRequest>())).Returns(new ClientDocumentDto[0])
                .Callback<SearchClientDocumentsRequest>(y => passedSearchClientDocumentsRequest = y);

            // When
            target
                .WithCompanyId(_companyId)
                .WithDocumentTitle(_title)
                .WithDocHandlerDocumentTypeGroup(DocHandlerDocumentTypeGroup.BusinessSafeSystem)
                .GetViewModel();

            // Test
            _documentTypeService.Verify(x => x.GetForDocumentGroup(DocHandlerDocumentTypeGroup.BusinessSafeSystem), Times.Once());
            _clientDocumentService.Verify(x => x.Search(It.IsAny<SearchClientDocumentsRequest>()), Times.Once());
            Assert.That(passedSearchClientDocumentsRequest.DocumentTypeIds, Is.EqualTo(new long[] { 1,2,3 }));
        }