public async Task FlushCommands_sends_all_scheduled_commands_associated_with_specified_process_manager_sequentially() { // Arrange var serializer = new JsonMessageSerializer(); var processManager = new FakeProcessManager(); var noiseProcessManager = new FakeProcessManager(); var random = new Random(); var fixture = new Fixture(); var scheduledEnvelopes = new List <ScheduledEnvelope>( from command in new[] { new FakeCommand { Int32Value = random.Next(), StringValue = fixture.Create <string>() }, new FakeCommand { Int32Value = random.Next(), StringValue = fixture.Create <string>() }, new FakeCommand { Int32Value = random.Next(), StringValue = fixture.Create <string>() }, } let envelope = new Envelope(Guid.NewGuid(), command, null, Guid.NewGuid(), null) select new ScheduledEnvelope(envelope, DateTime.UtcNow.AddTicks(random.Next()))); using (var db = new ProcessManagerDbContext(_dbContextOptions)) { db.PendingScheduledCommands.AddRange( from scheduledEnvelope in scheduledEnvelopes select PendingScheduledCommand.FromScheduledEnvelope(processManager, scheduledEnvelope, serializer)); db.PendingScheduledCommands.AddRange( from scheduledEnvelope in new[] { new ScheduledEnvelope(new Envelope(new object()), DateTime.UtcNow), new ScheduledEnvelope(new Envelope(new object()), DateTime.UtcNow), new ScheduledEnvelope(new Envelope(new object()), DateTime.UtcNow), } select PendingScheduledCommand.FromScheduledEnvelope(noiseProcessManager, scheduledEnvelope, serializer)); await db.SaveChangesAsync(); } var scheduledMessageBus = new ScheduledMessageBus(); var sut = new SqlCommandPublisher( () => new ProcessManagerDbContext(_dbContextOptions), serializer, Mock.Of <IMessageBus>(), scheduledMessageBus); // Act await sut.FlushCommands(processManager.Id, CancellationToken.None); // Assert scheduledMessageBus.Sent.Should().BeEquivalentTo(scheduledEnvelopes, opts => opts.WithStrictOrdering().RespectingRuntimeTypes()); }
public async Task FlushCommands_sends_all_scheduled_commands_associated_with_specified_process_manager_sequentially() { // Arrange var serializer = new JsonMessageSerializer(); var processManager = new FooProcessManager(); var noiseProcessManager = new FooProcessManager(); var fixture = new Fixture(); var scheduledEnvelopes = new List <ScheduledEnvelope>( from command in fixture.CreateMany <FooCommand>() let envelope = new Envelope(Guid.NewGuid(), command, null, Guid.NewGuid(), null) select new ScheduledEnvelope(envelope, fixture.Create <DateTimeOffset>())); using (var db = new FooProcessManagerDbContext()) { db.PendingScheduledCommands.AddRange( from scheduledEnvelope in scheduledEnvelopes select PendingScheduledCommand.FromScheduledEnvelope(processManager, scheduledEnvelope, serializer)); db.PendingScheduledCommands.AddRange( from scheduledEnvelope in fixture.CreateMany <ScheduledEnvelope>() select PendingScheduledCommand.FromScheduledEnvelope(noiseProcessManager, scheduledEnvelope, serializer)); await db.SaveChangesAsync(); } var scheduledMessageBus = new ScheduledMessageBus(); var sut = new SqlCommandPublisher( () => new FooProcessManagerDbContext(), serializer, Mock.Of <IMessageBus>(), scheduledMessageBus); // Act await sut.FlushCommands(processManager.Id, CancellationToken.None); // Assert scheduledMessageBus.Sent.ShouldAllBeEquivalentTo(scheduledEnvelopes, opts => opts.WithStrictOrdering().RespectingRuntimeTypes()); }