diff --git a/goofy-client/libs/tech-shared/src/lib/http.util.spec.ts b/goofy-client/libs/tech-shared/src/lib/http.util.spec.ts index 37c41f47dd3d0ea70786f1f4a8d8bf267ad65fd3..7cd5a260d835bd9e8759540ab8d10863ec6850f5 100644 --- a/goofy-client/libs/tech-shared/src/lib/http.util.spec.ts +++ b/goofy-client/libs/tech-shared/src/lib/http.util.spec.ts @@ -1,14 +1,16 @@ import { HttpStatusCode } from '@angular/common/http'; -import { isChangingDataRequest, isForbidden, isServerError, isUnauthorized, isUnprocessableEntity } from './http.util'; +import { HttpMethod, isConnectionTimeout } from '..'; +import { isChangingDataRequest, isForbidden, isServerError, isServiceUnavailable, isUnauthorized, isUnprocessableEntity } from './http.util'; describe('http util', () => { const SERVER_ERROR_CODES: HttpStatusCode[] = [500, 501, 505, 506, 507, 508, 510, 511]; const CONNECTION_TIMEOUT_CODES: HttpStatusCode[] = [502, 503, 504]; + const CLIENT_ERROR: HttpStatusCode[] = [400, 401, 402, 403, 404, 422]; describe('isForbidden', () => { - it.each([400, 401, 402, 404, 422].concat(SERVER_ERROR_CODES)) + it.each(CLIENT_ERROR.slice(HttpStatusCode.Forbidden).concat(SERVER_ERROR_CODES)) ('should be false on %i', (httpStatusCode: HttpStatusCode) => { var result: boolean = isForbidden(httpStatusCode); @@ -24,7 +26,7 @@ describe('http util', () => { describe('isUnauthorized', () => { - it.each([400, 402, 403, 404, 422].concat(SERVER_ERROR_CODES)) + it.each(CLIENT_ERROR.slice(HttpStatusCode.Unauthorized).concat(SERVER_ERROR_CODES)) ('should be false on %i', (httpStatusCode: HttpStatusCode) => { var result: boolean = isUnauthorized(httpStatusCode); @@ -47,7 +49,7 @@ describe('http util', () => { expect(result).toBeTruthy(); }); - it.each([400, 401, 402, 403, 404, 422].concat(CONNECTION_TIMEOUT_CODES)) + it.each(CLIENT_ERROR.concat(CONNECTION_TIMEOUT_CODES)) ('should be false on %i', () => { var result: boolean = isServerError(HttpStatusCode.Forbidden); @@ -57,33 +59,66 @@ describe('http util', () => { describe('isUnprocessableEntity', () => { - it.each([400, 401, 402, 401, 404].concat(SERVER_ERROR_CODES)) + it.each(CLIENT_ERROR.slice(HttpStatusCode.UnprocessableEntity).concat(SERVER_ERROR_CODES).concat(SERVER_ERROR_CODES)) ('should be false on %i', (httpStatusCode: HttpStatusCode) => { var result: boolean = isUnprocessableEntity(httpStatusCode); expect(result).toBeFalsy(); }); - it.each([422]) - ('should be true on %i', () => { - var result: boolean = isUnprocessableEntity(HttpStatusCode.UnprocessableEntity); + it('should be true on %i', () => { + var result: boolean = isUnprocessableEntity(HttpStatusCode.UnprocessableEntity); - expect(result).toBeTruthy(); - }) + expect(result).toBeTruthy(); + }) }) describe('isChangingDataRequest', () => { - it.each(['POST', 'PUT', 'PATCH', 'DELETE']) + const CHANGING_DATA_REQUEST_METHOD: string[] = [HttpMethod.POST, HttpMethod.PUT, HttpMethod.PATCH, HttpMethod.DELETE]; + + it.each(CHANGING_DATA_REQUEST_METHOD) ('should return true on %i', (method: string) => { var result: boolean = isChangingDataRequest(<any>{ method }); expect(result).toBeTruthy(); }) - it.each(['GET']) - ('should return false on %i', (method: string) => { - var result: boolean = isChangingDataRequest(<any>{ method }); + it('should return false on %i', () => { + var result: boolean = isChangingDataRequest(<any>{ method: HttpMethod.GET }); + + expect(result).toBeFalsy(); + }) + }) + + describe('isConnectionTimeout', () => { + + it.each(CONNECTION_TIMEOUT_CODES) + ('should return true on %i', (statusCode: number) => { + var result: boolean = isConnectionTimeout(statusCode); + + expect(result).toBeTruthy(); + }) + + it.each(SERVER_ERROR_CODES) + ('should return false on %i', (statusCode: number) => { + var result: boolean = isConnectionTimeout(statusCode); + + expect(result).toBeFalsy(); + }) + }) + + describe('isServiceUnavailable', () => { + + it('should return true on %i', () => { + var result: boolean = isServiceUnavailable(HttpStatusCode.ServiceUnavailable); + + expect(result).toBeTruthy(); + }) + + it.each(SERVER_ERROR_CODES.concat(CONNECTION_TIMEOUT_CODES.slice(HttpStatusCode.ServiceUnavailable))) + ('should return false on %i', (statusCode: number) => { + var result: boolean = isServiceUnavailable(statusCode); expect(result).toBeFalsy(); }) diff --git a/goofy-client/libs/tech-shared/src/lib/http.util.ts b/goofy-client/libs/tech-shared/src/lib/http.util.ts index 70573c1a13f52ee24118e96b2a71f110e55d9d6a..1b95517893694a17ab0ca8433a6a0d8cbd1489d0 100644 --- a/goofy-client/libs/tech-shared/src/lib/http.util.ts +++ b/goofy-client/libs/tech-shared/src/lib/http.util.ts @@ -1,4 +1,5 @@ import { HttpRequest, HttpStatusCode } from '@angular/common/http'; +import { HttpMethod } from './tech.model'; export function isForbidden(status: HttpStatusCode): boolean { return status == HttpStatusCode.Forbidden; @@ -24,7 +25,7 @@ function isBadGateway(status: HttpStatusCode): boolean { return status == HttpStatusCode.BadGateway; } -function isServiceUnavailable(status: HttpStatusCode): boolean { +export function isServiceUnavailable(status: HttpStatusCode): boolean { return status == HttpStatusCode.ServiceUnavailable; } @@ -32,8 +33,12 @@ function isGatewayTimeout(status: HttpStatusCode): boolean { return status == HttpStatusCode.GatewayTimeout; } +export function isNotFound(status: HttpStatusCode): boolean { + return status == HttpStatusCode.NotFound; +} + export function isChangingDataRequest(request: HttpRequest<unknown>): boolean { - return request.method === 'POST' || request.method === 'PUT' || request.method === 'PATCH' || request.method === 'DELETE' + return request.method === HttpMethod.POST || request.method === HttpMethod.PUT || request.method === HttpMethod.PATCH || request.method === HttpMethod.DELETE; } export function existRequestHeader(request: HttpRequest<unknown>, key: string) { diff --git a/goofy-client/libs/tech-shared/src/lib/tech.model.ts b/goofy-client/libs/tech-shared/src/lib/tech.model.ts index 2698480b381540ad053a07b1685b0d3591238848..38bccd86db871a6c5be445a1989b75736487b258 100644 --- a/goofy-client/libs/tech-shared/src/lib/tech.model.ts +++ b/goofy-client/libs/tech-shared/src/lib/tech.model.ts @@ -14,3 +14,11 @@ export interface IssueParam { name: string, value: string; } + +export enum HttpMethod { + POST = 'POST', + PUT = 'PUT', + PATCH = 'PATCH', + DELETE = 'DELETE', + GET = 'GET' +} \ No newline at end of file