From bb5fcf976663bb4c962eab05e4230f60eab468c2 Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Tue, 6 Feb 2018 13:30:04 +0100 Subject: [PATCH] Code simplified and styles finalized. --- .../Apps/AppCommandMiddleware.cs | 20 +- .../Apps/IAppTemplateBuilder.cs | 17 -- ...Blog.cs => CreateBlogCommandMiddleware.cs} | 95 +++++---- .../Contents/ContentCommandMiddleware.cs | 6 +- .../Rules/RuleCommandMiddleware.cs | 6 +- .../Schemas/SchemaCommandMiddleware.cs | 6 +- .../Commands/InMemoryCommandBus.cs | 10 +- src/Squidex/Config/Domain/WriteServices.cs | 6 +- .../apps/pages/apps-page.component.html | 4 +- .../pages/rules/rule-wizard.component.html | 4 +- .../pages/rules/rules-page.component.html | 4 +- .../app/shared/services/rules.service.ts | 184 ++++++++++-------- src/Squidex/wwwroot/images/add-blog.png | Bin 0 -> 5117 bytes .../Apps/AppCommandMiddlewareTests.cs | 33 +--- 14 files changed, 181 insertions(+), 214 deletions(-) delete mode 100644 src/Squidex.Domain.Apps.Entities/Apps/IAppTemplateBuilder.cs rename src/Squidex.Domain.Apps.Entities/Apps/Templates/{Blog.cs => CreateBlogCommandMiddleware.cs} (72%) create mode 100644 src/Squidex/wwwroot/images/add-blog.png diff --git a/src/Squidex.Domain.Apps.Entities/Apps/AppCommandMiddleware.cs b/src/Squidex.Domain.Apps.Entities/Apps/AppCommandMiddleware.cs index c4f934b48..02bb242bd 100644 --- a/src/Squidex.Domain.Apps.Entities/Apps/AppCommandMiddleware.cs +++ b/src/Squidex.Domain.Apps.Entities/Apps/AppCommandMiddleware.cs @@ -25,29 +25,25 @@ namespace Squidex.Domain.Apps.Entities.Apps private readonly IAppPlansProvider appPlansProvider; private readonly IAppPlanBillingManager appPlansBillingManager; private readonly IUserResolver userResolver; - private readonly IEnumerable templateBuilders; public AppCommandMiddleware( IAggregateHandler handler, IAppProvider appProvider, IAppPlansProvider appPlansProvider, IAppPlanBillingManager appPlansBillingManager, - IUserResolver userResolver, - IEnumerable templateBuilders) + IUserResolver userResolver) { Guard.NotNull(handler, nameof(handler)); Guard.NotNull(appProvider, nameof(appProvider)); Guard.NotNull(userResolver, nameof(userResolver)); Guard.NotNull(appPlansProvider, nameof(appPlansProvider)); Guard.NotNull(appPlansBillingManager, nameof(appPlansBillingManager)); - Guard.NotNull(templateBuilders, nameof(templateBuilders)); this.handler = handler; this.userResolver = userResolver; this.appProvider = appProvider; this.appPlansProvider = appPlansProvider; this.appPlansBillingManager = appPlansBillingManager; - this.templateBuilders = templateBuilders; } protected async Task On(CreateApp command, CommandContext context) @@ -60,14 +56,6 @@ namespace Squidex.Domain.Apps.Entities.Apps context.Complete(EntityCreatedResult.Create(command.AppId, a.Version)); }); - - if (!string.IsNullOrWhiteSpace(command.Template)) - { - foreach (var templateBuilder in templateBuilders) - { - await templateBuilder.PopulateTemplate(app.Snapshot, command.Template, context.CommandBus); - } - } } protected Task On(AssignContributor command, CommandContext context) @@ -206,10 +194,8 @@ namespace Squidex.Domain.Apps.Entities.Apps public async Task HandleAsync(CommandContext context, Func next) { - if (!await this.DispatchActionAsync(context.Command, context)) - { - await next(); - } + await this.DispatchActionAsync(context.Command, context); + await next(); } } } diff --git a/src/Squidex.Domain.Apps.Entities/Apps/IAppTemplateBuilder.cs b/src/Squidex.Domain.Apps.Entities/Apps/IAppTemplateBuilder.cs deleted file mode 100644 index 42b4b3439..000000000 --- a/src/Squidex.Domain.Apps.Entities/Apps/IAppTemplateBuilder.cs +++ /dev/null @@ -1,17 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschraenkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System.Threading.Tasks; -using Squidex.Infrastructure.Commands; - -namespace Squidex.Domain.Apps.Entities.Apps -{ - public interface IAppTemplateBuilder - { - Task PopulateTemplate(IAppEntity app, string name, ICommandBus bus); - } -} diff --git a/src/Squidex.Domain.Apps.Entities/Apps/Templates/Blog.cs b/src/Squidex.Domain.Apps.Entities/Apps/Templates/CreateBlogCommandMiddleware.cs similarity index 72% rename from src/Squidex.Domain.Apps.Entities/Apps/Templates/Blog.cs rename to src/Squidex.Domain.Apps.Entities/Apps/Templates/CreateBlogCommandMiddleware.cs index 79d9df9f3..46a59f82e 100644 --- a/src/Squidex.Domain.Apps.Entities/Apps/Templates/Blog.cs +++ b/src/Squidex.Domain.Apps.Entities/Apps/Templates/CreateBlogCommandMiddleware.cs @@ -16,11 +16,13 @@ using Squidex.Domain.Apps.Entities.Contents.Commands; using Squidex.Domain.Apps.Entities.Schemas.Commands; using Squidex.Infrastructure; using Squidex.Infrastructure.Commands; +using Squidex.Infrastructure.Tasks; namespace Squidex.Domain.Apps.Entities.Apps.Templates { - public sealed class Blog : IAppTemplateBuilder + public sealed class CreateBlogCommandMiddleware : ICommandMiddleware { + private const string TemplateName = "Blog"; private const string SlugScript = @" var data = ctx.data; @@ -28,52 +30,71 @@ namespace Squidex.Domain.Apps.Entities.Apps.Templates replace(data);"; - public async Task PopulateTemplate(IAppEntity app, string name, ICommandBus bus) + public Task HandleAsync(CommandContext context, Func next) { - if (string.Equals("Blog", name, StringComparison.OrdinalIgnoreCase)) + if (context.IsCompleted && + context.Command is CreateApp createApp && + string.Equals(createApp.Template, TemplateName, StringComparison.OrdinalIgnoreCase)) { - var appId = new NamedId(app.Id, app.Name); + var appId = new NamedId(createApp.AppId, createApp.Name); Task publishAsync(AppCommand command) { command.AppId = appId; - return bus.PublishAsync(command); + return context.CommandBus.PublishAsync(command); } - var pagesId = await CreatePagesSchema(publishAsync); - var postsId = await CreatePostsSchema(publishAsync); - - await publishAsync(new CreateContent - { - SchemaId = pagesId, - Data = - new NamedContentData() - .AddField("title", - new ContentFieldData() - .AddValue("iv", "About Me")) - .AddField("text", - new ContentFieldData() - .AddValue("iv", "I love Squidex and SciFi!")), - Publish = true - }); - - await publishAsync(new CreateContent - { - SchemaId = postsId, - Data = - new NamedContentData() - .AddField("title", - new ContentFieldData() - .AddValue("iv", "My first post with Squidex")) - .AddField("text", - new ContentFieldData() - .AddValue("iv", "Just created a blog with Squidex. I love it!")), - Publish = true, - }); - - await publishAsync(new AttachClient { Id = "sample-client" }); + return Task.WhenAll( + CreatePagesAsync(publishAsync, appId), + CreatePostsAsync(publishAsync, appId), + CreateClientAsync(publishAsync, appId)); } + + return TaskHelper.Done; + } + + private static async Task CreateClientAsync(Func publishAsync, NamedId appId) + { + await publishAsync(new AttachClient { Id = "sample-client" }); + } + + private async Task CreatePostsAsync(Func publishAsync, NamedId appId) + { + var postsId = await CreatePostsSchema(publishAsync); + + await publishAsync(new CreateContent + { + SchemaId = postsId, + Data = + new NamedContentData() + .AddField("title", + new ContentFieldData() + .AddValue("iv", "My first post with Squidex")) + .AddField("text", + new ContentFieldData() + .AddValue("iv", "Just created a blog with Squidex. I love it!")), + Publish = true, + }); + } + + private async Task CreatePagesAsync(Func publishAsync, NamedId appId) + { + var pagesId = await CreatePagesSchema(publishAsync); + + await publishAsync(new CreateContent + { + SchemaId = pagesId, + Data = + new NamedContentData() + .AddField("title", + new ContentFieldData() + .AddValue("iv", "About Me")) + .AddField("text", + new ContentFieldData() + .AddValue("iv", "I love Squidex and SciFi!")), + Publish = true + }); } private async Task> CreatePostsSchema(Func publishAsync) diff --git a/src/Squidex.Domain.Apps.Entities/Contents/ContentCommandMiddleware.cs b/src/Squidex.Domain.Apps.Entities/Contents/ContentCommandMiddleware.cs index 6923e5005..6b10ba6df 100644 --- a/src/Squidex.Domain.Apps.Entities/Contents/ContentCommandMiddleware.cs +++ b/src/Squidex.Domain.Apps.Entities/Contents/ContentCommandMiddleware.cs @@ -133,10 +133,8 @@ namespace Squidex.Domain.Apps.Entities.Contents public async Task HandleAsync(CommandContext context, Func next) { - if (!await this.DispatchActionAsync(context.Command, context)) - { - await next(); - } + await this.DispatchActionAsync(context.Command, context); + await next(); } private async Task CreateContext(ContentCommand command, ContentDomainObject content, Func message) diff --git a/src/Squidex.Domain.Apps.Entities/Rules/RuleCommandMiddleware.cs b/src/Squidex.Domain.Apps.Entities/Rules/RuleCommandMiddleware.cs index e252b5632..c0ee1cf5b 100644 --- a/src/Squidex.Domain.Apps.Entities/Rules/RuleCommandMiddleware.cs +++ b/src/Squidex.Domain.Apps.Entities/Rules/RuleCommandMiddleware.cs @@ -82,10 +82,8 @@ namespace Squidex.Domain.Apps.Entities.Rules public async Task HandleAsync(CommandContext context, Func next) { - if (!await this.DispatchActionAsync(context.Command, context)) - { - await next(); - } + await this.DispatchActionAsync(context.Command, context); + await next(); } } } diff --git a/src/Squidex.Domain.Apps.Entities/Schemas/SchemaCommandMiddleware.cs b/src/Squidex.Domain.Apps.Entities/Schemas/SchemaCommandMiddleware.cs index 18c468c0f..b58f2c815 100644 --- a/src/Squidex.Domain.Apps.Entities/Schemas/SchemaCommandMiddleware.cs +++ b/src/Squidex.Domain.Apps.Entities/Schemas/SchemaCommandMiddleware.cs @@ -187,10 +187,8 @@ namespace Squidex.Domain.Apps.Entities.Schemas public async Task HandleAsync(CommandContext context, Func next) { - if (!await this.DispatchActionAsync(context.Command, context)) - { - await next(); - } + await this.DispatchActionAsync(context.Command, context); + await next(); } } } diff --git a/src/Squidex.Infrastructure/Commands/InMemoryCommandBus.cs b/src/Squidex.Infrastructure/Commands/InMemoryCommandBus.cs index 13892b92e..7c72e8fba 100644 --- a/src/Squidex.Infrastructure/Commands/InMemoryCommandBus.cs +++ b/src/Squidex.Infrastructure/Commands/InMemoryCommandBus.cs @@ -15,13 +15,13 @@ namespace Squidex.Infrastructure.Commands { public sealed class InMemoryCommandBus : ICommandBus { - private readonly List handlers; + private readonly List middlewares; - public InMemoryCommandBus(IEnumerable handlers) + public InMemoryCommandBus(IEnumerable middlewares) { - Guard.NotNull(handlers, nameof(handlers)); + Guard.NotNull(middlewares, nameof(middlewares)); - this.handlers = handlers.Reverse().ToList(); + this.middlewares = middlewares.Reverse().ToList(); } public async Task PublishAsync(ICommand command) @@ -32,7 +32,7 @@ namespace Squidex.Infrastructure.Commands var next = new Func(() => TaskHelper.Done); - foreach (var handler in handlers) + foreach (var handler in middlewares) { next = Join(handler, context, next); } diff --git a/src/Squidex/Config/Domain/WriteServices.cs b/src/Squidex/Config/Domain/WriteServices.cs index 957d1c1da..7c890b235 100644 --- a/src/Squidex/Config/Domain/WriteServices.cs +++ b/src/Squidex/Config/Domain/WriteServices.cs @@ -64,6 +64,9 @@ namespace Squidex.Config.Domain services.AddSingletonAs() .As(); + services.AddSingletonAs() + .As(); + services.AddTransientAs() .As(); @@ -76,9 +79,6 @@ namespace Squidex.Config.Domain services.AddTransientAs() .As(); - services.AddTransientAs() - .As(); - services.AddTransientAs() .AsSelf(); diff --git a/src/Squidex/app/features/apps/pages/apps-page.component.html b/src/Squidex/app/features/apps/pages/apps-page.component.html index cd36226d0..68f4e00ec 100644 --- a/src/Squidex/app/features/apps/pages/apps-page.component.html +++ b/src/Squidex/app/features/apps/pages/apps-page.component.html @@ -42,10 +42,10 @@
- +
-

Blog Sample

+

New Blog Sample

Start with our ready to use blog.
diff --git a/src/Squidex/app/features/rules/pages/rules/rule-wizard.component.html b/src/Squidex/app/features/rules/pages/rules/rule-wizard.component.html index b09792026..160232581 100644 --- a/src/Squidex/app/features/rules/pages/rules/rule-wizard.component.html +++ b/src/Squidex/app/features/rules/pages/rules/rule-wizard.component.html @@ -32,7 +32,7 @@ - {{ruleTriggers[trigger]}} + {{ruleTriggers[trigger].name}}
@@ -61,7 +61,7 @@ - {{ruleActions[action]}} + {{ruleActions[action].name}}
diff --git a/src/Squidex/app/features/rules/pages/rules/rules-page.component.html b/src/Squidex/app/features/rules/pages/rules/rules-page.component.html index de4833ece..a6b7f98f6 100644 --- a/src/Squidex/app/features/rules/pages/rules/rules-page.component.html +++ b/src/Squidex/app/features/rules/pages/rules/rules-page.component.html @@ -43,7 +43,7 @@ - {{ruleTriggers[rule.triggerType]}} + {{ruleTriggers[rule.triggerType].name}} @@ -56,7 +56,7 @@ - {{ruleActions[rule.actionType]}} + {{ruleActions[rule.actionType].name}} diff --git a/src/Squidex/app/shared/services/rules.service.ts b/src/Squidex/app/shared/services/rules.service.ts index 150b4ac66..88cf2b71b 100644 --- a/src/Squidex/app/shared/services/rules.service.ts +++ b/src/Squidex/app/shared/services/rules.service.ts @@ -21,16 +21,30 @@ import { } from 'framework'; export const ruleTriggers: any = { - 'AssetChanged': 'Asset changed', - 'ContentChanged': 'Content changed' + 'AssetChanged': { + name: 'Asset changed' + }, + 'ContentChanged': { + name: 'Content changed' + } }; export const ruleActions: any = { - 'Algolia': 'Populate Algolia Index', - 'AzureQueue': 'Send to Azure Queue', - 'Fastly': 'Purge fastly Cache', - 'Slack': 'Send to Slack', - 'Webhook': 'Send Webhook' + 'Algolia': { + name: 'Populate Algolia Index' + }, + 'AzureQueue': { + name: 'Send to Azure Queue' + }, + 'Fastly': { + name: 'Purge fastly Cache' + }, + 'Slack': { + name: 'Send to Slack' + }, + 'Webhook': { + name: 'Send Webhook' + } }; export class RuleDto { @@ -154,125 +168,125 @@ export class RulesService { const url = this.apiUrl.buildUrl(`api/apps/${appName}/rules`); return HTTP.getVersioned(this.http, url) - .map(response => { - const items: any[] = response.payload.body; - - return items.map(item => { - return new RuleDto( - item.id, - item.createdBy, - item.lastModifiedBy, - DateTime.parseISO_UTC(item.created), - DateTime.parseISO_UTC(item.lastModified), - new Version(item.version.toString()), - item.isEnabled, - item.trigger, - item.trigger.triggerType, - item.action, - item.action.actionType); - }); - }) - .pretifyError('Failed to load Rules. Please reload.'); + .map(response => { + const items: any[] = response.payload.body; + + return items.map(item => { + return new RuleDto( + item.id, + item.createdBy, + item.lastModifiedBy, + DateTime.parseISO_UTC(item.created), + DateTime.parseISO_UTC(item.lastModified), + new Version(item.version.toString()), + item.isEnabled, + item.trigger, + item.trigger.triggerType, + item.action, + item.action.actionType); + }); + }) + .pretifyError('Failed to load Rules. Please reload.'); } public postRule(appName: string, dto: CreateRuleDto, user: string, now: DateTime): Observable { const url = this.apiUrl.buildUrl(`api/apps/${appName}/rules`); return HTTP.postVersioned(this.http, url, dto) - .map(response => { - const body = response.payload.body; - - return new RuleDto( - body.id, - user, - user, - now, - now, - response.version, - true, - dto.trigger, - dto.trigger.triggerType, - dto.action, - dto.action.actionType); - }) - .do(() => { - this.analytics.trackEvent('Rule', 'Created', appName); - }) - .pretifyError('Failed to create rule. Please reload.'); + .map(response => { + const body = response.payload.body; + + return new RuleDto( + body.id, + user, + user, + now, + now, + response.version, + true, + dto.trigger, + dto.trigger.triggerType, + dto.action, + dto.action.actionType); + }) + .do(() => { + this.analytics.trackEvent('Rule', 'Created', appName); + }) + .pretifyError('Failed to create rule. Please reload.'); } public putRule(appName: string, id: string, dto: UpdateRuleDto, version: Version): Observable> { const url = this.apiUrl.buildUrl(`api/apps/${appName}/rules/${id}`); return HTTP.putVersioned(this.http, url, dto, version) - .do(() => { - this.analytics.trackEvent('Rule', 'Updated', appName); - }) - .pretifyError('Failed to update rule. Please reload.'); + .do(() => { + this.analytics.trackEvent('Rule', 'Updated', appName); + }) + .pretifyError('Failed to update rule. Please reload.'); } public enableRule(appName: string, id: string, version: Version): Observable> { const url = this.apiUrl.buildUrl(`api/apps/${appName}/rules/${id}/enable`); return HTTP.putVersioned(this.http, url, {}, version) - .do(() => { - this.analytics.trackEvent('Rule', 'Updated', appName); - }) - .pretifyError('Failed to enable rule. Please reload.'); + .do(() => { + this.analytics.trackEvent('Rule', 'Updated', appName); + }) + .pretifyError('Failed to enable rule. Please reload.'); } public disableRule(appName: string, id: string, version: Version): Observable> { const url = this.apiUrl.buildUrl(`api/apps/${appName}/rules/${id}/disable`); return HTTP.putVersioned(this.http, url, {}, version) - .do(() => { - this.analytics.trackEvent('Rule', 'Updated', appName); - }) - .pretifyError('Failed to disable rule. Please reload.'); + .do(() => { + this.analytics.trackEvent('Rule', 'Updated', appName); + }) + .pretifyError('Failed to disable rule. Please reload.'); } public deleteRule(appName: string, id: string, version: Version): Observable { const url = this.apiUrl.buildUrl(`api/apps/${appName}/rules/${id}`); return HTTP.deleteVersioned(this.http, url, version) - .do(() => { - this.analytics.trackEvent('Rule', 'Deleted', appName); - }) - .pretifyError('Failed to delete rule. Please reload.'); + .do(() => { + this.analytics.trackEvent('Rule', 'Deleted', appName); + }) + .pretifyError('Failed to delete rule. Please reload.'); } public getEvents(appName: string, take: number, skip: number): Observable { const url = this.apiUrl.buildUrl(`api/apps/${appName}/rules/events?take=${take}&skip=${skip}`); return HTTP.getVersioned(this.http, url) - .map(response => { - const body = response.payload.body; - - const items: any[] = body.items; - - return new RuleEventsDto(body.total, items.map(item => { - return new RuleEventDto( - item.id, - DateTime.parseISO_UTC(item.created), - item.nextAttempt ? DateTime.parseISO_UTC(item.nextAttempt) : null, - item.eventName, - item.description, - item.lastDump, - item.result, - item.jobResult, - item.numCalls); - })); - }) - .pretifyError('Failed to load events. Please reload.'); + .map(response => { + const body = response.payload.body; + + const items: any[] = body.items; + + return new RuleEventsDto(body.total, items.map(item => { + return new RuleEventDto( + item.id, + DateTime.parseISO_UTC(item.created), + item.nextAttempt ? DateTime.parseISO_UTC(item.nextAttempt) : null, + item.eventName, + item.description, + item.lastDump, + item.result, + item.jobResult, + item.numCalls); + })); + }) + .pretifyError('Failed to load events. Please reload.'); } public enqueueEvent(appName: string, id: string): Observable { const url = this.apiUrl.buildUrl(`api/apps/${appName}/rules/events/${id}`); return HTTP.putVersioned(this.http, url, {}) - .do(() => { - this.analytics.trackEvent('Rule', 'EventEnqueued', appName); - }) - .pretifyError('Failed to enqueue rule event. Please reload.'); + .do(() => { + this.analytics.trackEvent('Rule', 'EventEnqueued', appName); + }) + .pretifyError('Failed to enqueue rule event. Please reload.'); } } \ No newline at end of file diff --git a/src/Squidex/wwwroot/images/add-blog.png b/src/Squidex/wwwroot/images/add-blog.png new file mode 100644 index 0000000000000000000000000000000000000000..764e65cf1accd1538f5fd880b957f8d91e3a74bb GIT binary patch literal 5117 zcmV(TclmZTrzy@oitNOZ})Vwv@iMcB4XDu`CLLY;BPWtzsyZ7pZ_COUOR^ z%suZPch<}#nS^1P!te8$PtG~_oadhW?wRL2=XuUOBb-MRN~!+9Okg4~6u1y52w!dn z_5-_sjlgOVIeG@VnY~a-O;Jj{s+0<<^bt@>tx!r$IMe+<>!FnTxKe6;M@)MBN*!oW z>R_W%-ax0MuU1N3(%HS_bp2Cj8fad^5q^!OTHt&Uvdtv7xX!9ku$+yF(fiU4x zm^cKAoe7uQfcYZw>s0qU=ZIEH3Gi_E13NzzbW= z^vOUIxa}(Va%BRcpBIteL^2s8dg;<#Hb?K{H;R($fJ&e^&8B|f7;sonhYi>&N>?6BwaH z%?6oCSoJ7jnh@Hta^1!`HPw?g^suX6k0ciVHT{XN&=E`b%IUaXJX*Z)^Ect1NztPF zfs-Rz56QzoA%MVJ%C3EC*7)&_-IY^gwrK=*151}~*pTN8>Gy&9I_46%1Z4H9bz5p@ zRgYiU9ob5$GN20JXe%s#r@OuDK3@7ed|^z~?3Z|os*lVwCz5rxyIP2APV@^#E zNKS=0RaI>@)f2v}Bsdh<9xl#N7=Kv##->kqQ`~Go1K6+!f<`8K*g5<`*s?d8wE#1E zOmxs{Too1qB0rx|RrSG1_Ad#ur%XBIc3LNZEDIOeFj&@2vZKC;&3ikmmRW2{yw{{2 z6OGb_N0MTwjXjpr1?F6NrN`ZH!7ffAY<}kRVB)NP* zVJuxy26s(NuG8d!-~S`o^o!ijZZdpPw~4N-taNyky>#FE|JI8N&7RcPH;x{0MfINU z%F--`&*E=BwqwVRE-ch2*-;lcIty?dXb%3aj5%P%BFN45-OKQPC&aTv$*s{OtJy|Xrv@tDWwBJfPM8a=Y?c>WyP@cCX=k5;*r&`qAt07 z+0AfqZvcFq5}4Cs|yKJ)^(Gdz{9*$uDkOs>=FgWX3`%UyE^^v(sKz9XWgeB9)RFkOk! zI>kl3sTet$zI{u{bvjcvv{)?YddC_`M8jsY0npsi%m*Lr=dFKiqp3M&87gSeL~eX% z>-r9D<`iTDJf5o?->#~vifUt})GlDC0zUb)X?mrLD=&uUYR&X7-h>}@`dv$e(*~RF zjgq%LB_kuoRxJP?isY}Yxt1Gm_$L4!o}Zg3&}OBUf=xS% zIIlw@L`2n8PkK~S#(3cExJzZg?YrLFdrPFCY6$2jG3liXn+_9V5yT+yYQk;xf`%^u zmjKMYZZ1PExiEUIr3Fr$F#l$X=+;(fXfS1}uuZOM@U^>c=dvM}nFXRoxs;=WX)K1B zQ>)(G{^to53aJHN$MkdK@p?JYXb$Rr1#tC<9`lzruD{%Lt%k8yM2;ptUu9e$NzT1K znxv)09Lc8&UN1B?ff4pY=(@&J|MPuv9nlGQUU}t|o4b;;V1XF3t0(-vrh4Ku&2R66 zs5zj%d-%xlsGh&&laOOguV4EcW4@7nY5F4b>|L@s*`!x&%pw~gC7YTpsU0ohH!cz{)P@bK#N z+LjfW?$VuyyRIw1V^>4EJTHdgs?7*&I#N{&4yD@qM~0H*9^}4tN1(4Tmp|Nw4jJ#`H)An0I9Y$u8ioNG3|O z&ti-I10^MWqqRe6hTk&=-TD`k+MWhahKD9e1rcZX4 zvVof`;nu4XitiAS|BGazL|gPwG;I$rD9#jGTVvLU2z=|l`xrQ2keOFZd+*?hM|vVx zM4ktp1v9>P_axKL;Yd?wr$Vj`9{n`TAD^Iy9}|%mz zW3@&Zd7yl3)pb1-eIH@6!Svj{d<%SLRQF6js}47eHsga+Kb~;uG2p@W^-qIU*)xPf zrnM76VPPJRKk|4aD~SAj__*p%bXTs3C=t1rIGtUR2MvX_oZ9-*^7$-@->X5 z<>k}H?cBN6)m_;l@?)jc7GNRaC``WsbCljN+N{&!HTUEBLnfhp@=TSJ0_%V~MdZDX z?swLX=m^|y@WpL5{9Ns|jID@TMZ<9hf7VmkB2p(J6EXKhZvYY^iUm0^xCB043Z?l; zBpa9uqp2b?wKI|-3y20&g~TRDVZnnBQdAh-2sO8S+~mc>hSm0X1{aZ6MPxGO2B15D zmw-CV-9{0#0y}{vz->U8h)ffab?MwAD~MLgoE#&|^c=gDg+F)}O^bGao}PDNXZhGE zb1N!lr}p2b0TDSMBF~G+ToD-|BKZY7gh=B)2__eAumfd~{7fW6&Lzt&a{ zb-Vw?&boJSx!Q1hT!hkC)_S}iT3Xv^X=$Ogt(BJ6*3PQ$NAV+TF!%W#J63dym8=@k z5YyMWx#lN={Co$MV=kw1%;hI3U*UH9_~_^{-rco}RclxA{=WAkmoG$kGGKMxH=?rY z{&%--_-(p!vySKpTrN|UIGyI`&Q$bAM99s};nKlnTspXnYiG}(rPa;mzx;(oFZ`4? zR~tZoQSzG+<0fBk3us^7v146xS8}t$>gWi;pgBR-*PEl<e?drwWnSX#BS&-Y=h* z>)_ePpWy0Q(d~a1X+h)FVUs51btLmV(P_ZvGed37%`yMHh;YyR`CJnwTVSZ>)qdQO zjPpcy13n)#HpWJ`2;4pYHp+*a5nqANj~Y{zawlKLhzTZm<>?M)ZfL$=ERwwm&>g;&ErRlo(K5Yo`Vh7V>+gy$jFHHcmf@g3}6@v zuQy0@v!A0!-5fa3%JJhKJf2Y2j&`NYkXr<^XUvF>Y9;E9_VqJDw9RJe)`Gz>6s@g( zKKiJQLxRCgnr;crjIWom1&h;Z#pz5ACkKND zK3@o*FND_{!s|^vdfo0IUT+(H`Z&nVJ&CaNX@<{dsu2+=8#Ewx!Q2bDD3U$pD?^J# z!(!2*82(hHk+REL7Yu6;xu5dUInp?uJVARkRhU5Tm3XP zcI-OSG$A+FN`Ag+m83$iUN$rh>gyB9uCMoCx9eD~+2Jk7vB&M14@opMk&)i}yEup_ zVmBW??BeiYSBLfU^KBFtJCfSg*PlhPv@Q|*>c;P9%m~qWdDgTSEM9MrLxIsW^y{M^zEBy zStvzhBqB{!& z02CM7lcFr<+3krVIutSp1{D@dcG-Cu8_`O^@#7v^S^`ls&hHO#?3f#uEA;_0`T2=^ z$AdwIzuh?xcDtT5@_ikh*>e^nV??{%!IU8>rJ%7f^#o?O>q&0XRI0&hO&rx-E&0zz zWQ^#}{`o*4gz6v)+uq6K^Cio%S`!~e`-M+7AY(-9oxIDc>vR}DwAm875DX?0-ClK^ z(?mNQ)(-b-q>3d*&|Y<<+B>edd(+Y|vd{9!7|~X%MoEbyiEM|%l5*)C?SPipg;W}* zy-f44g6u*@&AYrjD>*qjE|gWNs}1i9LHGXV*%?>A&qJ zL-}JQwQ|jC(b80}1fT1$*`TN>el#l{ed_zs>w+wfub;4#sI07XxRhfLFi_Vue!cit z^ec`1Ku{=TZoCeKGWVuxwjuHkV*K2t6#V3WUu5aazY7pSqG0zoRh zJ})n?Tuy#oF&AHWQBwH-T!m8L@djAG>Cb%QJKy4;@BK4!X+MUgs&3obkJ`6MsQ_wg zYxRE}tbam~uSUu=O=I-PFd0P1xm{K@8TS(eVPZgkUjSfEu@tS=4O_0mvC&bc+C1IEbf{N!M=W00000NkvXXu0mjfTCW6I literal 0 HcmV?d00001 diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Apps/AppCommandMiddlewareTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Apps/AppCommandMiddlewareTests.cs index 4b82b2a2e..42223eaaa 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Apps/AppCommandMiddlewareTests.cs +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Apps/AppCommandMiddlewareTests.cs @@ -25,8 +25,6 @@ namespace Squidex.Domain.Apps.Entities.Apps private readonly IAppPlansProvider appPlansProvider = A.Fake(); private readonly IAppPlanBillingManager appPlansBillingManager = A.Fake(); private readonly IUserResolver userResolver = A.Fake(); - private readonly IAppTemplateBuilder templateBuilder1 = A.Fake(); - private readonly IAppTemplateBuilder templateBuilder2 = A.Fake(); private readonly Language language = Language.DE; private readonly string contributorId = Guid.NewGuid().ToString(); private readonly string clientName = "client"; @@ -47,13 +45,7 @@ namespace Squidex.Domain.Apps.Entities.Apps A.CallTo(() => userResolver.FindByIdAsync(contributorId)) .Returns(A.Fake()); - var templateBuilders = new[] - { - templateBuilder1, - templateBuilder2 - }; - - sut = new AppCommandMiddleware(Handler, appProvider, appPlansProvider, appPlansBillingManager, userResolver, templateBuilders); + sut = new AppCommandMiddleware(Handler, appProvider, appPlansProvider, appPlansBillingManager, userResolver); } [Fact] @@ -67,29 +59,6 @@ namespace Squidex.Domain.Apps.Entities.Apps }); Assert.Equal(AppId, context.Result>().IdOrValue); - - A.CallTo(() => templateBuilder1.PopulateTemplate(A.Ignored, A.Ignored, context.CommandBus)) - .MustNotHaveHappened(); - A.CallTo(() => templateBuilder2.PopulateTemplate(A.Ignored, A.Ignored, context.CommandBus)) - .MustNotHaveHappened(); - } - - [Fact] - public async Task Create_should_call_template_builders_with_template_name() - { - var context = CreateContextForCommand(new CreateApp { Name = AppName, AppId = AppId, Template = "Blog" }); - - await TestCreate(app, async _ => - { - await sut.HandleAsync(context); - }); - - Assert.Equal(AppId, context.Result>().IdOrValue); - - A.CallTo(() => templateBuilder1.PopulateTemplate(A.Ignored, "Blog", context.CommandBus)) - .MustHaveHappened(); - A.CallTo(() => templateBuilder2.PopulateTemplate(A.Ignored, "Blog", context.CommandBus)) - .MustHaveHappened(); } [Fact]