Skip to content

Commit

Permalink
feat(peoplejsonadapter): create adapter and unit test
Browse files Browse the repository at this point in the history
  • Loading branch information
akoushke committed Aug 9, 2019
1 parent 8b0b4b9 commit 090376b
Show file tree
Hide file tree
Showing 5 changed files with 86 additions and 3 deletions.
23 changes: 23 additions & 0 deletions src/adapters/PeopleJSONAdapter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import {Observable} from 'rxjs';

import person from './../data/person';
import PeopleAdapter from './PeopleAdapter';

export default class PeopleJSONAdapter extends PeopleAdapter {
/**
* Returns an observable that emits person data.
* Person data comes from JSON file `person.json` in the data folder.
*
* @param {String} id - ID of person to get
* @returns {Observable<PersonObject>}
* @memberof PeopleJSONAdapter
*/
getPerson(id) {
return Observable.create((observer) => {
if (person.id === id) observer.next(person);
else observer.error(new Error(`Could not find person with id "${id}"`));

observer.complete();
});
}
}
48 changes: 48 additions & 0 deletions src/adapters/PeopleJSONAdapter.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import person from './../data/person';
import PeopleJSONAdapter from './PeopleJSONAdapter';

describe('People Adapter Interface', () => {
let peopleJSONAdapter;

beforeEach(() => {
peopleJSONAdapter = new PeopleJSONAdapter();
});

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

test('getPerson() returns a person data', (done) => {
peopleJSONAdapter.getPerson(person.id).subscribe((data) => {
expect(data).toEqual(person);
done();
});
});

test('getPerson() throws a proper error message', (done) => {
const personID = 'personID';

peopleJSONAdapter.getPerson(personID).subscribe(
() => {},
(error) => {
expect(error.message).toBe(`Could not find person with id "${personID}"`);
done();
}
);
});

test('getPerson() completes the observable', (done) => {
peopleJSONAdapter.getPerson(person.id).subscribe(
() => {},
() => {},
() => {
expect(true).toBeTruthy();
done();
}
);
});

afterEach(() => {
peopleJSONAdapter = null;
});
});
2 changes: 2 additions & 0 deletions src/adapters/index.js
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
export {default as WebexAdapter} from './WebexAdapter';
export {default as PeopleAdapter} from './PeopleAdapter';
export {default as PeopleJSONAdapter} from './PeopleJSONAdapter';
13 changes: 13 additions & 0 deletions src/data/person.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"id": "Y2lzY29zcGFyazovL3VzL1BFT1BMRS9iMzNjYjE3Yy00MmUzLTQxYWMtYTA0NS00OTdlNDAwMjY0NmM",
"emails": [
"[email protected]"
],
"displayName": "Webex Component User",
"firstName": "Webex",
"LastName": "Component User",
"nickName": "Webex",
"avatar": "https://4b4dc97add6b1dcc891a-54bf3b4e4579920861d23cc001530c2a.ssl.cf1.rackcdn.com/V1~b33cb17c-42e3-41ac-a045-497e4002646c~697607d5347442a990719dd5d80ce379~1600",
"orgId": "Y2lzY29zcGFyazovL3VzL09SR0FOSVpBVElPTi9jb25zdW1lcg",
"status": "unknown"
}
3 changes: 0 additions & 3 deletions src/data/test.json

This file was deleted.

0 comments on commit 090376b

Please sign in to comment.