Browse Source

Tests for webhook service.

pull/95/head
Sebastian Stehle 8 years ago
parent
commit
5f3b103d66
  1. 1
      src/Squidex.Domain.Apps.Read/Schemas/WebhookSender.cs
  2. 15
      src/Squidex/Config/Domain/StoreMongoDbModule.cs
  3. 4
      src/Squidex/Controllers/Api/Webhooks/WebhooksController.cs
  4. 4
      src/Squidex/app/features/webhooks/pages/webhook-events-page.component.html
  5. 4
      src/Squidex/app/features/webhooks/pages/webhook-events-page.component.scss
  6. 66
      src/Squidex/app/shared/services/webhooks.service.spec.ts

1
src/Squidex.Domain.Apps.Read/Schemas/WebhookSender.cs

@ -81,6 +81,7 @@ namespace Squidex.Domain.Apps.Read.Schemas
}; };
request.Headers.Add("X-Signature", job.RequestSignature); request.Headers.Add("X-Signature", job.RequestSignature);
request.Headers.Add("User-Agent", "Squidex Webhook");
return request; return request;
} }

15
src/Squidex/Config/Domain/StoreMongoDbModule.cs

@ -143,7 +143,13 @@ namespace Squidex.Config.Domain
builder.RegisterType<MongoAppRepository>() builder.RegisterType<MongoAppRepository>()
.WithParameter(ResolvedParameter.ForNamed<IMongoDatabase>(MongoDatabaseRegistration)) .WithParameter(ResolvedParameter.ForNamed<IMongoDatabase>(MongoDatabaseRegistration))
.As<IAppRepository>() .As<IAppRepository>()
.As<IEventConsumer>() .As<IExternalSystem>()
.AsSelf()
.SingleInstance();
builder.RegisterType<MongoSchemaRepository>()
.WithParameter(ResolvedParameter.ForNamed<IMongoDatabase>(MongoDatabaseRegistration))
.As<ISchemaRepository>()
.As<IExternalSystem>() .As<IExternalSystem>()
.AsSelf() .AsSelf()
.SingleInstance(); .SingleInstance();
@ -172,13 +178,6 @@ namespace Squidex.Config.Domain
.AsSelf() .AsSelf()
.SingleInstance(); .SingleInstance();
builder.RegisterType<MongoSchemaRepository>()
.WithParameter(ResolvedParameter.ForNamed<IMongoDatabase>(MongoDatabaseRegistration))
.As<ISchemaRepository>()
.As<IEventConsumer>()
.As<IExternalSystem>()
.AsSelf()
.SingleInstance();
builder.Register(c => builder.Register(c =>
new CompoundEventConsumer( new CompoundEventConsumer(

4
src/Squidex/Controllers/Api/Webhooks/WebhooksController.cs

@ -99,9 +99,9 @@ namespace Squidex.Controllers.Api.Webhooks
await CommandBus.PublishAsync(command); await CommandBus.PublishAsync(command);
var response = SimpleMapper.Map(command, new WebhookCreatedDto { SchemaId = command.SchemaId.Id.ToString() }; var response = SimpleMapper.Map(command, new WebhookCreatedDto { SchemaId = command.SchemaId.Id.ToString() });
return CreatedAtAction(nameof(GetWebhooks), new { app }, response)); return CreatedAtAction(nameof(GetWebhooks), new { app }, response);
} }
/// <summary> /// <summary>

4
src/Squidex/app/features/webhooks/pages/webhook-events-page.component.html

@ -1,6 +1,6 @@
<sqx-title message="{app} | Webhooks Events" parameter1="app" value1="{{appName() | async}}"></sqx-title> <sqx-title message="{app} | Webhooks Events" parameter1="app" value1="{{appName() | async}}"></sqx-title>
<sqx-panel panelWidth="60rem"> <sqx-panel panelWidth="63rem">
<div class="panel-header"> <div class="panel-header">
<div class="panel-title-row"> <div class="panel-title-row">
<div class="float-right"> <div class="float-right">
@ -70,6 +70,8 @@
</tr> </tr>
<tr *ngIf="selectedEventId === event.id"> <tr *ngIf="selectedEventId === event.id">
<td colspan="5"> <td colspan="5">
<h3>Last Request</h3>
<div class="row event-stats"> <div class="row event-stats">
<div class="col-3"> <div class="col-3">
<span class="badge badge-small badge-{{event.result | lowercase}}">{{event.result}}</span> <span class="badge badge-small badge-{{event.result | lowercase}}">{{event.result}}</span>

4
src/Squidex/app/features/webhooks/pages/webhook-events-page.component.scss

@ -1,6 +1,10 @@
@import '_vars'; @import '_vars';
@import '_mixins'; @import '_mixins';
h3 {
margin-bottom: 1rem;
}
.badge { .badge {
& { & {
@include border-radius(12px); @include border-radius(12px);

66
src/Squidex/app/shared/services/webhooks.service.spec.ts

@ -11,8 +11,11 @@ import { inject, TestBed } from '@angular/core/testing';
import { import {
ApiUrlConfig, ApiUrlConfig,
CreateWebhookDto, CreateWebhookDto,
DateTime,
Version, Version,
WebhookDto, WebhookDto,
WebhookEventDto,
WebhookEventsDto,
WebhooksService WebhooksService
} from './../'; } from './../';
@ -99,16 +102,67 @@ describe('WebhooksService', () => {
expect(webhook).toEqual(new WebhookDto('id1', 'schema1', 'token1', dto.url, 0, 0, 0, 0)); expect(webhook).toEqual(new WebhookDto('id1', 'schema1', 'token1', dto.url, 0, 0, 0, 0));
})); }));
it('should make delete request to delete webhook', it('should make get request to get app webhook events',
inject([WebhooksService, HttpTestingController], (webhooksService: WebhooksService, httpMock: HttpTestingController) => { inject([WebhooksService, HttpTestingController], (webhooksService: WebhooksService, httpMock: HttpTestingController) => {
webhooksService.deleteWebhook('my-app', 'my-schema', '123', version).subscribe(); let webhooks: WebhookEventsDto | null = null;
const req = httpMock.expectOne('http://service/p/api/apps/my-app/schemas/my-schema/webhooks/123'); webhooksService.getEvents('my-app', 10, 20).subscribe(result => {
webhooks = result;
});
expect(req.request.method).toEqual('DELETE'); const req = httpMock.expectOne('http://service/p/api/apps/my-app/webhooks/events?take=10&skip=20');
expect(req.request.headers.get('If-Match')).toBe(version.value);
expect(req.request.method).toEqual('GET');
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,
requestUrl: 'url1',
result: 'Failed'
},
{
id: 'id2',
created: '2017-12-13T10:10',
eventName: 'event2',
nextAttempt: '2017-12-13T12:10',
jobResult: 'Failed',
lastDump: 'dump2',
numCalls: 2,
requestUrl: 'url2',
result: 'Failed'
}
]
});
expect(webhooks).toEqual(
new WebhookEventsDto(20, [
new WebhookEventDto('id1',
DateTime.parseISO_UTC('2017-12-12T10:10'),
DateTime.parseISO_UTC('2017-12-12T12:10'),
'event1', 'url1', 'dump1', 'Failed', 'Failed', 1),
new WebhookEventDto('id2',
DateTime.parseISO_UTC('2017-12-13T10:10'),
DateTime.parseISO_UTC('2017-12-13T12:10'),
'event2', 'url2', 'dump2', 'Failed', 'Failed', 2)
]));
}));
it('should make delete request to enqueue webhook event',
inject([WebhooksService, HttpTestingController], (webhooksService: WebhooksService, httpMock: HttpTestingController) => {
webhooksService.enqueueEvent('my-app', '123').subscribe();
const req = httpMock.expectOne('http://service/p/api/apps/my-app/webhooks/events/123');
req.flush({ id: 'id1', sharedSecret: 'token1' }); expect(req.request.method).toEqual('PUT');
})); }));
}); });
Loading…
Cancel
Save