Skip to content

Commit 54f93cf

Browse files
author
Sean Sundberg
committed
Adds error handling for UrlFile
Signed-off-by: Sean Sundberg <[email protected]>
1 parent e9b2a47 commit 54f93cf

File tree

2 files changed

+61
-3
lines changed

2 files changed

+61
-3
lines changed

src/models/file.model.test.ts

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import {UrlFile} from './file.model';
2+
3+
describe('file.model', () => {
4+
test('canary verifies test infrastructure', () => {
5+
expect(true).toBe(true);
6+
});
7+
8+
describe('given UrlFile', () => {
9+
describe('when url is null', () => {
10+
test('then should throw error', async () => {
11+
const name = 'test.out';
12+
13+
const file = new UrlFile({name, url: undefined as any});
14+
15+
return file.contents.then(
16+
result => expect(result).toBeUndefined(),
17+
err => expect(err.message).toEqual('Url is missing for file: ' + name)
18+
);
19+
});
20+
});
21+
22+
describe('when url is invalid', () => {
23+
test('then should throw error', async () => {
24+
const name = 'test.out';
25+
const url = 'https://bogus-url.com';
26+
27+
const file = new UrlFile({name, url});
28+
29+
return file.contents.then(
30+
result => expect(result).toBeUndefined(),
31+
err => expect(err.message).toEqual('Error retrieving file ' + name + ' from url: ' + url)
32+
);
33+
});
34+
});
35+
36+
describe('when url is valid', () => {
37+
test('then should return contents', async () => {
38+
const name = 'test.out';
39+
const url = 'https://google.com';
40+
41+
const file = new UrlFile({name, url});
42+
43+
return file.contents.then(
44+
result => expect(result).toBeDefined(),
45+
err => expect(err).toBeUndefined(),
46+
);
47+
});
48+
});
49+
});
50+
})

src/models/file.model.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,18 @@ export class UrlFile implements OutputFile {
2424
}
2525

2626
get contents() {
27-
return new Promise<string>(async (resolve) => {
28-
const req: superagent.Response = await superagent.get(this.url);
27+
if (!this.url) {
28+
return Promise.reject(new Error('Url is missing for file: ' + this.name));
29+
}
2930

30-
resolve(req.text);
31+
return new Promise<string>(async (resolve, reject) => {
32+
try {
33+
const req: superagent.Response = await superagent.get(this.url);
34+
35+
resolve(req.text);
36+
} catch (e) {
37+
reject(new Error('Error retrieving file ' + this.name + ' from url: ' + this.url));
38+
}
3139
});
3240
}
3341
}

0 commit comments

Comments
 (0)