Skip to content

Commit 090376b

Browse files
committed
feat(peoplejsonadapter): create adapter and unit test
1 parent 8b0b4b9 commit 090376b

File tree

5 files changed

+86
-3
lines changed

5 files changed

+86
-3
lines changed

src/adapters/PeopleJSONAdapter.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import {Observable} from 'rxjs';
2+
3+
import person from './../data/person';
4+
import PeopleAdapter from './PeopleAdapter';
5+
6+
export default class PeopleJSONAdapter extends PeopleAdapter {
7+
/**
8+
* Returns an observable that emits person data.
9+
* Person data comes from JSON file `person.json` in the data folder.
10+
*
11+
* @param {String} id - ID of person to get
12+
* @returns {Observable<PersonObject>}
13+
* @memberof PeopleJSONAdapter
14+
*/
15+
getPerson(id) {
16+
return Observable.create((observer) => {
17+
if (person.id === id) observer.next(person);
18+
else observer.error(new Error(`Could not find person with id "${id}"`));
19+
20+
observer.complete();
21+
});
22+
}
23+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import person from './../data/person';
2+
import PeopleJSONAdapter from './PeopleJSONAdapter';
3+
4+
describe('People Adapter Interface', () => {
5+
let peopleJSONAdapter;
6+
7+
beforeEach(() => {
8+
peopleJSONAdapter = new PeopleJSONAdapter();
9+
});
10+
11+
test('getPerson() returns an observable', () => {
12+
expect(rxjs.isObservable(peopleJSONAdapter.getPerson())).toBeTruthy();
13+
});
14+
15+
test('getPerson() returns a person data', (done) => {
16+
peopleJSONAdapter.getPerson(person.id).subscribe((data) => {
17+
expect(data).toEqual(person);
18+
done();
19+
});
20+
});
21+
22+
test('getPerson() throws a proper error message', (done) => {
23+
const personID = 'personID';
24+
25+
peopleJSONAdapter.getPerson(personID).subscribe(
26+
() => {},
27+
(error) => {
28+
expect(error.message).toBe(`Could not find person with id "${personID}"`);
29+
done();
30+
}
31+
);
32+
});
33+
34+
test('getPerson() completes the observable', (done) => {
35+
peopleJSONAdapter.getPerson(person.id).subscribe(
36+
() => {},
37+
() => {},
38+
() => {
39+
expect(true).toBeTruthy();
40+
done();
41+
}
42+
);
43+
});
44+
45+
afterEach(() => {
46+
peopleJSONAdapter = null;
47+
});
48+
});

src/adapters/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
11
export {default as WebexAdapter} from './WebexAdapter';
2+
export {default as PeopleAdapter} from './PeopleAdapter';
3+
export {default as PeopleJSONAdapter} from './PeopleJSONAdapter';

src/data/person.json

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"id": "Y2lzY29zcGFyazovL3VzL1BFT1BMRS9iMzNjYjE3Yy00MmUzLTQxYWMtYTA0NS00OTdlNDAwMjY0NmM",
3+
"emails": [
4+
"webexcmps@gmail.com"
5+
],
6+
"displayName": "Webex Component User",
7+
"firstName": "Webex",
8+
"LastName": "Component User",
9+
"nickName": "Webex",
10+
"avatar": "https://4b4dc97add6b1dcc891a-54bf3b4e4579920861d23cc001530c2a.ssl.cf1.rackcdn.com/V1~b33cb17c-42e3-41ac-a045-497e4002646c~697607d5347442a990719dd5d80ce379~1600",
11+
"orgId": "Y2lzY29zcGFyazovL3VzL09SR0FOSVpBVElPTi9jb25zdW1lcg",
12+
"status": "unknown"
13+
}

src/data/test.json

Lines changed: 0 additions & 3 deletions
This file was deleted.

0 commit comments

Comments
 (0)