Skip to content

Commit

Permalink
Move mock Airtable environment into test helpers file
Browse files Browse the repository at this point in the history
  • Loading branch information
Evan Hahn committed Apr 24, 2019
1 parent 4ab28c7 commit 7eceb7a
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 60 deletions.
66 changes: 6 additions & 60 deletions test/delete.test.js
Original file line number Diff line number Diff line change
@@ -1,74 +1,20 @@
'use strict';

var Airtable = require('../lib/airtable');
var express = require('express');
var bodyParser = require('body-parser');
var getPort = require('get-port');
var util = require('util');
var testHelpers = require('./test_helpers');

describe('record deletion', function () {
var airtable;
var testServer;
var testServerPort;
var teardownAsync;

beforeAll(function () {
var app = express();

app.use(bodyParser.json());

function checkParamsMiddleware(req, res, next) {
var areParamsValid = (
(req.get('authorization') === 'Bearer key123') &&
(req.params.baseId === 'app123') &&
(req.params.tableIdOrName === 'Table')
);
if (areParamsValid) {
next();
} else {
next(new Error('Bad parameters'));
}
}

app.delete('/v0/:baseId/:tableIdOrName/:recordId', checkParamsMiddleware, function (req, res, next) {
res.json({
id: req.params.recordId,
deleted: true
});
});

app.delete('/v0/:baseId/:tableIdOrName', checkParamsMiddleware, function (req, res, next) {
res.json({
records: req.query.records.map(function (recordId) {
return {
id: recordId,
deleted: true
};
})
});
});

return getPort().then(function (port) {
testServerPort = port;

airtable = new Airtable({
apiKey: 'key123',
endpointUrl: 'http://localhost:' + testServerPort
});

return new Promise(function (resolve, reject) {
testServer = app.listen(testServerPort, function (err) {
if (err) {
reject(err);
} else {
resolve();
}
});
});
return testHelpers.getMockEnvironmentAsync().then(function (env) {
airtable = env.airtable;
teardownAsync = env.teardownAsync;
});
});

afterAll(function () {
return util.promisify(testServer.close.bind(testServer))();
return teardownAsync();
});

it('can delete one record', function () {
Expand Down
66 changes: 66 additions & 0 deletions test/test_helpers.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
'use strict';

var Airtable = require('../lib/airtable');
var express = require('express');
var bodyParser = require('body-parser');
var getPort = require('get-port');
var util = require('util');

function getMockEnvironmentAsync() {
var app = express();

app.use(bodyParser.json());

app.delete('/v0/:baseId/:tableIdOrName/:recordId', _checkParamsMiddleware, function (req, res, next) {
res.json({
id: req.params.recordId,
deleted: true
});
});

app.delete('/v0/:baseId/:tableIdOrName', _checkParamsMiddleware, function (req, res, next) {
res.json({
records: req.query.records.map(function (recordId) {
return {
id: recordId,
deleted: true
};
})
});
});

return getPort().then(function (testServerPort) {
return new Promise(function (resolve, reject) {
var testServer = app.listen(testServerPort, function (err) {
if (err) {
reject(err);
} else {
resolve({
airtable: new Airtable({
apiKey: 'key123',
endpointUrl: 'http://localhost:' + testServerPort,
}),
teardownAsync: util.promisify(testServer.close.bind(testServer)),
});
}
});
});
});
}

function _checkParamsMiddleware(req, res, next) {
var areParamsValid = (
(req.get('authorization') === 'Bearer key123') &&
(req.params.baseId === 'app123') &&
(req.params.tableIdOrName === 'Table')
);
if (areParamsValid) {
next();
} else {
next(new Error('Bad parameters'));
}
}

module.exports = {
getMockEnvironmentAsync: getMockEnvironmentAsync,
};

0 comments on commit 7eceb7a

Please sign in to comment.