diff --git a/migrations/20150604_ultimateGearSets.js b/migrations/20150604_ultimateGearSets.js index 5e1202ebef..a094b88aef 100644 --- a/migrations/20150604_ultimateGearSets.js +++ b/migrations/20150604_ultimateGearSets.js @@ -3,19 +3,20 @@ */ var migrationName = '20150604_ultimateGearSets'; -var authorName = 'Sabe'; // in case script author needs to know when their ... -var authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done +var authorName = process.env.AUTHOR_NAME || 'Sabe'; // in case script author needs to know when their ... +var authorUuid = process.env.AUTHOR_UUID || '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done /* * grant the new ultimateGearSets achievement for existing users' collected equipment */ -var dbserver = 'localhost:27017'; // CHANGE THIS FOR PRODUCTION DATABASE +var dbserver = process.env.DB_SERVER || 'localhost:27017'; // CHANGE THIS FOR PRODUCTION DATABASE +var dbname = process.env.DB_NAME || 'habitrpg'; var mongo = require('mongoskin'); var _ = require('lodash'); -var dbUsers = mongo.db(dbserver + '/habitrpg?auto_reconnect').collection('users'); +var dbUsers = mongo.db(dbserver + '/' + dbname + '?auto_reconnect').collection('users'); var fields = { 'achievements.ultimateGearSets':1 diff --git a/test/migrations/20150605_ultimate_achievement_backfill.coffee b/test/migrations/20150605_ultimate_achievement_backfill.coffee new file mode 100644 index 0000000000..b5646020b0 --- /dev/null +++ b/test/migrations/20150605_ultimate_achievement_backfill.coffee @@ -0,0 +1,74 @@ +'use strict' +TEST_DB = process.env.DB_NAME = 'habitrpg_migration_test' +process.env.NODE_DB_URI = 'mongodb://localhost/' + TEST_DB + +app = require('../../website/src/server') +sh = require('shelljs') + +runMigration = -> + sh.exec 'node ./migrations/20150604_ultimateGearSets.js' + +describe 'Backfill for granting ultimate gear sets achievement', -> + before (done) -> + sh.exec "mongo \"#{TEST_DB}\" --eval \"db.dropDatabase()\"" + done() + + context 'User without any purchased equipment', -> + before (done) -> + registerNewUser done, true + + it 'does not update user', (done)-> + user_gear = user.items.gear.owned + expect(user_gear.weapon_wizard_6).to.not.exist + expect(user.achievements.ultimateGearSets).to.not.exist + + runMigration() + User.findById user._id, (err, _user) -> + user = _user + expect(user.achievements.ultimateGearSets).to.not.exist + done() + + context 'User with all but one needed piece of equipment', -> + before (done) -> + registerNewUser -> + items = { + weapon_wizard_6: true + armor_wizard_5: true + } + + User.findByIdAndUpdate user._id, {'items.gear.owned': items}, (err, _user) -> + user = _user + done() + , true + + it 'does not update user', (done)-> + + runMigration() + + User.findById user._id, (err, _user) -> + user = _user + expect(user.achievements.ultimateGearSets).to.not.exist + done() + + context 'User with all necessary equipment', -> + before (done) -> + registerNewUser -> + items = { + weapon_wizard_6: true + armor_wizard_5: true + head_wizard_5: true + } + + User.findByIdAndUpdate user._id, {'items.gear.owned': items}, (err, _user) -> + user = _user + done() + , true + + it 'grants user ultimate gear', (done)-> + + runMigration() + + User.findById user._id, (err, _user) -> + user = _user + expect(user.achievements.ultimateGearSets.wizard).to.exist + done()