Merge pull request #90 from KevinMidboe/testing

Testing
This commit is contained in:
2018-03-19 16:28:44 +01:00
committed by GitHub
11 changed files with 78 additions and 54 deletions

View File

@@ -1,14 +1,11 @@
{
'dist': 'trusty',
'language': 'node_js',
'node_js': '8.7.0',
'cache': 'yarn',
'scripts': [
'npm run test'
],
'before_install': [
'cd seasoned_api',
],
'before_script': 'yarn',
'os': 'linux',
}
language: node_js
node_js: '8.7.0'
git:
submodules: false
script:
yarn test
before_install:
- cd seasoned_api
before_script: yarn
cache: false
os: linux

View File

@@ -3,7 +3,7 @@
"main": "webserver/server.js",
"scripts": {
"start": "cross-env SEASONED_CONFIG=conf/development.json NODE_PATH=. node src/webserver/server.js",
"test": "cross-env SEASONED_CONFIG=conf/development.json NODE_PATH=. mocha --recursive test/system",
"test": "cross-env SEASONED_CONFIG=conf/development.json TESTING=true NODE_PATH=. mocha --recursive test/system",
"coverage": "cross-env SEASONED_CONFIG=conf/test.json NODE_PATH=. istanbul cover -x script/autogenerate-documentation.js --include-all-sources --dir test/.coverage node_modules/mocha/bin/_mocha --recursive test/**/* -- --report lcovonly && cat test/.coverage/lcov.info | coveralls && rm -rf test/.coverage",
"lint": "./node_modules/.bin/eslint src/"
},

View File

@@ -1,8 +1,8 @@
const configuration = require('src/config/configuration').getInstance();
const SqliteDatabase = require('src/database/sqliteDatabase');
const database = new SqliteDatabase(configuration.get('database', 'host'));
const host = process.env.TESTING ? ':memory:' : configuration.get('database', 'host');
const database = new SqliteDatabase(host);
/**
* This module establishes a connection to the database
* specified in the confgiuration file. It tries to setup
@@ -10,7 +10,6 @@ const database = new SqliteDatabase(configuration.get('database', 'host'));
* If the tables already exists, it simply proceeds.
*/
Promise.resolve()
.then(() => database.connect())
.then(() => database.setUp());
module.exports = database;

View File

