示例#1
0
        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");
        }
示例#2
0
        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");
        }
示例#3
0
        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();
            }
        }