Skip to content

Commit d498811

Browse files
committed
feat(peopleadapter): init with json data
1 parent 3be7202 commit d498811

File tree

2 files changed

+37
-13
lines changed

2 files changed

+37
-13
lines changed

src/adapters/PeopleJSONAdapter.js

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,43 @@
11
import {Observable} from 'rxjs';
22

3-
import person from './../data/person';
43
import PeopleAdapter from './PeopleAdapter';
54

65
export default class PeopleJSONAdapter extends PeopleAdapter {
76
/**
8-
* Returns an observable that emits person data.
9-
* Person data comes from JSON file `person.json` in the data folder.
7+
* @typedef PeopleJSON
8+
* @param {object} datasource An object that contains a set of people keyed by ID.
9+
* @example
10+
* {
11+
* "userid-1": {
12+
* "ID": "userid-1",
13+
* "emails": [
14+
* "webexcmps@gmail.com"
15+
* ],
16+
* "displayName": "Webex Component User",
17+
* "firstName": "Webex",
18+
* "LastName": "Component User",
19+
* "nickName": "Webex",
20+
* "avatar": "https://4b4dc97add6b1dcc891a-54bf3b4e4579920861d23cc001530c2a.ssl.cf1.rackcdn.com/V1~b33cb17c-42e3-41ac-a045-497e4002646c~697607d5347442a990719dd5d80ce379~1600",
21+
* "orgID": "Y2lzY29zcGFyazovL3VzL09SR0FOSVpBVElPTi9jb25zdW1lcg",
22+
* "status": "unknown"
23+
* }
24+
* }
25+
*/
26+
27+
/**
28+
* Returns an observable that emits person data of the given ID.
1029
*
11-
* @param {String} id - ID of person to get
12-
* @returns {Observable<PersonObject>}
30+
* @param {string} ID ID of person to get
31+
* @returns {Observable.<Person>}
1332
* @memberof PeopleJSONAdapter
1433
*/
15-
getPerson(id) {
34+
getPerson(ID) {
1635
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}"`));
36+
if (this.datasource[ID]) {
37+
observer.next(this.datasource[ID]);
38+
} else {
39+
observer.error(new Error(`Could not find person with ID "${ID}"`));
40+
}
1941

2042
observer.complete();
2143
});

src/adapters/PeopleJSONAdapter.test.js

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,20 @@ import person from './../data/person';
22
import PeopleJSONAdapter from './PeopleJSONAdapter';
33

44
describe('People Adapter Interface', () => {
5-
let peopleJSONAdapter;
5+
let peopleJSONAdapter, peopleJSON;
66

77
beforeEach(() => {
8-
peopleJSONAdapter = new PeopleJSONAdapter();
8+
peopleJSON = {};
9+
peopleJSON[person.ID] = person;
10+
peopleJSONAdapter = new PeopleJSONAdapter(peopleJSON);
911
});
1012

1113
test('getPerson() returns an observable', () => {
1214
expect(rxjs.isObservable(peopleJSONAdapter.getPerson())).toBeTruthy();
1315
});
1416

1517
test('getPerson() returns a person data', (done) => {
16-
peopleJSONAdapter.getPerson(person.id).subscribe((data) => {
18+
peopleJSONAdapter.getPerson(person.ID).subscribe((data) => {
1719
expect(data).toEqual(person);
1820
done();
1921
});
@@ -25,14 +27,14 @@ describe('People Adapter Interface', () => {
2527
peopleJSONAdapter.getPerson(personID).subscribe(
2628
() => {},
2729
(error) => {
28-
expect(error.message).toBe(`Could not find person with id "${personID}"`);
30+
expect(error.message).toBe(`Could not find person with ID "${personID}"`);
2931
done();
3032
}
3133
);
3234
});
3335

3436
test('getPerson() completes the observable', (done) => {
35-
peopleJSONAdapter.getPerson(person.id).subscribe(
37+
peopleJSONAdapter.getPerson(person.ID).subscribe(
3638
() => {},
3739
() => {},
3840
() => {

0 commit comments

Comments
 (0)