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() | ||||||
|          assert(row, 'The user does not exist.'); |          .then(() => this.database.get(this.queries.retrieveHash, user.username)) | ||||||
|          return row.password; |          .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} |    * @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(() => establishedDatabase.tearDown()) | ||||||
|   .then(() => database.connect()) |       .then(() => establishedDatabase.setUp()) | ||||||
|   // .then(() => database.tearDown()) |  | ||||||
|   .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