diff --git a/src/models/file.model.test.ts b/src/models/file.model.test.ts new file mode 100644 index 0000000..277491b --- /dev/null +++ b/src/models/file.model.test.ts @@ -0,0 +1,50 @@ +import {UrlFile} from './file.model'; + +describe('file.model', () => { + test('canary verifies test infrastructure', () => { + expect(true).toBe(true); + }); + + describe('given UrlFile', () => { + describe('when url is null', () => { + test('then should throw error', async () => { + const name = 'test.out'; + + const file = new UrlFile({name, url: undefined as any}); + + return file.contents.then( + result => expect(result).toBeUndefined(), + err => expect(err.message).toEqual('Url is missing for file: ' + name) + ); + }); + }); + + describe('when url is invalid', () => { + test('then should throw error', async () => { + const name = 'test.out'; + const url = 'https://bogus-url.com'; + + const file = new UrlFile({name, url}); + + return file.contents.then( + result => expect(result).toBeUndefined(), + err => expect(err.message).toEqual('Error retrieving file ' + name + ' from url: ' + url) + ); + }); + }); + + describe('when url is valid', () => { + test('then should return contents', async () => { + const name = 'test.out'; + const url = 'https://google.com'; + + const file = new UrlFile({name, url}); + + return file.contents.then( + result => expect(result).toBeDefined(), + err => expect(err).toBeUndefined(), + ); + }); + }); + }); +}) diff --git a/src/models/file.model.ts b/src/models/file.model.ts index bd293f8..1e45b8e 100644 --- a/src/models/file.model.ts +++ b/src/models/file.model.ts @@ -24,10 +24,18 @@ export class UrlFile implements OutputFile { } get contents(): Promise { - return new Promise(async (resolve) => { - const req: superagent.Response = await superagent.get(this.url); + if (!this.url) { + return Promise.reject(new Error('Url is missing for file: ' + this.name)); + } - resolve(req.text); + return new Promise(async (resolve, reject) => { + try { + const req: superagent.Response = await superagent.get(this.url); + + resolve(req.text); + } catch (e) { + reject(new Error('Error retrieving file ' + this.name + ' from url: ' + this.url)); + } }); } }