diff --git a/development/generate-migration.sh b/development/generate-migration.sh new file mode 100755 index 000000000..5fb85feb5 --- /dev/null +++ b/development/generate-migration.sh @@ -0,0 +1,15 @@ +#! /bin/bash +g-migration() { + [[ -z "$1" ]] && { echo "Migration version is required!" ; exit 1; } + local vnum=$1 + if (($1 < 100)); then + vnum=0$1 + fi + touch app/scripts/migrations/"$vnum".js + cp app/scripts/migrations/template.js app/scripts/migrations/"$vnum".js + + touch test/unit/migrations/"$vnum".js + cp test/unit/migrations/template-test.js test/unit/migrations/"$vnum"-test.js +} + +g-migration "$1" diff --git a/package.json b/package.json index 27682c9f5..adc34119e 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,8 @@ "version:bump": "node development/run-version-bump.js", "storybook": "start-storybook -p 6006 -c .storybook", "update-changelog": "./development/auto-changelog.sh", - "rollback": "./development/rollback.sh" + "rollback": "./development/rollback.sh", + "generate:migration": "./development/generate-migration.sh" }, "resolutions": { "3box/ipfs/ipld-zcash/zcash-bitcore-lib/lodash": "^4.17.12", diff --git a/test/unit/migrations/migrator-test.js b/test/unit/migrations/migrator-test.js index 0a16282a4..e5e8b1d32 100644 --- a/test/unit/migrations/migrator-test.js +++ b/test/unit/migrations/migrator-test.js @@ -1,5 +1,7 @@ +const fs = require('fs') const assert = require('assert') const clone = require('clone') +const pify = require('pify') const Migrator = require('../../../app/scripts/lib/migrator/') const liveMigrations = require('../../../app/scripts/migrations/') const stubMigrations = [ @@ -35,6 +37,23 @@ const firstTimeState = { meta: { version: 0 }, data: require('../../../app/scripts/first-time-state'), } +describe('liveMigrations require list', () => { + it('should include all the migrations', async () => { + const fileNames = await pify(cb => fs.readdir('./app/scripts/migrations/', cb))() + const migrationNumbers = fileNames.reduce((agg, filename) => { + const name = filename.split('.')[0] + if (/^\d+$/.test(name)) { + agg.push(name) + } + return agg + }, []).map((num) => parseInt(num)) + + migrationNumbers.forEach((num) => { + const migration = liveMigrations.find((m) => m.version === num) + assert(migration, `migration should be include in the index missing migration ${num}`) + }) + }) +}) describe('Migrator', () => { const migrator = new Migrator({ migrations: stubMigrations })