diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 83e8a1b..43d3403 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,8 +1,13 @@ image: node:6 services: - - mongo + - postgres - redis +variables: + POSTGRES_DB: hostr_test + POSTGRES_USER: hostr_test + POSTGRES_PASSWORD: "" + stages: - test @@ -16,7 +21,7 @@ test: tags: - docker variables: - MONGO_URL: "mongodb://mongo:27017/hostr" + DATABASE_URL: "postgres://hostr_test@postgres:5432/hostr_test" REDIS_URL: "redis://redis:6379" DEBUG: "hostr*" diff --git a/models/activation.js b/models/activation.js index c959919..cbc849b 100644 --- a/models/activation.js +++ b/models/activation.js @@ -1,7 +1,7 @@ export default function (sequelize, DataTypes) { const Activation = sequelize.define('activation', { id: { type: DataTypes.UUID, defaultValue: DataTypes.UUIDV4, primaryKey: true }, - activated: false, + activated: { type: DataTypes.BOOLEAN, defaultValue: false, primaryKey: true }, email: DataTypes.STRING, }, { classMethods: { diff --git a/models/file.js b/models/file.js index 8d81a76..ba74754 100644 --- a/models/file.js +++ b/models/file.js @@ -21,6 +21,11 @@ export default function (sequelize, DataTypes) { md5: DataTypes.STRING(32), // eslint-disable-line new-cap malwarePositives: DataTypes.INTEGER, }, { + indexes: [ + { + fields: ['userId'], + }, + ], classMethods: { accessed: (id) => sequelize.query(` UPDATE files diff --git a/models/login.js b/models/login.js index 855ae63..ef81884 100644 --- a/models/login.js +++ b/models/login.js @@ -4,6 +4,11 @@ export default function (sequelize, DataTypes) { successful: { type: DataTypes.BOOLEAN }, ip: { type: 'inet' }, }, { + indexes: [ + { + fields: ['ip'], + }, + ], classMethods: { associate: (models) => { Login.belongsTo(models.user); diff --git a/models/transaction.js b/models/transaction.js index a846d66..2337e9d 100644 --- a/models/transaction.js +++ b/models/transaction.js @@ -6,6 +6,11 @@ export default function (sequelize, DataTypes) { type: DataTypes.ENUM('direct', 'paypal'), // eslint-disable-line new-cap ip: 'inet', }, { + indexes: [ + { + fields: ['userId'], + }, + ], classMethods: { associate: (models) => { Transaction.belongsTo(models.user); diff --git a/models/user.js b/models/user.js index 0f64415..1507bf9 100644 --- a/models/user.js +++ b/models/user.js @@ -9,6 +9,11 @@ export default function (sequelize, DataTypes) { banned: DataTypes.BOOLEAN, deleted: DataTypes.BOOLEAN, }, { + indexes: [ + { + fields: ['email'], + }, + ], classMethods: { associate: (models) => { User.hasMany(models.file); diff --git a/test/fixtures/user.js b/test/fixtures/user.js index cc3a391..6de7f59 100644 --- a/test/fixtures/user.js +++ b/test/fixtures/user.js @@ -1,27 +1,34 @@ +import co from 'co'; + import models from '../../models'; -function createUser() { - models.user.create({ +import debugname from 'debug'; +const debug = debugname('hostr:db'); + +function *createUser() { + const user = yield models.user.create({ 'email': 'test@hostr.co', 'password': '$pbkdf2-256-1$2$kBhIDRqFwnF/1ms6ZHfME2o2$a48e8c350d26397fcc88bf0a7a2817b1cdcd1ffffe0521a5', 'ip': '127.0.0.1', 'plan': 'Free', 'activated': true, - }).then((user) => { - user.save().then(() => { - models.sequelize.close(); - }); }); + yield user.save(); + yield models.sequelize.close(); } -models.user.findOne({ - where: { - email: 'test@hostr.co', - }, -}).then((user) => { +co(function *sync() { + debug('Syncing schema'); + yield models.sequelize.sync(); + debug('Schema synced'); + const user = yield models.user.findOne({ + where: { + email: 'test@hostr.co', + }, + }); if (user) { - user.destroy().then(createUser); - } else { - createUser(); + yield user.destroy(); } + debug('Creating test user'); + yield createUser(); });