diff --git a/src/controllers/aliases.js b/src/controllers/aliases.js index dbabca9..1ab9508 100644 --- a/src/controllers/aliases.js +++ b/src/controllers/aliases.js @@ -13,7 +13,7 @@ class Aliases { * @returns {Promise} */ static async get(aliasName) { - const alias = await Alias.get(aliasName); + const alias = await Alias.get(aliasName.slice(1)); if (!alias.id) { throw new Error('Entity with given alias does not exist'); diff --git a/src/models/alias.js b/src/models/alias.js index b629ac7..ac99b36 100644 --- a/src/models/alias.js +++ b/src/models/alias.js @@ -41,7 +41,7 @@ class Alias { * @param {AliasData} data * @param {string} aliasName - alias of entity */ - constructor(data = {}, aliasName) { + constructor(data = {}, aliasName = '') { if (data === null) { data = {}; } @@ -62,6 +62,8 @@ class Alias { async save() { if (!this._id) { const insertedRow = await aliasesDb.insert(this.data); + + this._id = insertedRow._id; } else { await aliasesDb.update({_id: this._id}, this.data); } diff --git a/test/models/alias.js b/test/models/alias.js new file mode 100644 index 0000000..574e9d9 --- /dev/null +++ b/test/models/alias.js @@ -0,0 +1,140 @@ +const {expect} = require('chai'); +const fs = require('fs'); +const path = require('path'); +const config = require('../../config'); +const Alias = require('../../src/models/alias'); +const md5 = require('../utils/md5'); +const aliasTypes = require('../constants/aliasTypes'); +const {aliases} = require('../../src/utils/database'); + +describe('Alias model', () => { + after(() => { + const pathToDB = path.resolve(__dirname, '../../', config.database, './aliases.db'); + + if (fs.existsSync(pathToDB)) { + fs.unlinkSync(pathToDB); + } + }); + + it('Working with empty model', async () => { + let alias = new Alias(); + + expect(alias.data).to.be.a('object'); + + let {data} = alias; + + expect(data._id).to.be.undefined; + expect(data.hash).to.be.undefined; + expect(data.type).to.be.undefined; + expect(data.deprecated).to.be.false; + expect(data.id).to.be.undefined; + + alias = new Alias(); + + data = alias.data; + + expect(data._id).to.be.undefined; + expect(data.hash).to.be.undefined; + expect(data.type).to.be.undefined; + expect(data.deprecated).to.be.false; + expect(data.id).to.be.undefined; + + const initialData = { + _id: 'alias_id', + type: aliasTypes.PAGE, + id: 'page_id' + }; + const aliasName = 'alias name'; + + alias = new Alias(initialData, aliasName); + data = alias.data; + + expect(data._id).to.equal(initialData._id); + expect(data.hash).to.equal(md5(aliasName)); + expect(data.type).to.equal(initialData.type); + expect(data.deprecated).to.equal(false); + + const update = { + type: aliasTypes.PAGE, + id: 'page_id', + hash: md5('another test hash'), + deprecated: true + }; + + alias.data = update; + + data = alias.data; + + expect(data._id).to.equal(initialData._id); + expect(data.type).to.equal(update.type); + expect(data.hash).to.equal(update.hash); + expect(data.deprecated).to.equal(update.deprecated); + }); + + it('Static get method', async () => { + const initialData = { + type: aliasTypes.PAGE, + id: 'page_id' + }; + const aliasName = 'alias name'; + + const alias = new Alias(initialData, aliasName); + + const savedAlias = await alias.save(); + + const foundAlias = await Alias.get(aliasName); + + const {data} = foundAlias; + + expect(data._id).to.equal(savedAlias._id); + expect(data.hash).to.equal(md5(aliasName)); + expect(data.type).to.equal(initialData.type); + expect(data.deprecated).to.equal(false); + }); + + it('Saving, updating and deleting model in the database', async () => { + const initialData = { + type: aliasTypes.PAGE, + id: 'page_id' + }; + const aliasName = 'alias name'; + + const alias = new Alias(initialData, aliasName); + + const savedAlias = await alias.save(); + + expect(savedAlias._id).not.be.undefined; + expect(savedAlias.hash).to.equal(md5(aliasName)); + expect(savedAlias.type).to.equal(initialData.type); + expect(savedAlias.id).to.equal(initialData.id); + expect(savedAlias.deprecated).to.equal(false); + + const insertedAlias = await aliases.findOne({_id: savedAlias._id}); + + expect(insertedAlias._id).to.equal(savedAlias._id); + expect(insertedAlias.hash).to.equal(savedAlias.hash); + expect(insertedAlias.type).to.equal(savedAlias.type); + expect(insertedAlias.id).to.equal(savedAlias.id); + expect(insertedAlias.deprecated).to.equal(savedAlias.deprecated); + + const updateData = { + type: aliasTypes.PAGE, + id: 'page_id', + hash: md5('another test hash'), + deprecated: true + }; + + alias.data = updateData; + await alias.save(); + + expect(alias._id).to.equal(insertedAlias._id); + + const updatedAlias = await aliases.findOne({_id: alias._id}); + + expect(updatedAlias._id).to.equal(savedAlias._id); + expect(updatedAlias.hash).to.equal(updateData.hash); + expect(updatedAlias.type).to.equal(updateData.type); + expect(updatedAlias.id).to.equal(updateData.id); + expect(updatedAlias.deprecated).to.equal(updateData.deprecated); + }); +});