Browse Source

Fix cancel and enqueue rules.

pull/364/head^2
Sebastian Stehle 7 years ago
parent
commit
2750c74b73
  1. 5
      src/Squidex/Areas/Api/Controllers/Rules/Models/RuleEventDto.cs
  2. 67
      src/Squidex/app/shared/services/rules.service.spec.ts
  3. 12
      src/Squidex/app/shared/services/rules.service.ts
  4. 8
      src/Squidex/app/shared/state/rule-events.state.spec.ts

5
src/Squidex/Areas/Api/Controllers/Rules/Models/RuleEventDto.cs

@ -80,7 +80,10 @@ namespace Squidex.Areas.Api.Controllers.Rules.Models
AddPutLink("update", controller.Url<RulesController>(x => nameof(x.PutEvent), values)); AddPutLink("update", controller.Url<RulesController>(x => nameof(x.PutEvent), values));
AddDeleteLink("delete", controller.Url<RulesController>(x => nameof(x.DeleteEvent), values)); if (NextAttempt.HasValue)
{
AddDeleteLink("delete", controller.Url<RulesController>(x => nameof(x.DeleteEvent), values));
}
return this; return this;
} }

67
src/Squidex/app/shared/services/rules.service.spec.ts

@ -288,41 +288,15 @@ describe('RulesService', () => {
req.flush({ req.flush({
total: 20, total: 20,
items: [ items: [
{ ruleEventResponse(1),
id: 'id1', ruleEventResponse(2)
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'
}
] ]
}); });
expect(rules!).toEqual( expect(rules!).toEqual(
new RuleEventsDto(20, [ new RuleEventsDto(20, [
new RuleEventDto('id1', createRuleEvent(1),
DateTime.parseISO_UTC('2017-12-12T10:10'), createRuleEvent(2)
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)
])); ]));
})); }));
@ -364,6 +338,23 @@ describe('RulesService', () => {
req.flush({}); 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 = '') { function ruleResponse(id: number, suffix = '') {
return { return {
id: `id${id}`, 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 = '') { export function createRule(id: number, suffix = '') {
const links: ResourceLinks = { const links: ResourceLinks = {
update: { method: 'PUT', href: `/rules/${id}` } update: { method: 'PUT', href: `/rules/${id}` }

12
src/Squidex/app/shared/services/rules.service.ts

@ -127,7 +127,10 @@ export class RuleEventsDto extends ResultSet<RuleEventDto> {
export class RuleEventDto extends Model<RuleEventDto> { export class RuleEventDto extends Model<RuleEventDto> {
public readonly _links: ResourceLinks; public readonly _links: ResourceLinks;
constructor( public readonly canDelete: boolean;
public readonly canUpdate: boolean;
constructor(links: ResourceLinks,
public readonly id: string, public readonly id: string,
public readonly created: DateTime, public readonly created: DateTime,
public readonly nextAttempt: DateTime | null, public readonly nextAttempt: DateTime | null,
@ -139,6 +142,11 @@ export class RuleEventDto extends Model<RuleEventDto> {
public readonly numCalls: number public readonly numCalls: number
) { ) {
super(); 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 items: any[] = body.items;
const ruleEvents = new RuleEventsDto(body.total, items.map(item => const ruleEvents = new RuleEventsDto(body.total, items.map(item =>
new RuleEventDto( new RuleEventDto(item._links,
item.id, item.id,
DateTime.parseISO_UTC(item.created), DateTime.parseISO_UTC(item.created),
item.nextAttempt ? DateTime.parseISO_UTC(item.nextAttempt) : null, item.nextAttempt ? DateTime.parseISO_UTC(item.nextAttempt) : null,

8
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 { IMock, It, Mock, Times } from 'typemoq';
import { import {
DateTime,
DialogService, DialogService,
RuleEventDto,
RuleEventsDto, RuleEventsDto,
RuleEventsState, RuleEventsState,
RulesService RulesService
} from '@app/shared/internal'; } from '@app/shared/internal';
import { createRuleEvent } from '../services/rules.service.spec';
import { TestValues } from './_test-helpers'; import { TestValues } from './_test-helpers';
describe('RuleEventsState', () => { describe('RuleEventsState', () => {
@ -26,8 +26,8 @@ describe('RuleEventsState', () => {
} = TestValues; } = TestValues;
const oldRuleEvents = [ const oldRuleEvents = [
new RuleEventDto('id1', DateTime.now(), null, 'event1', 'description', 'dump1', 'result1', 'result1', 1), createRuleEvent(1),
new RuleEventDto('id2', DateTime.now(), null, 'event2', 'description', 'dump2', 'result2', 'result2', 2) createRuleEvent(2)
]; ];
let dialogs: IMock<DialogService>; let dialogs: IMock<DialogService>;

Loading…
Cancel
Save