All files / src/template/page error.ts

14.29% Statements 3/21
0% Branches 0/5
0% Functions 0/7
14.29% Lines 3/21

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78  2x 2x                                                                                                                                                   2x  
import HttpError from 'http/error';
import StatusCode from 'http/enum/status-code';
import PageTemplate, { Breadcrumb, PageTemplateInput } from 'template/page';
 
interface Input extends PageTemplateInput {
	readonly error: HttpError;
}
 
class ErrorPageTemplate extends PageTemplate<Input> {
	protected getContentTitle(): string {
		const status_code = this.getStatusCode();
		const message = this.getErrorMessage();
 
		return `${status_code}: ${message}`;
	}
 
	protected getBreadcrumbs(): Breadcrumb[] {
		return [
			{
				label: 'Home',
				url: '/'
			},
			{
				label: 'Error'
			}
		];
	}
 
	protected getContentHtml(): string {
		const description = this.getErrorDescription();
 
		return `
			<p>
				${description}
			</p>
		`;
	}
 
	private getErrorDescription(): string {
		const status_code = this.getStatusCode();
 
		switch (status_code) {
			case StatusCode.FILE_NOT_FOUND:
				return 'The specified resource was not found on this server.';
			case StatusCode.UNAUTHORIZED:
				return 'You do not have permission to perform this request.';
			case StatusCode.BAD_REQUEST:
				return 'You tried to perform an invalid request.';
			case StatusCode.SERVER_ERROR:
			default:
				return `
					An unexpected problem occurred that prevented the request from
					completing successfully.
				`;
		}
	}
 
	private getErrorMessage(): string {
		const error = this.getError();
 
		return error.message;
	}
 
	private getStatusCode(): StatusCode {
		const error = this.getError();
 
		return error.status_code;
	}
 
	private getError(): HttpError {
		const input = this.getInput();
 
		return input.error;
	}
}
 
export default ErrorPageTemplate;