public async Task Test_EndSubtask_Success_False_Should_Be_Failed_With_EndTime() { // arrange var job = new JobFaker().Generate("default,InProgress"); var task = new SubtaskFaker().SetJob(job).Generate("defaults,InProgress"); await using var dbContext = DbContextFactory.Instance.CreateDbContext <PortAuthorityDbContext>(); await dbContext.Setup(x => x.Jobs, job); await dbContext.Setup(x => x.Tasks, task); var message = new TestEndSubtaskMessage() { TaskId = task.TaskId, EndTime = DateTimeOffset.Now, Success = false }; // act await _consumer.Consume(new TestConsumeContext <EndSubtask>(message)); // assert var actual = DbContextFactory.Instance .CreateDbContext <PortAuthorityDbContext>() .Tasks.SingleOrDefault(t => t.TaskId == task.TaskId); actual.Should().NotBeNull(); actual.Status.Should().Be(Status.Failed, because: "task status updated"); actual.EndTime.Should().BeCloseTo(message.EndTime, because: "task end time updated"); }
public async Task Test_EndSubtask_AlreadyComplete_Should_noop() { // arrange var job = new JobFaker().Generate("default,InProgress"); var task = new SubtaskFaker().SetJob(job).Generate("defaults,Completed"); await using var dbContext = DbContextFactory.Instance.CreateDbContext <PortAuthorityDbContext>(); await dbContext.Setup(x => x.Jobs, job); await dbContext.Setup(x => x.Tasks, task); var message = new TestEndSubtaskMessage() { TaskId = task.TaskId, EndTime = DateTimeOffset.Now.AddDays(99), Success = true }; // act await _consumer.Consume(new TestConsumeContext <EndSubtask>(message)); // assert var actual = DbContextFactory.Instance .CreateDbContext <PortAuthorityDbContext>() .Jobs.SingleOrDefault(j => j.JobId == job.JobId); actual.Should().NotBeNull(); actual.Status.Should().Be(job.Status, "task start time should not have changed"); actual.StartTime.Should().BeCloseTo(job.StartTime.Value, because: "task start time should not have changed"); actual.EndTime.Should().BeNull("task end time not set"); }
public async Task Test_EndSubtaskConsumer_Success_True_Should_Consume_With_Status_Completed() { // arrange var consumerHarness = Consumer <EndSubtaskConsumer>(); var job = new JobFaker().Generate("default,InProgress"); var task = new SubtaskFaker().SetJob(job).Generate("default,InProgress"); await using var dbContext = GetDbContext(); await dbContext.Setup(x => x.Jobs, job); await dbContext.Setup(x => x.Tasks, task); var message = new TestEndSubtaskMessage() { TaskId = task.TaskId, EndTime = DateTimeOffset.Now, Success = true }; await Harness.Start(); try { // act await Harness.InputQueueSendEndpoint.Send <EndSubtask>(message); // assert Assert.That(await Harness.Consumed.Any <EndSubtask>(), "endpoint consumed message"); Assert.That(await consumerHarness.Consumed.Any <EndSubtask>(), "actual consumer consumed the message"); Assert.That(await Harness.Published.Any <Fault <EndSubtask> >(), Is.False, "message handled without fault"); await using var actualDbContext = GetDbContext(); var actual = actualDbContext.Tasks.SingleOrDefault(t => t.TaskId == task.TaskId); actual.Should().NotBeNull(); actual.TaskId.Should().Be(task.TaskId); actual.Status.Should().Be(Status.Completed, "task status is successful"); actual.EndTime.Should().BeCloseTo(message.EndTime, because: "task end time updated"); } finally { await Harness.Stop(); } }