public void GetJobs_WithNoFilter_ReturnsAllResults() { // Arrange IJobRepository jobRepository = CreateJobRepository(); jobRepository .GetJobs() .Returns(testData.AsQueryable()); IJobService jobService = CreateJobService(jobRepository); // Act IActionResult results = jobService.GetJobs(null, null, null, null, null, false, 1); // Assert OkObjectResult objResult = results .Should() .BeOfType <OkObjectResult>() .Subject; JobQueryResponseModel response = objResult.Value .Should() .BeOfType <JobQueryResponseModel>() .Subject; response.TotalItems.Should().Be(testData.Count); response.CurrentPage.Should().Be(1); response.TotalPages.Should().Be(1); IEnumerable <JobSummary> summaries = response.Results; summaries .Should() .HaveCount(testData.Count); }
public void GetJobs_WhenSecondPageRequested_ReturnsSecondPageOfResults() { // Arrange List <Job> largeTestData = new List <Job>(); for (int i = 0; i < 100; i++) { largeTestData.Add(new Job { CompletionStatus = CompletionStatus.Succeeded, Id = "job" + i, JobDefinitionId = "jobType1", Outcome = "Job Completed Successfully", RunningStatus = RunningStatus.Completed, SpecificationId = "spec123", Trigger = new Trigger { EntityId = "entity1" } }); } IJobRepository jobRepository = CreateJobRepository(); jobRepository .GetJobs() .Returns(largeTestData.AsQueryable()); IJobService jobService = CreateJobService(jobRepository); // Act IActionResult results = jobService.GetJobs(null, null, null, null, null, false, 2); // Assert OkObjectResult objResult = results .Should() .BeOfType <OkObjectResult>() .Subject; JobQueryResponseModel response = objResult.Value .Should() .BeOfType <JobQueryResponseModel>() .Subject; response.TotalItems.Should().Be(largeTestData.Count); response.CurrentPage.Should().Be(2); response.TotalPages.Should().Be(2); IEnumerable <JobSummary> summaries = response.Results; summaries .Should() .HaveCount(50); summaries .First() .JobId .Should() .Be("job50", "first job should be the 50th job"); summaries .Last() .JobId .Should() .Be("job99", "last job should be the 100th job"); }
public void GetJobs_WhenAllFiltersPresent_ReturnsResultsMatchingFilter() { // Arrange string specificationId = "spec123"; string jobType = "jobType1"; string entityId = "entity1"; RunningStatus runningStatus = RunningStatus.Completed; CompletionStatus completionStatus = CompletionStatus.Succeeded; IJobRepository jobRepository = CreateJobRepository(); jobRepository .GetJobs() .Returns(testData.AsQueryable()); IJobService jobService = CreateJobService(jobRepository); // Act IActionResult results = jobService.GetJobs(specificationId, jobType, entityId, runningStatus, completionStatus, false, 1); // Assert OkObjectResult objResult = results .Should() .BeOfType <OkObjectResult>() .Subject; JobQueryResponseModel response = objResult.Value .Should() .BeOfType <JobQueryResponseModel>() .Subject; response.TotalItems.Should().Be(1); response.CurrentPage.Should().Be(1); response.TotalPages.Should().Be(1); IEnumerable <JobSummary> summaries = response.Results; summaries .Should() .OnlyContain(s => s.SpecificationId == specificationId && s.JobType == jobType && s.EntityId == entityId && s.RunningStatus == runningStatus && s.CompletionStatus == completionStatus); summaries .Should() .HaveCount(1); }
public void GetJobs_CheckFieldsMapped() { // Arrange string entityId = "entity99"; IJobRepository jobRepository = CreateJobRepository(); jobRepository .GetJobs() .Returns(testData.AsQueryable()); IJobService jobService = CreateJobService(jobRepository); // Act IActionResult results = jobService.GetJobs(null, null, entityId, null, null, false, 1); // Assert OkObjectResult objResult = results .Should() .BeOfType <OkObjectResult>() .Subject; JobQueryResponseModel response = objResult.Value .Should() .BeOfType <JobQueryResponseModel>() .Subject; IEnumerable <JobSummary> summaries = response.Results; summaries .Should() .HaveCount(1); JobSummary item = summaries.First(); item.CompletionStatus.Should().Be(CompletionStatus.Succeeded); item.EntityId.Should().Be(entityId); item.InvokerUserDisplayName.Should().Be("Test User"); item.InvokerUserId.Should().Be("testuser"); item.JobId.Should().Be("job14"); item.JobType.Should().Be("jobType3"); item.ParentJobId.Should().Be("job1"); item.RunningStatus.Should().Be(RunningStatus.Completed); item.SpecificationId.Should().Be("spec123"); item.Created.Should().Be(DateTimeOffset.Parse("2018-12-20T15:15:00.000Z")); }
public async Task GetJobs_WhenNonExistantPageRequested_ReturnsEmptyList() { // Arrange List <Job> largeTestData = new List <Job>(); for (int i = 0; i < 100; i++) { largeTestData.Add(new Job { CompletionStatus = CompletionStatus.Succeeded, Id = "job" + i, JobDefinitionId = "jobType1", Outcome = "Job Completed Successfully", RunningStatus = RunningStatus.Completed, SpecificationId = "spec123", Trigger = new Trigger { EntityId = "entity1" } }); } IJobRepository jobRepository = CreateJobRepository(); jobRepository .GetJobs() .Returns(largeTestData.AsQueryable()); IJobService jobService = CreateJobService(jobRepository); // Act IActionResult results = await jobService.GetJobs(null, null, null, null, null, false, 3); // Assert OkObjectResult objResult = results .Should() .BeOfType <OkObjectResult>() .Subject; JobQueryResponseModel response = objResult.Value .Should() .BeOfType <JobQueryResponseModel>() .Subject; response.TotalItems.Should().Be(largeTestData.Count); response.CurrentPage.Should().Be(3); response.TotalPages.Should().Be(2); IEnumerable <JobSummary> summaries = response.Results; summaries .Should() .BeEmpty(); }
public void GetJobs_WithExcludeChildJobsOption_ReturnsOnlyParentJobs() { // Arrange string specId = "spec123"; IJobRepository jobRepository = CreateJobRepository(); jobRepository .GetJobs() .Returns(testData.AsQueryable()); IJobService jobService = CreateJobService(jobRepository); // Act IActionResult results = jobService.GetJobs(specId, null, null, null, null, true, 1); // Assert OkObjectResult objResult = results .Should() .BeOfType <OkObjectResult>() .Subject; JobQueryResponseModel response = objResult.Value .Should() .BeOfType <JobQueryResponseModel>() .Subject; response.TotalItems.Should().Be(2); response.CurrentPage.Should().Be(1); response.TotalPages.Should().Be(1); IEnumerable <JobSummary> summaries = response.Results; summaries .Should() .OnlyContain(s => s.SpecificationId == specId && s.ParentJobId == null); summaries .Should() .HaveCount(2); }
public void GetJobs_WithCompletionStatusFilter_ReturnsResultsMatchingFilter() { // Arrange CompletionStatus completionStatus = CompletionStatus.Succeeded; IJobRepository jobRepository = CreateJobRepository(); jobRepository .GetJobs() .Returns(testData.AsQueryable()); IJobService jobService = CreateJobService(jobRepository); // Act IActionResult results = jobService.GetJobs(null, null, null, null, completionStatus, false, 1); // Assert OkObjectResult objResult = results .Should() .BeOfType <OkObjectResult>() .Subject; JobQueryResponseModel response = objResult.Value .Should() .BeOfType <JobQueryResponseModel>() .Subject; response.TotalItems.Should().Be(3); response.CurrentPage.Should().Be(1); response.TotalPages.Should().Be(1); IEnumerable <JobSummary> summaries = response.Results; summaries .Should() .OnlyContain(s => s.CompletionStatus == completionStatus); summaries .Should() .HaveCount(3); }
public async Task GetJobs_WithRunningStatusFilter_ReturnsResultsMatchingFilter() { // Arrange RunningStatus runningStatus = RunningStatus.InProgress; IJobRepository jobRepository = CreateJobRepository(); jobRepository .GetJobs() .Returns(testData.AsQueryable()); IJobService jobService = CreateJobService(jobRepository); // Act IActionResult results = await jobService.GetJobs(null, null, null, runningStatus, null, false, 1); // Assert OkObjectResult objResult = results .Should() .BeOfType <OkObjectResult>() .Subject; JobQueryResponseModel response = objResult.Value .Should() .BeOfType <JobQueryResponseModel>() .Subject; response.TotalItems.Should().Be(2); response.CurrentPage.Should().Be(1); response.TotalPages.Should().Be(1); IEnumerable <JobSummary> summaries = response.Results; summaries .Should() .OnlyContain(s => s.RunningStatus == runningStatus); summaries .Should() .HaveCount(2); }
public async Task GetJobs_WithSpecificationFilter_ReturnsResultsMatchingFilter() { // Arrange string specId = "spec123"; IJobRepository jobRepository = CreateJobRepository(); jobRepository .GetJobs() .Returns(testData.AsQueryable()); IJobService jobService = CreateJobService(jobRepository); // Act IActionResult results = await jobService.GetJobs(specId, null, null, null, null, false, 1); // Assert OkObjectResult objResult = results .Should() .BeOfType <OkObjectResult>() .Subject; JobQueryResponseModel response = objResult.Value .Should() .BeOfType <JobQueryResponseModel>() .Subject; response.TotalItems.Should().Be(3); response.CurrentPage.Should().Be(1); response.TotalPages.Should().Be(1); IEnumerable <JobSummary> summaries = response.Results; summaries .Should() .OnlyContain(s => s.SpecificationId == specId); summaries .Should() .HaveCount(3); }
public void GetJobs_WithUnknownSpecificationFilter_ReturnsZeroResults() { // Arrange string specId = "unknown"; IJobRepository jobRepository = CreateJobRepository(); jobRepository .GetJobs() .Returns(testData.AsQueryable()); IJobService jobService = CreateJobService(jobRepository); // Act IActionResult results = jobService.GetJobs(specId, null, null, null, null, false, 1); // Assert OkObjectResult objResult = results .Should() .BeOfType <OkObjectResult>() .Subject; JobQueryResponseModel response = objResult.Value .Should() .BeOfType <JobQueryResponseModel>() .Subject; response.TotalItems.Should().Be(0); response.CurrentPage.Should().Be(1); response.TotalPages.Should().Be(0); IEnumerable <JobSummary> summaries = response.Results; summaries .Should() .BeEmpty(); }
public IActionResult GetJobs(string specificationId, string jobType, string entityId, RunningStatus?runningStatus, CompletionStatus?completionStatus, bool excludeChildJobs, int pageNumber) { if (pageNumber < 1) { return(new BadRequestObjectResult("Invalid page number, pages start from 1")); } IQueryable <Job> allJobs = _jobsRepositoryNonAsyncPolicy.Execute(() => _jobRepository.GetJobs()); if (!string.IsNullOrEmpty(specificationId)) { allJobs = allJobs.Where(j => j.SpecificationId == specificationId); } if (!string.IsNullOrEmpty(jobType)) { allJobs = allJobs.Where(j => j.JobDefinitionId == jobType); } if (!string.IsNullOrEmpty(entityId)) { allJobs = allJobs.Where(j => j.Trigger.EntityId == entityId); } if (runningStatus.HasValue) { allJobs = allJobs.Where(j => j.RunningStatus == runningStatus.Value); } if (completionStatus.HasValue) { allJobs = allJobs.Where(j => j.CompletionStatus == completionStatus.Value); } if (excludeChildJobs) { allJobs = allJobs.Where(j => j.ParentJobId == null); } int totalItems = allJobs.Count(); // Limit the query to end of the requested page const int pageSize = 50; allJobs = allJobs.Take(pageNumber * pageSize); // Need to do actual page selection in memory as Cosmos doesn't support Skip or ordering by date IEnumerable <Job> executedJobs = allJobs.AsEnumerable().OrderByDescending(j => j.LastUpdated); executedJobs = executedJobs.Skip((pageNumber - 1) * pageSize).Take(pageSize); System.Diagnostics.Debug.WriteLine("Executed Jobs: {0}", executedJobs.Count()); IEnumerable <JobSummary> summaries = _mapper.Map <IEnumerable <JobSummary> >(executedJobs); JobQueryResponseModel jobQueryResponse = new JobQueryResponseModel { Results = summaries, CurrentPage = pageNumber, PageSize = pageSize, TotalItems = totalItems, TotalPages = (int)Math.Ceiling((double)totalItems / pageSize) }; return(new OkObjectResult(jobQueryResponse)); }