mirror of https://github.com/Squidex/squidex.git
11 changed files with 188 additions and 8 deletions
@ -0,0 +1,62 @@ |
|||||
|
/* |
||||
|
* Squidex Headless CMS |
||||
|
* |
||||
|
* @license |
||||
|
* Copyright (c) Sebastian Stehle. All rights reserved |
||||
|
*/ |
||||
|
|
||||
|
import { Response, ResponseOptions } from '@angular/http'; |
||||
|
import { Observable } from 'rxjs'; |
||||
|
import { IMock, Mock, Times } from 'typemoq'; |
||||
|
|
||||
|
import { |
||||
|
ApiUrlConfig, |
||||
|
AuthService, |
||||
|
DateTime, |
||||
|
UsageDto, |
||||
|
UsagesService |
||||
|
} from './../'; |
||||
|
|
||||
|
describe('UsagesService', () => { |
||||
|
let authService: IMock<AuthService>; |
||||
|
let usagesService: UsagesService; |
||||
|
|
||||
|
beforeEach(() => { |
||||
|
authService = Mock.ofType(AuthService); |
||||
|
usagesService = new UsagesService(authService.object, new ApiUrlConfig('http://service/p/')); |
||||
|
}); |
||||
|
|
||||
|
it('should make get request to get usages', () => { |
||||
|
authService.setup(x => x.authGet('http://service/p/api/apps/my-app/usages/2017-10-12/2017-10-13')) |
||||
|
.returns(() => Observable.of( |
||||
|
new Response( |
||||
|
new ResponseOptions({ |
||||
|
body: [{ |
||||
|
date: '2017-10-12', |
||||
|
count: 1, |
||||
|
averageMs: 130 |
||||
|
}, { |
||||
|
date: '2017-10-13', |
||||
|
count: 13, |
||||
|
averageMs: 170 |
||||
|
}] |
||||
|
}) |
||||
|
) |
||||
|
)) |
||||
|
.verifiable(Times.once()); |
||||
|
|
||||
|
let usages: UsageDto[] | null = null; |
||||
|
|
||||
|
usagesService.getUsages('my-app', DateTime.parseISO_UTC('2017-10-12'), DateTime.parseISO_UTC('2017-10-13')).subscribe(result => { |
||||
|
usages = result; |
||||
|
}).unsubscribe(); |
||||
|
|
||||
|
expect(usages).toEqual( |
||||
|
[ |
||||
|
new UsageDto(DateTime.parseISO_UTC('2017-10-12'), 1, 130), |
||||
|
new UsageDto(DateTime.parseISO_UTC('2017-10-13'), 13, 170) |
||||
|
]); |
||||
|
|
||||
|
authService.verifyAll(); |
||||
|
}); |
||||
|
}); |
||||
@ -0,0 +1,50 @@ |
|||||
|
/* |
||||
|
* Squidex Headless CMS |
||||
|
* |
||||
|
* @license |
||||
|
* Copyright (c) Sebastian Stehle. All rights reserved |
||||
|
*/ |
||||
|
|
||||
|
import { Injectable } from '@angular/core'; |
||||
|
import { Observable } from 'rxjs'; |
||||
|
|
||||
|
import 'framework/angular/http-extensions'; |
||||
|
|
||||
|
import { ApiUrlConfig, DateTime } from 'framework'; |
||||
|
import { AuthService } from './auth.service'; |
||||
|
|
||||
|
export class UsageDto { |
||||
|
constructor( |
||||
|
public readonly date: DateTime, |
||||
|
public readonly count: number, |
||||
|
public readonly averageMs: number |
||||
|
) { |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@Injectable() |
||||
|
export class UsagesService { |
||||
|
constructor( |
||||
|
private readonly authService: AuthService, |
||||
|
private readonly apiUrl: ApiUrlConfig |
||||
|
) { |
||||
|
} |
||||
|
|
||||
|
public getUsages(app: string, fromDate: DateTime, toDate: DateTime): Observable<UsageDto[]> { |
||||
|
const url = this.apiUrl.buildUrl(`api/apps/${app}/usages/${fromDate.toStringFormat('YYYY-MM-DD')}/${toDate.toStringFormat('YYYY-MM-DD')}`); |
||||
|
|
||||
|
return this.authService.authGet(url) |
||||
|
.map(response => response.json()) |
||||
|
.map(response => { |
||||
|
const items: any[] = response; |
||||
|
|
||||
|
return items.map(item => { |
||||
|
return new UsageDto( |
||||
|
DateTime.parseISO_UTC(item.date), |
||||
|
item.count, |
||||
|
item.averageMs); |
||||
|
}); |
||||
|
}) |
||||
|
.catchError('Failed to load usage. Please reload.'); |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue