25
.travis.yml
25
.travis.yml
@@ -1,14 +1,11 @@
|
|||||||
{
|
language: node_js
|
||||||
'dist': 'trusty',
|
node_js: '8.7.0'
|
||||||
'language': 'node_js',
|
git:
|
||||||
'node_js': '8.7.0',
|
submodules: false
|
||||||
'cache': 'yarn',
|
script:
|
||||||
'scripts': [
|
yarn test
|
||||||
'npm run test'
|
before_install:
|
||||||
],
|
- cd seasoned_api
|
||||||
'before_install': [
|
before_script: yarn
|
||||||
'cd seasoned_api',
|
cache: false
|
||||||
],
|
os: linux
|
||||||
'before_script': 'yarn',
|
|
||||||
'os': 'linux',
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
"main": "webserver/server.js",
|
"main": "webserver/server.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "cross-env SEASONED_CONFIG=conf/development.json NODE_PATH=. node src/webserver/server.js",
|
"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",
|
"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/"
|
"lint": "./node_modules/.bin/eslint src/"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
const configuration = require('src/config/configuration').getInstance();
|
const configuration = require('src/config/configuration').getInstance();
|
||||||
const SqliteDatabase = require('src/database/sqliteDatabase');
|
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
|
* This module establishes a connection to the database
|
||||||
* specified in the confgiuration file. It tries to setup
|
* 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.
|
* If the tables already exists, it simply proceeds.
|
||||||
*/
|
*/
|
||||||
Promise.resolve()
|
Promise.resolve()
|
||||||
.then(() => database.connect())
|
|
||||||
.then(() => database.setUp());
|
.then(() => database.setUp());
|
||||||
|
|
||||||
module.exports = database;
|
module.exports = database;
|
||||||
|
|||||||
@@ -3,10 +3,9 @@ const path = require('path');
|
|||||||
const sqlite3 = require('sqlite3').verbose();
|
const sqlite3 = require('sqlite3').verbose();
|
||||||
|
|
||||||
class SqliteDatabase {
|
class SqliteDatabase {
|
||||||
|
|
||||||
constructor(host) {
|
constructor(host) {
|
||||||
this.host = host;
|
this.host = host;
|
||||||
this.connection = this.connect()
|
this.connection = new sqlite3.Database(this.host);
|
||||||
this.schemaDirectory = path.join(__dirname, 'schemas');
|
this.schemaDirectory = path.join(__dirname, 'schemas');
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -14,11 +13,11 @@ class SqliteDatabase {
|
|||||||
* Connect to the database.
|
* Connect to the database.
|
||||||
* @returns {Promise} succeeds if connection was established
|
* @returns {Promise} succeeds if connection was established
|
||||||
*/
|
*/
|
||||||
connect() {
|
// connect() {
|
||||||
let database = new sqlite3.Database(this.host);
|
// let database = ;
|
||||||
this.connection = database;
|
// this.connection = database;
|
||||||
return database;
|
// return database;
|
||||||
}
|
// }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Run a SQL query against the database.
|
* Run a SQL query against the database.
|
||||||
@@ -26,7 +25,7 @@ class SqliteDatabase {
|
|||||||
* @param {Array} parameters in the SQL query
|
* @param {Array} parameters in the SQL query
|
||||||
* @returns {Promise}
|
* @returns {Promise}
|
||||||
*/
|
*/
|
||||||
run(sql, parameters) {
|
async run(sql, parameters) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.connection.run(sql, parameters, (error, result) => {
|
this.connection.run(sql, parameters, (error, result) => {
|
||||||
if (error)
|
if (error)
|
||||||
@@ -78,7 +77,13 @@ class SqliteDatabase {
|
|||||||
*/
|
*/
|
||||||
async execute(sql) {
|
async execute(sql) {
|
||||||
return new Promise(resolve => {
|
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() {
|
setUp() {
|
||||||
const setupSchema = this.readSqlFile('setup.sql');
|
const setupSchema = this.readSqlFile('setup.sql');
|
||||||
return this.execute(setupSchema);
|
return Promise.resolve(this.execute(setupSchema));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -96,8 +101,8 @@ class SqliteDatabase {
|
|||||||
* @returns {Promise}
|
* @returns {Promise}
|
||||||
*/
|
*/
|
||||||
tearDown() {
|
tearDown() {
|
||||||
const tearDownSchema = this.readSqlFile('tearDown.sql');
|
const tearDownSchema = this.readSqlFile('teardown.sql');
|
||||||
return this.execute(tearDownSchema);
|
return Promise.resolve(this.execute(tearDownSchema));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -35,10 +35,13 @@ class UserRepository {
|
|||||||
* @returns {Promise}
|
* @returns {Promise}
|
||||||
*/
|
*/
|
||||||
retrieveHash(user) {
|
retrieveHash(user) {
|
||||||
return this.database.get(this.queries.retrieveHash, user.username).then((row) => {
|
return Promise.resolve()
|
||||||
|
.then(() => this.database.get(this.queries.retrieveHash, user.username))
|
||||||
|
.then((row) => {
|
||||||
assert(row, 'The user does not exist.');
|
assert(row, 'The user does not exist.');
|
||||||
return row.password;
|
return row.password;
|
||||||
});
|
})
|
||||||
|
.catch((err) => console.log('there was a error when getting hash', err));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -48,7 +51,7 @@ class UserRepository {
|
|||||||
* @returns {Promise}
|
* @returns {Promise}
|
||||||
*/
|
*/
|
||||||
changePassword(user, password) {
|
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) {
|
checkAdmin(user) {
|
||||||
|
|||||||
@@ -2,8 +2,7 @@ const Cache = require('src/tmdb/cache');
|
|||||||
const SqliteDatabase = require('src/database/sqliteDatabase');
|
const SqliteDatabase = require('src/database/sqliteDatabase');
|
||||||
|
|
||||||
function createCacheEntry(key, value) {
|
function createCacheEntry(key, value) {
|
||||||
const database = new SqliteDatabase(':memory:');
|
const cache = new Cache();
|
||||||
const cache = new Cache(database);
|
|
||||||
return cache.set(key, value);
|
return cache.set(key, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,11 @@
|
|||||||
const User = require('src/user/user');
|
const User = require('src/user/user');
|
||||||
const UserSecurity = require('src/user/userSecurity');
|
const UserSecurity = require('src/user/userSecurity');
|
||||||
const SqliteDatabase = require('src/database/sqliteDatabase');
|
|
||||||
|
|
||||||
function createUser(username, email, password) {
|
function createUser(username, password) {
|
||||||
const database = new SqliteDatabase(':memory:');
|
const userSecurity = new UserSecurity();
|
||||||
const userSecurity = new UserSecurity(database);
|
const user = new User(username)
|
||||||
const user = new User(username, email);
|
|
||||||
return userSecurity.createNewUser(user, password);
|
return Promise.resolve(userSecurity.createNewUser(user, password))
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = createUser;
|
module.exports = createUser;
|
||||||
@@ -1,11 +1,9 @@
|
|||||||
const SqliteDatabase = require('src/database/sqliteDatabase');
|
const establishedDatabase = require('src/database/database');
|
||||||
|
|
||||||
function resetDatabase() {
|
function resetDatabase() {
|
||||||
const database = new SqliteDatabase(':memory:');
|
|
||||||
return Promise.resolve()
|
return Promise.resolve()
|
||||||
.then(() => database.connect())
|
.then(() => establishedDatabase.tearDown())
|
||||||
// .then(() => database.tearDown())
|
.then(() => establishedDatabase.setUp())
|
||||||
.then(() => database.setUp());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = resetDatabase;
|
module.exports = resetDatabase;
|
||||||
|
|||||||
@@ -5,8 +5,10 @@ const createUser = require('test/helpers/createUser');
|
|||||||
const resetDatabase = require('test/helpers/resetDatabase');
|
const resetDatabase = require('test/helpers/resetDatabase');
|
||||||
|
|
||||||
describe('As a user I want to log in', () => {
|
describe('As a user I want to log in', () => {
|
||||||
before(() => resetDatabase());
|
before(() => {
|
||||||
before(() => createUser('test_user', 'test@gmail.com', 'password'));
|
return resetDatabase()
|
||||||
|
.then(() => createUser('test_user', 'password'))
|
||||||
|
})
|
||||||
|
|
||||||
it('should return 200 with a token if correct credentials are given', () =>
|
it('should return 200 with a token if correct credentials are given', () =>
|
||||||
request(app)
|
request(app)
|
||||||
|
|||||||
@@ -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"}'))
|
||||||
|
);
|
||||||
|
});
|
||||||
@@ -5,8 +5,10 @@ const createUser = require('test/helpers/createUser');
|
|||||||
const createToken = require('test/helpers/createToken');
|
const createToken = require('test/helpers/createToken');
|
||||||
|
|
||||||
describe('As a user I want to request a movie', () => {
|
describe('As a user I want to request a movie', () => {
|
||||||
before(() => resetDatabase());
|
before(() => {
|
||||||
before(() => createUser('test_user', 'test@gmail.com', 'password'));
|
return resetDatabase()
|
||||||
|
.then(() => createUser('test_user', 'test@gmail.com', 'password'));
|
||||||
|
})
|
||||||
|
|
||||||
it('should return 200 when item is requested', () =>
|
it('should return 200 when item is requested', () =>
|
||||||
request(app)
|
request(app)
|
||||||
|
|||||||
Reference in New Issue
Block a user