60 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			60 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| 
								 | 
							
								import {PreviewServerError} from '../../lib/preview-server/preview-error';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Matchers
							 | 
						||
| 
								 | 
							
								const toBeRejectedWithPreviewServerError: jasmine.CustomAsyncMatcherFactory = () => {
							 | 
						||
| 
								 | 
							
								  return {
							 | 
						||
| 
								 | 
							
								    async compare(actualPromise: Promise<never>, expectedStatus: number, expectedMessage?: string | RegExp) {
							 | 
						||
| 
								 | 
							
								      if (!(actualPromise instanceof Promise)) {
							 | 
						||
| 
								 | 
							
								        throw new Error(`Expected '${toBeRejectedWithPreviewServerError.name}()' to be called on a promise.`);
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      try {
							 | 
						||
| 
								 | 
							
								        await actualPromise;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        return {
							 | 
						||
| 
								 | 
							
								          pass: false,
							 | 
						||
| 
								 | 
							
								          message: `Expected a promise to be rejected with a '${PreviewServerError.name}', but it was resolved.`,
							 | 
						||
| 
								 | 
							
								        };
							 | 
						||
| 
								 | 
							
								      } catch (actualError) {
							 | 
						||
| 
								 | 
							
								        const actualPrintValue = stringify(actualError);
							 | 
						||
| 
								 | 
							
								        const expectedPrintValue =
							 | 
						||
| 
								 | 
							
								            stringify(new PreviewServerError(expectedStatus, expectedMessage && `${expectedMessage}`));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        const pass = errorMatches(actualError, expectedStatus, expectedMessage);
							 | 
						||
| 
								 | 
							
								        const message =
							 | 
						||
| 
								 | 
							
								            `Expected a promise ${pass ? 'not ' : ''}to be rejected with ${expectedPrintValue}, but is was` +
							 | 
						||
| 
								 | 
							
								            `${pass ? '' : ` rejected with ${actualPrintValue}`}.`;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        return {pass, message};
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // Helpers
							 | 
						||
| 
								 | 
							
								  function errorMatches(actualErr: unknown, expectedStatus: number, expectedMsg?: string | RegExp): boolean {
							 | 
						||
| 
								 | 
							
								    if (!(actualErr instanceof PreviewServerError)) return false;
							 | 
						||
| 
								 | 
							
								    if (actualErr.status !== expectedStatus) return false;
							 | 
						||
| 
								 | 
							
								    return messageMatches(actualErr.message, expectedMsg);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  function messageMatches(actualMsg: string, expectedMsg?: string | RegExp): boolean {
							 | 
						||
| 
								 | 
							
								    if (typeof expectedMsg === 'undefined') return true;
							 | 
						||
| 
								 | 
							
								    if (typeof expectedMsg === 'string') return actualMsg === expectedMsg;
							 | 
						||
| 
								 | 
							
								    return expectedMsg.test(actualMsg);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  function stringify(value: unknown): string {
							 | 
						||
| 
								 | 
							
								    if (value instanceof PreviewServerError) {
							 | 
						||
| 
								 | 
							
								      return `${PreviewServerError.name}(${value.status}${value.message ? `, ${value.message}` : ''})`;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return jasmine.pp(value);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Exports
							 | 
						||
| 
								 | 
							
								export const customAsyncMatchers: jasmine.CustomAsyncMatcherFactories = {
							 | 
						||
| 
								 | 
							
								  toBeRejectedWithPreviewServerError,
							 | 
						||
| 
								 | 
							
								};
							 |