@@ -3,10 +3,9 @@ const path = require('path');
const sqlite3 = require('sqlite3').verbose();
class SqliteDatabase {
constructor(host) {
this.host = host;
this.connection = this.connect()
this.connection = new sqlite3.Database(this.host);
this.schemaDirectory = path.join(__dirname, 'schemas');
}
@@ -14,11 +13,11 @@ class SqliteDatabase {
* Connect to the database.
* @returns {Promise} succeeds if connection was established
*/
connect() {
let database = new sqlite3.Database(this.host);
this.connection = database;
return database;
}
// connect() {
// let database = ;
// this.connection = database;
// return database;
// }
/**
* Run a SQL query against the database.
@@ -26,7 +25,7 @@ class SqliteDatabase {
* @param {Array} parameters in the SQL query
* @returns {Promise}
*/
run(sql, parameters) {
async run(sql, parameters) {
return new Promise((resolve, reject) => {
this.connection.run(sql, parameters, (error, result) => {
if (error)
@@ -78,7 +77,13 @@ class SqliteDatabase {
*/
async execute(sql) {
return new Promise(resolve => {
resolve(this.connection.exec(sql));
this.connection.exec(sql, (err, database) => {
if (err) {
console.log('ERROR: ', err);
reject(err);
}
resolve();
})
})
}
@@ -88,7 +93,7 @@ class SqliteDatabase {
*/
setUp() {
const setupSchema = this.readSqlFile('setup.sql');
return this.execute(setupSchema);
return Promise.resolve(this.execute(setupSchema));
}
/**
@@ -96,8 +101,8 @@ class SqliteDatabase {
* @returns {Promise}
*/
tearDown() {
const tearDownSchema = this.readSqlFile('tearDown.sql');
return this.execute(tearDownSchema);
const tearDownSchema = this.readSqlFile('teardown.sql');
return Promise.resolve(this.execute(tearDownSchema));
}
/**

View File

@@ -35,10 +35,13 @@ class UserRepository {
* @returns {Promise}
*/
retrieveHash(user) {
return this.database.get(this.queries.retrieveHash, user.username).then((row) => {
assert(row, 'The user does not exist.');
return row.password;
});
return Promise.resolve()
.then(() => this.database.get(this.queries.retrieveHash, user.username))
.then((row) => {
assert(row, 'The user does not exist.');
return row.password;
})
.catch((err) => console.log('there was a error when getting hash', err));
}
/**
@@ -48,7 +51,7 @@ class UserRepository {
* @returns {Promise}
*/
changePassword(user, password) {
return this.database.run(this.queries.change, [password, user.username]);
return Promise.resolve(this.database.run(this.queries.change, [password, user.username]));
}
checkAdmin(user) {

View File

@@ -2,8 +2,7 @@ const Cache = require('src/tmdb/cache');
const SqliteDatabase = require('src/database/sqliteDatabase');
function createCacheEntry(key, value) {
const database = new SqliteDatabase(':memory:');
const cache = new Cache(database);
const cache = new Cache();
return cache.set(key, value);
}

View File

@@ -1,12 +1,11 @@
const User = require('src/user/user');
const UserSecurity = require('src/user/userSecurity');
const SqliteDatabase = require('src/database/sqliteDatabase');
function createUser(username, email, password) {
const database = new SqliteDatabase(':memory:');
const userSecurity = new UserSecurity(database);
const user = new User(username, email);
return userSecurity.createNewUser(user, password);
function createUser(username, password) {
const userSecurity = new UserSecurity();
const user = new User(username)
return Promise.resolve(userSecurity.createNewUser(user, password))
}
module.exports = createUser;

View File

@@ -1,11 +1,9 @@
const SqliteDatabase = require('src/database/sqliteDatabase');
const establishedDatabase = require('src/database/database');
function resetDatabase() {
const database = new SqliteDatabase(':memory:');
return Promise.resolve()
.then(() => database.connect())
// .then(() => database.tearDown())
.then(() => database.setUp());
function resetDatabase() {
return Promise.resolve()
.then(() => establishedDatabase.tearDown())
.then(() => establishedDatabase.setUp())
}
module.exports = resetDatabase;

View File

@@ -5,8 +5,10 @@ const createUser = require('test/helpers/createUser');
const resetDatabase = require('test/helpers/resetDatabase');
describe('As a user I want to log in', () => {
before(() => resetDatabase());
before(() => createUser('test_user', 'test@gmail.com', 'password'));
before(() => {
return resetDatabase()
.then(() => createUser('test_user', 'password'))
})
it('should return 200 with a token if correct credentials are given', () =>
request(app)

View File

@@ -0,0 +1,20 @@
const assert = require('assert');
const request = require('supertest-as-promised');
const app = require('src/webserver/app');
const createUser = require('test/helpers/createUser');
const resetDatabase = require('test/helpers/resetDatabase');
describe('As a user I want error when registering existing username', () => {
before(() => {
return resetDatabase()
.then(() => createUser('test_user', 'password'))
})
it('should return 401 with error message when same username is given', () =>
request(app)
.post('/api/v1/user')
.send({ username: 'test_user', password: 'password' })
.expect(401)
.then(response => assert.equal(response.text, '{"success":false,"error":"That username is already registered"}'))
);
});

View File

@@ -5,8 +5,10 @@ const createUser = require('test/helpers/createUser');
const createToken = require('test/helpers/createToken');
describe('As a user I want to request a movie', () => {
before(() => resetDatabase());
before(() => createUser('test_user', 'test@gmail.com', 'password'));
before(() => {
return resetDatabase()
.then(() => createUser('test_user', 'test@gmail.com', 'password'));
})
it('should return 200 when item is requested', () =>
request(app)