diff options
author | crupest <crupest@outlook.com> | 2019-03-11 00:14:48 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2019-03-11 00:14:48 +0800 |
commit | 92cd9a980075fa482bd7f67412c618e54ac9501c (patch) | |
tree | 3cc369a51013e4f2e220aaf3ec32ed74104ad808 /Timeline/ClientApp | |
parent | f8cfca136a69c6589bb610a66ea5342fc585f19b (diff) | |
download | timeline-92cd9a980075fa482bd7f67412c618e54ac9501c.tar.gz timeline-92cd9a980075fa482bd7f67412c618e54ac9501c.tar.bz2 timeline-92cd9a980075fa482bd7f67412c618e54ac9501c.zip |
Extract out http entities.
Diffstat (limited to 'Timeline/ClientApp')
6 files changed, 33 insertions, 25 deletions
diff --git a/Timeline/ClientApp/src/app/todo/todo-service/http-entities.ts b/Timeline/ClientApp/src/app/todo/todo-service/http-entities.ts new file mode 100644 index 00000000..3971617c --- /dev/null +++ b/Timeline/ClientApp/src/app/todo/todo-service/http-entities.ts @@ -0,0 +1,11 @@ +export const githubBaseUrl = 'https://api.github.com/repos/crupest/Timeline'; + +export interface IssueResponseItem { + number: number; + title: string; + state: string; + html_url: string; + pull_request?: any; +} + +export type IssueResponse = IssueResponseItem[]; diff --git a/Timeline/ClientApp/src/app/todo/todo-service/todo.service.spec.ts b/Timeline/ClientApp/src/app/todo/todo-service/todo.service.spec.ts index b0b35f7b..679dc8b7 100644 --- a/Timeline/ClientApp/src/app/todo/todo-service/todo.service.spec.ts +++ b/Timeline/ClientApp/src/app/todo/todo-service/todo.service.spec.ts @@ -3,7 +3,8 @@ import { HttpClientTestingModule, HttpTestingController } from '@angular/common/ import { toArray } from 'rxjs/operators'; import { TodoItem } from '../todo-item'; -import { TodoService, IssueResponse } from './todo.service'; +import { TodoService } from './todo.service'; +import { IssueResponse, githubBaseUrl } from './http-entities'; describe('TodoService', () => { @@ -19,8 +20,6 @@ describe('TodoService', () => { it('should work well', () => { const service: TodoService = TestBed.get(TodoService); - const baseUrl = service.baseUrl; - const mockIssueList: IssueResponse = [{ number: 1, title: 'Issue title 1', @@ -47,7 +46,8 @@ describe('TodoService', () => { const httpController: HttpTestingController = TestBed.get(HttpTestingController); - httpController.expectOne(request => request.url === baseUrl + '/issues' && request.params.get('state') === 'all').flush(mockIssueList); + httpController.expectOne(request => request.url === githubBaseUrl + '/issues' && + request.params.get('state') === 'all').flush(mockIssueList); httpController.verify(); }); diff --git a/Timeline/ClientApp/src/app/todo/todo-service/todo.service.ts b/Timeline/ClientApp/src/app/todo/todo-service/todo.service.ts index ed1f2cbe..df63636d 100644 --- a/Timeline/ClientApp/src/app/todo/todo-service/todo.service.ts +++ b/Timeline/ClientApp/src/app/todo/todo-service/todo.service.ts @@ -3,29 +3,19 @@ import { HttpClient } from '@angular/common/http'; import { Observable, from } from 'rxjs'; import { switchMap, map, filter } from 'rxjs/operators'; +import { IssueResponse, githubBaseUrl } from './http-entities'; import { TodoItem } from '../todo-item'; -export interface IssueResponseItem { - number: number; - title: string; - state: string; - html_url: string; - pull_request?: any; -} - -export type IssueResponse = IssueResponseItem[]; @Injectable({ providedIn: 'root' }) export class TodoService { - readonly baseUrl = 'https://api.github.com/repos/crupest/Timeline'; - constructor(private client: HttpClient) { } getWorkItemList(): Observable<TodoItem> { - return this.client.get<IssueResponse>(`${this.baseUrl}/issues`, { + return this.client.get<IssueResponse>(`${githubBaseUrl}/issues`, { params: { state: 'all' } diff --git a/Timeline/ClientApp/src/app/user/internal-user-service/http-entities.ts b/Timeline/ClientApp/src/app/user/internal-user-service/http-entities.ts index 1335b407..5664cf7c 100644 --- a/Timeline/ClientApp/src/app/user/internal-user-service/http-entities.ts +++ b/Timeline/ClientApp/src/app/user/internal-user-service/http-entities.ts @@ -1,5 +1,8 @@ import { UserCredentials, UserInfo } from '../entities'; +export const createTokenUrl = '/api/User/CreateToken'; +export const validateTokenUrl = '/api/User/ValidateToken'; + export type CreateTokenRequest = UserCredentials; export interface CreateTokenResponse { diff --git a/Timeline/ClientApp/src/app/user/internal-user-service/internal-user.service.spec.ts b/Timeline/ClientApp/src/app/user/internal-user-service/internal-user.service.spec.ts index 8aadd873..4db28768 100644 --- a/Timeline/ClientApp/src/app/user/internal-user-service/internal-user.service.spec.ts +++ b/Timeline/ClientApp/src/app/user/internal-user-service/internal-user.service.spec.ts @@ -4,12 +4,13 @@ import { HttpClientTestingModule, HttpTestingController } from '@angular/common/ import { Router } from '@angular/router'; import { UserInfo, UserCredentials } from '../entities'; -import { CreateTokenRequest, CreateTokenResponse, ValidateTokenRequest, ValidateTokenResponse } from './http-entities'; +import { + createTokenUrl, validateTokenUrl, CreateTokenRequest, + CreateTokenResponse, ValidateTokenRequest, ValidateTokenResponse +} from './http-entities'; import { InternalUserService, UserLoginState } from './internal-user.service'; describe('InternalUserService', () => { - const tokenCreateUrl = '/api/User/CreateToken'; - const mockUserCredentials: UserCredentials = { username: 'user', password: 'user' @@ -48,7 +49,7 @@ describe('InternalUserService', () => { const httpController = TestBed.get(HttpTestingController) as HttpTestingController; httpController.expectOne((request: HttpRequest<CreateTokenRequest>) => - request.url === tokenCreateUrl && + request.url === createTokenUrl && request.body.username === 'user' && request.body.password === 'user').flush(<CreateTokenResponse>{ token: 'test-token', @@ -72,7 +73,7 @@ describe('InternalUserService', () => { const mockToken = 'mock-token'; const tokenValidateRequestMatcher = (req: HttpRequest<ValidateTokenRequest>) => { - return req.url === '/api/User/ValidateToken' && req.body.token === mockToken; + return req.url === validateTokenUrl && req.body.token === mockToken; }; beforeEach(() => { @@ -81,7 +82,7 @@ describe('InternalUserService', () => { service.tryLogin(mockUserCredentials).subscribe(); // subscribe to activate login - httpController.expectOne(tokenCreateUrl).flush(<CreateTokenResponse>{ + httpController.expectOne(createTokenUrl).flush(<CreateTokenResponse>{ token: mockToken, userInfo: mockUserInfo }); diff --git a/Timeline/ClientApp/src/app/user/internal-user-service/internal-user.service.ts b/Timeline/ClientApp/src/app/user/internal-user-service/internal-user.service.ts index f6987d7d..91a67e5b 100644 --- a/Timeline/ClientApp/src/app/user/internal-user-service/internal-user.service.ts +++ b/Timeline/ClientApp/src/app/user/internal-user-service/internal-user.service.ts @@ -6,7 +6,10 @@ import { Observable, of, throwError, BehaviorSubject } from 'rxjs'; import { map, catchError, retry } from 'rxjs/operators'; import { AlreadyLoginError, BadCredentialsError, BadNetworkError, UnknownError } from './errors'; -import { CreateTokenRequest, CreateTokenResponse, ValidateTokenRequest, ValidateTokenResponse } from './http-entities'; +import { + createTokenUrl, validateTokenUrl, CreateTokenRequest, + CreateTokenResponse, ValidateTokenRequest, ValidateTokenResponse +} from './http-entities'; import { UserCredentials, UserInfo } from '../entities'; @@ -46,7 +49,7 @@ export class InternalUserService { return of(<UserLoginState>'nologin'); } - return this.httpClient.post<ValidateTokenResponse>('/api/User/ValidateToken', <ValidateTokenRequest>{ token: this.token }).pipe( + return this.httpClient.post<ValidateTokenResponse>(validateTokenUrl, <ValidateTokenRequest>{ token: this.token }).pipe( retry(3), catchError(error => { console.error('Failed to validate token.'); @@ -70,7 +73,7 @@ export class InternalUserService { return throwError(new AlreadyLoginError()); } - return this.httpClient.post<CreateTokenResponse>('/api/User/CreateToken', <CreateTokenRequest>credentials).pipe( + return this.httpClient.post<CreateTokenResponse>(createTokenUrl, <CreateTokenRequest>credentials).pipe( catchError((error: HttpErrorResponse) => { if (error.error instanceof ErrorEvent) { console.error('An error occurred when login: ' + error.error.message); |