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();
        }
Exemple #2
0
        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 });
                }
            }
        }