Пример #1
0
        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");
        }
Пример #2
0
        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();
            }
        }