'use strict';

const assert = require('assert');

const db = require('./mocks/databasemock');
const upgrade = require('../src/upgrade');

describe('Upgrade', () => {
	it('should get all upgrade scripts', async () => {
		const files = await upgrade.getAll();
		assert(Array.isArray(files) && files.length > 0);
	});

	it('should throw error', async () => {
		let err;
		try {
			await upgrade.check();
		} catch (_err) {
			err = _err;
		}
		assert.equal(err.message, 'schema-out-of-date');
	});

	it('should run all upgrades', async () => {
		// for upgrade scripts to run
		await db.set('schemaDate', 1);
		await upgrade.run();
	});

	it('should run particular upgrades', async () => {
		const files = await upgrade.getAll();
		await db.set('schemaDate', 1);
		await upgrade.runParticular(files.slice(0, 2));
	});
});