falcor-supertest-datasource
Version:
A Falcor DataSource class for easily testing Falcor-Router Express routes using SuperTest
104 lines (87 loc) • 2.52 kB
JavaScript
const test = require('tape');
const request = require('supertest');
const falcor = require('falcor');
const SuperTestDataSource = require('../index');
const dbConstructor = require('../example/example-router/db');
const appConstructor = require('../example/example-router/app');
const seedFilePath = `${__dirname}/../example/example-router/db/sql/seed.sql`;
const assertFailure = assert => err => {
assert.fail(err);
assert.end();
};
const setupFalcorTestModel = db => {
return new falcor.Model({
source: new SuperTestDataSource('/api/model.json', appConstructor(db))
});
};
test('Should return get request', assert => {
assert.plan(1);
const model = setupFalcorTestModel(dbConstructor({seed: seedFilePath}));
const expectedResponse = {
folderList: {
0: {
id: 1,
name: 'root folder',
parentId: null
},
1: {
id: 2,
name: 'folder1',
parentId: 1
}
}
};
model.get(['folderList', {'to': 1}, ['id', 'name', 'parentId']])
.subscribe(res => {
assert.deepEqual(res.json, expectedResponse);
}, assertFailure);
});
test.skip('Should handle unsafe url characters', assert => {
assert.plan(1);
const model = setupFalcorTestModel(dbConstructor({seed: seedFilePath}));
const expectedResponse = {
folderList: {
0: {
id: 1,
name: 'root folder',
parentId: null
},
1: {
id: 2,
name: 'folder1',
parentId: 1
}
}
};
model.get(['folderList', {'to': 1}, ['id', 'name', 'parentId', 'unsafe#char']])
.subscribe(res => {
assert.deepEqual(res.json, expectedResponse);
}, assertFailure);
});
test('Should return set request', assert => {
assert.plan(2);
const model = setupFalcorTestModel(dbConstructor({seed: seedFilePath}));
const expectedResponse = {
foldersById: {
2: {
name: 'folder1 edit1'
}
}
};
model.set({
path: ['foldersById', 2, 'name'],
value: 'folder1 edit1'
})
.subscribe(res => {
assert.deepEqual(res.json, expectedResponse, 'set returns updated value');
// clear client cache, to ensure subsequent tests run against server db
model.setCache({});
model.getValue(['foldersById', 2, 'name'])
.subscribe(name => {
assert.equal(name, 'folder1 edit1', 'updated value is persisted');
});
}, assertFailure(assert));
});
test.skip('Should return call request', assert => {
assert.fail('TODO');
});