public async Task Complete_Removes_Staging_Queue_If_Empty() { // Arrange var nameProvider = new DelayedDeliveryTableNameProvider(); await CreateTimeoutTable(nameProvider.GetDelayedDeliveryTableName(endpointName)); var timeoutTarget = new ASQTarget(connectionString, nameProvider); await using var migrator = await timeoutTarget.PrepareTargetEndpointBatchMigrator(endpointName); await migrator.StageBatch(new List <TimeoutData> { new TimeoutData { Id = "SomeID", Headers = new Dictionary <string, string> { { "NServiceBus.MessageId", "SomeMessageId" } }, Destination = "SomeDestination", State = new byte[2], Time = new DateTime(2021, 12, 12, 12, 12, 12, DateTimeKind.Utc) }, new TimeoutData { Id = "SomeOtherId", Headers = new Dictionary <string, string> { { "NServiceBus.MessageId", "SomeOtherMessageId" } }, Destination = "SomeOtherDestination", State = new byte[2], Time = new DateTime(2021, 12, 12, 12, 13, 13, DateTimeKind.Utc) }, }, 1); await migrator.CompleteBatch(1); // Act await timeoutTarget.Complete(endpointName); // Assert var stagingTableExists = await DoesTableExist(nameProvider.GetStagingTableName(endpointName)); Assert.IsFalse(stagingTableExists); }
public async Task Complete_Throws_If_Messages_Are_Still_Staged() { // Arrange var nameProvider = new DelayedDeliveryTableNameProvider(); await CreateTimeoutTable(nameProvider.GetDelayedDeliveryTableName(endpointName)); var timeoutTarget = new ASQTarget(connectionString, nameProvider); await using var migrator = await timeoutTarget.PrepareTargetEndpointBatchMigrator(endpointName); var numberStaged = await migrator.StageBatch(new List <TimeoutData> { new TimeoutData { Id = "SomeID", Headers = new Dictionary <string, string> { { "NServiceBus.MessageId", "SomeMessageId" } }, Destination = "SomeDestination", State = new byte[2], Time = new DateTime(2021, 12, 12, 12, 12, 12, DateTimeKind.Utc) }, new TimeoutData { Id = "SomeOtherId", Headers = new Dictionary <string, string> { { "NServiceBus.MessageId", "SomeOtherMessageId" } }, Destination = "SomeOtherDestination", State = new byte[2], Time = new DateTime(2021, 12, 12, 12, 13, 13, DateTimeKind.Utc) }, }, 1); // Assert Assert.ThrowsAsync <Exception>(async() => { // Act await timeoutTarget.Complete(endpointName); }); }