public async Task Test_EndJob_Success_False_Should_Be_Failed_With_EndTime() { // arrange var job = new JobFaker().Generate("default,InProgress"); await using var dbContext = DbContextFactory.Instance.CreateDbContext <PortAuthorityDbContext>(); await dbContext.Setup(x => x.Jobs, job); var message = new TestEndJobMessage() { JobId = job.JobId, EndTime = DateTimeOffset.Now, Success = false }; // act await _consumer.Consume(new TestConsumeContext <EndJob>(message)); // assert var actual = DbContextFactory.Instance .CreateDbContext <PortAuthorityDbContext>() .Jobs.SingleOrDefault(j => j.JobId == job.JobId); actual.Should().NotBeNull(); actual.Status.Should().Be(Status.Failed, because: "job status updated"); actual.EndTime.Should().BeCloseTo(message.EndTime, because: "job end time updated"); }
public async Task Test_EndJob_NotFound_Should_noop() { // arrange var job = new JobFaker().Generate("default,InProgress"); await using var dbContext = DbContextFactory.Instance.CreateDbContext <PortAuthorityDbContext>(); await dbContext.Setup(x => x.Jobs, job); var message = new TestEndJobMessage() { JobId = Guid.NewGuid(), /* job does not exist */ EndTime = DateTimeOffset.Now.AddDays(99), Success = false }; // act await _consumer.Consume(new TestConsumeContext <EndJob>(message)); // assert var actual = DbContextFactory.Instance .CreateDbContext <PortAuthorityDbContext>() .Jobs.SingleOrDefault(j => j.JobId == job.JobId); actual.Should().NotBeNull(); actual.Status.Should().Be(job.Status); actual.StartTime.Should().BeCloseTo(job.StartTime.Value, because: "job start time should not have changed"); actual.EndTime.Should().BeNull("bad job id, end time not set"); }
public async Task Test_EndJob_AlreadyComplete_Should_noop() { // arrange var job = new JobFaker().Generate("default,Completed"); await using var dbContext = DbContextFactory.Instance.CreateDbContext <PortAuthorityDbContext>(); await dbContext.Setup(x => x.Jobs, job); var message = new TestEndJobMessage() { JobId = job.JobId, EndTime = DateTimeOffset.Now.AddDays(99), Success = true }; // act await _consumer.Consume(new TestConsumeContext <EndJob>(message)); // assert var actual = DbContextFactory.Instance .CreateDbContext <PortAuthorityDbContext>() .Jobs.SingleOrDefault(j => j.JobId == job.JobId); actual.Should().NotBeNull(); actual.Status.Should().Be(job.Status); actual.StartTime.Should().BeCloseTo(job.StartTime.Value, because: "job start time should not have changed"); actual.EndTime.Should().BeCloseTo(job.EndTime.Value, because: "job end time should not have changed"); }
public async Task Test_EndJobConsumer_Success_True_Should_Consume_With_Status_Completed() { // arrange var consumerHarness = Consumer <EndJobConsumer>(); var job = new JobFaker().Generate("default,InProgress"); await using var dbContext = GetDbContext(); await dbContext.Setup(x => x.Jobs, job); var message = new TestEndJobMessage() { JobId = job.JobId, EndTime = DateTimeOffset.Now, Success = true }; await Harness.Start(); try { // act await Harness.InputQueueSendEndpoint.Send <EndJob>(message); // assert Assert.That(await Harness.Consumed.Any <EndJob>(), "endpoint consumed message"); Assert.That(await consumerHarness.Consumed.Any <EndJob>(), "actual consumer consumed the message"); Assert.That(await Harness.Published.Any <Fault <EndJob> >(), Is.False, "message handled without fault"); await using var actualDbContext = GetDbContext(); var actual = actualDbContext.Jobs.SingleOrDefault(j => j.JobId == message.JobId); actual.Should().NotBeNull(); actual.JobId.Should().Be(message.JobId); actual.Status.Should().Be(Status.Completed, "job status is successful"); actual.EndTime.Should().BeCloseTo(message.EndTime, because: "job end time updated"); } finally { await Harness.Stop(); } }