diff --git a/src/Squidex/Areas/Api/Controllers/Rules/Models/RuleEventDto.cs b/src/Squidex/Areas/Api/Controllers/Rules/Models/RuleEventDto.cs index 201e3dadd..a513495ab 100644 --- a/src/Squidex/Areas/Api/Controllers/Rules/Models/RuleEventDto.cs +++ b/src/Squidex/Areas/Api/Controllers/Rules/Models/RuleEventDto.cs @@ -80,7 +80,10 @@ namespace Squidex.Areas.Api.Controllers.Rules.Models AddPutLink("update", controller.Url(x => nameof(x.PutEvent), values)); - AddDeleteLink("delete", controller.Url(x => nameof(x.DeleteEvent), values)); + if (NextAttempt.HasValue) + { + AddDeleteLink("delete", controller.Url(x => nameof(x.DeleteEvent), values)); + } return this; } diff --git a/src/Squidex/app/shared/services/rules.service.spec.ts b/src/Squidex/app/shared/services/rules.service.spec.ts index 399580e53..99c00490a 100644 --- a/src/Squidex/app/shared/services/rules.service.spec.ts +++ b/src/Squidex/app/shared/services/rules.service.spec.ts @@ -288,41 +288,15 @@ describe('RulesService', () => { req.flush({ total: 20, items: [ - { - id: 'id1', - created: '2017-12-12T10:10', - eventName: 'event1', - nextAttempt: '2017-12-12T12:10', - jobResult: 'Failed', - lastDump: 'dump1', - numCalls: 1, - description: 'url1', - result: 'Failed' - }, - { - id: 'id2', - created: '2017-12-13T10:10', - eventName: 'event2', - nextAttempt: '2017-12-13T12:10', - jobResult: 'Failed', - lastDump: 'dump2', - numCalls: 2, - description: 'url2', - result: 'Failed' - } + ruleEventResponse(1), + ruleEventResponse(2) ] }); expect(rules!).toEqual( new RuleEventsDto(20, [ - new RuleEventDto('id1', - DateTime.parseISO_UTC('2017-12-12T10:10'), - DateTime.parseISO_UTC('2017-12-12T12:10'), - 'event1', 'url1', 'dump1', 'Failed', 'Failed', 1), - new RuleEventDto('id2', - DateTime.parseISO_UTC('2017-12-13T10:10'), - DateTime.parseISO_UTC('2017-12-13T12:10'), - 'event2', 'url2', 'dump2', 'Failed', 'Failed', 2) + createRuleEvent(1), + createRuleEvent(2) ])); })); @@ -364,6 +338,23 @@ describe('RulesService', () => { req.flush({}); })); + function ruleEventResponse(id: number, suffix = '') { + return { + id: `id${id}`, + created: `${id % 1000 + 2000}-12-12T10:10:00`, + eventName: `event${id}${suffix}`, + nextAttempt: `${id % 1000 + 2000}-11-11T10:10`, + jobResult: `Failed${id}${suffix}`, + lastDump: `dump${id}${suffix}`, + numCalls: id, + description: `url${id}${suffix}`, + result: `Failed${id}${suffix}`, + _links: { + update: { method: 'PUT', href: `/rules/events/${id}` } + } + }; + } + function ruleResponse(id: number, suffix = '') { return { id: `id${id}`, @@ -390,6 +381,22 @@ describe('RulesService', () => { } }); +export function createRuleEvent(id: number, suffix = '') { + const links: ResourceLinks = { + update: { method: 'PUT', href: `/rules/events/${id}` } + }; + + return new RuleEventDto(links, `id${id}`, + DateTime.parseISO_UTC(`${id % 1000 + 2000}-12-12T10:10:00`), + DateTime.parseISO_UTC(`${id % 1000 + 2000}-11-11T10:10:00`), + `event${id}${suffix}`, + `url${id}${suffix}`, + `dump${id}${suffix}`, + `Failed${id}${suffix}`, + `Failed${id}${suffix}`, + id); +} + export function createRule(id: number, suffix = '') { const links: ResourceLinks = { update: { method: 'PUT', href: `/rules/${id}` } diff --git a/src/Squidex/app/shared/services/rules.service.ts b/src/Squidex/app/shared/services/rules.service.ts index bd44ae278..5c42f7dec 100644 --- a/src/Squidex/app/shared/services/rules.service.ts +++ b/src/Squidex/app/shared/services/rules.service.ts @@ -127,7 +127,10 @@ export class RuleEventsDto extends ResultSet { export class RuleEventDto extends Model { public readonly _links: ResourceLinks; - constructor( + public readonly canDelete: boolean; + public readonly canUpdate: boolean; + + constructor(links: ResourceLinks, public readonly id: string, public readonly created: DateTime, public readonly nextAttempt: DateTime | null, @@ -139,6 +142,11 @@ export class RuleEventDto extends Model { public readonly numCalls: number ) { super(); + + this._links = links; + + this.canDelete = hasAnyLink(links, 'delete'); + this.canUpdate = hasAnyLink(links, 'update'); } } @@ -287,7 +295,7 @@ export class RulesService { const items: any[] = body.items; const ruleEvents = new RuleEventsDto(body.total, items.map(item => - new RuleEventDto( + new RuleEventDto(item._links, item.id, DateTime.parseISO_UTC(item.created), item.nextAttempt ? DateTime.parseISO_UTC(item.nextAttempt) : null, diff --git a/src/Squidex/app/shared/state/rule-events.state.spec.ts b/src/Squidex/app/shared/state/rule-events.state.spec.ts index 5adcd6f4a..cd0ebcab6 100644 --- a/src/Squidex/app/shared/state/rule-events.state.spec.ts +++ b/src/Squidex/app/shared/state/rule-events.state.spec.ts @@ -9,14 +9,14 @@ import { of } from 'rxjs'; import { IMock, It, Mock, Times } from 'typemoq'; import { - DateTime, DialogService, - RuleEventDto, RuleEventsDto, RuleEventsState, RulesService } from '@app/shared/internal'; +import { createRuleEvent } from '../services/rules.service.spec'; + import { TestValues } from './_test-helpers'; describe('RuleEventsState', () => { @@ -26,8 +26,8 @@ describe('RuleEventsState', () => { } = TestValues; const oldRuleEvents = [ - new RuleEventDto('id1', DateTime.now(), null, 'event1', 'description', 'dump1', 'result1', 'result1', 1), - new RuleEventDto('id2', DateTime.now(), null, 'event2', 'description', 'dump2', 'result2', 'result2', 2) + createRuleEvent(1), + createRuleEvent(2) ]; let dialogs: IMock;