public async Task Should_invoke_delete_commands_for_all_subfolders() { var @event = new AssetFolderDeleted { AppId = appId, AssetFolderId = DomainId.NewGuid() }; var childFolderId1 = DomainId.NewGuid(); var childFolderId2 = DomainId.NewGuid(); A.CallTo(() => assetFolderRepository.QueryChildIdsAsync(appId.Id, @event.AssetFolderId)) .Returns(new List <DomainId> { childFolderId1, childFolderId2 }); await sut.On(Envelope.Create(@event)); A.CallTo(() => commandBus.PublishAsync(A <DeleteAssetFolder> .That.Matches(x => x.AssetFolderId == childFolderId1))) .MustHaveHappened(); A.CallTo(() => commandBus.PublishAsync(A <DeleteAssetFolder> .That.Matches(x => x.AssetFolderId == childFolderId2))) .MustHaveHappened(); }
public async Task On(Envelope <IEvent> @event) { if (@event.Payload is AssetFolderDeleted folderDeleted) { async Task PublishAsync(SquidexCommand command) { try { command.Actor = folderDeleted.Actor; await commandBus.PublishAsync(command); } catch (Exception ex) { log.LogError(ex, w => w .WriteProperty("action", "DeleteAssetsRecursive") .WriteProperty("status", "Failed")); } } var appId = folderDeleted.AppId; var childAssetFolders = await assetFolderRepository.QueryChildIdsAsync(appId.Id, folderDeleted.AssetFolderId); foreach (var assetFolderId in childAssetFolders) { await PublishAsync(new DeleteAssetFolder { AppId = appId, AssetFolderId = assetFolderId }); } var childAssets = await assetRepository.QueryChildIdsAsync(appId.Id, folderDeleted.AssetFolderId); foreach (var assetId in childAssets) { await PublishAsync(new DeleteAsset { AppId = appId, AssetId = assetId }); } } }