Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 50 additions & 0 deletions src/models/file.model.test.ts
Original file line number Diff line number Diff line change
@@ -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(),
);
});
});
});
})
14 changes: 11 additions & 3 deletions src/models/file.model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,18 @@ export class UrlFile implements OutputFile {
}

get contents(): Promise<string | Buffer> {
return new Promise<string>(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<string>(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));
}
});
}
}