1
0
Fork 0
mirror of https://github.com/codex-team/codex.docs.git synced 2025-07-19 13:19:42 +02:00
codex.docs/test/models/page.js
George Berezhnoy 452d0ae816
Move testing to 3001 port (#8)
Create separate database for testing
Add runtime configuration file support
2018-10-07 19:15:10 +03:00

296 lines
6.8 KiB
JavaScript

const {expect} = require('chai');
const fs = require('fs');
const path = require('path');
const config = require('../../config');
const Page = require('../../src/models/page');
const {pages} = require('../../src/utils/database');
describe('Page model', () => {
after(() => {
const pathToDB = path.resolve(__dirname, '../../', config.database, './pages.db');
if (fs.existsSync(pathToDB)) {
fs.unlinkSync(pathToDB);
}
});
it('Working with empty model', async () => {
let page = new Page();
expect(page.data).to.be.a('object');
let {data} = page;
expect(data._id).to.be.undefined;
expect(data.title).to.be.empty;
expect(data.body).to.be.undefined;
expect(data.parent).to.be.undefined;
page = new Page(null);
data = page.data;
expect(data._id).to.be.undefined;
expect(data.title).to.be.empty;
expect(data.body).to.be.undefined;
expect(data.parent).to.be.undefined;
const initialData = {
_id: 'page_id',
body: {
blocks: [
{
type: 'header',
data: {
text: 'Page header'
}
}
]
}
};
page = new Page(initialData);
const json = page.toJSON();
data = page.data;
expect(data._id).to.equal(initialData._id);
expect(data.title).to.equal(initialData.body.blocks[0].data.text);
expect(data.body).to.deep.equal(initialData.body);
expect(data.parent).to.be.undefined;
expect(json._id).to.equal(initialData._id);
expect(json.title).to.equal(initialData.body.blocks[0].data.text);
expect(json.body).to.deep.equal(initialData.body);
expect(json.parent).to.be.undefined;
const update = {
_id: 12345,
body: {
blocks: [
{
type: 'header',
data: {
text: 'Updated page header'
}
}
]
}
};
page.data = update;
data = page.data;
expect(data._id).to.equal(initialData._id);
expect(data.title).to.equal(update.body.blocks[0].data.text);
expect(data.body).to.equal(update.body);
expect(data.parent).to.be.undefined;
});
it('Saving, updating and deleting model in the database', async () => {
const initialData = {
body: {
blocks: [
{
type: 'header',
data: {
text: 'Page header'
}
}
]
}
};
const page = new Page(initialData);
let savedPage = await page.save();
expect(savedPage._id).not.be.undefined;
expect(savedPage.title).to.equal(initialData.body.blocks[0].data.text);
expect(savedPage.body).to.equal(initialData.body);
expect(page._id).not.be.undefined;
const insertedPage = await pages.findOne({_id: page._id});
expect(insertedPage._id).to.equal(page._id);
expect(insertedPage.title).to.equal(page.title);
expect(insertedPage.body).to.deep.equal(page.body);
const updateData = {
body: {
blocks: [
{
type: 'header',
data: {
text: 'Updated page header'
}
}
]
}
};
page.data = updateData;
await page.save();
expect(page._id).to.equal(insertedPage._id);
const updatedPage = await pages.findOne({_id: page._id});
expect(updatedPage._id).to.equal(savedPage._id);
expect(updatedPage.title).to.equal(updateData.body.blocks[0].data.text);
expect(updatedPage.body).to.deep.equal(updateData.body);
await page.destroy();
expect(page._id).to.be.undefined;
const removedPage = await pages.findOne({_id: updatedPage._id});
expect(removedPage).to.be.null;
});
it('Static get method', async () => {
const initialData = {
body: {
blocks: [
{
type: 'header',
data: {
text: 'Test Page header'
}
}
]
}
};
const page = new Page(initialData);
const savedPage = await page.save();
const foundPage = await Page.get(savedPage._id);
const {data} = foundPage;
expect(data._id).to.equal(savedPage._id);
expect(data.title).to.equal(initialData.body.blocks[0].data.text);
expect(data.body).to.deep.equal(initialData.body);
await page.destroy();
});
it('Static getAll method', async () => {
const pagesToSave = [
new Page({
body: {
blocks: [
{
type: 'header',
data: {
text: 'Page 1 header'
}
}
]
}
}),
new Page({
body: {
blocks: [
{
type: 'header',
data: {
text: 'Page 2 header'
}
}
]
}
})
];
const savedPages = await Promise.all(pagesToSave.map(page => page.save()));
const foundPages = await Page.getAll({_id: {$in: savedPages.map(page => page._id)}});
expect(foundPages.length).to.equal(2);
foundPages.forEach((page, i) => {
expect(page.title).to.equal(pagesToSave[i].body.blocks[0].data.text);
expect(page.body).to.deep.equal(pagesToSave[i].body);
});
});
it('Parent pages', async () => {
const parent = new Page(
{
body: {
blocks: [
{
type: 'header',
data: {
text: 'Parent page header'
}
}
]
}
}
);
const {_id: parentId} = await parent.save();
const child = new Page(
{
body: {
blocks: [
{
type: 'header',
data: {
text: 'Child page header'
}
}
]
}
}
);
child.parent = parent;
const {_id: childId} = await child.save();
const testedParent = await child.parent;
expect(testedParent._id).to.equal(parentId);
expect(testedParent.title).to.equal(parent.body.blocks[0].data.text);
expect(testedParent.body).to.deep.equal(parent.body);
const children = await parent.children;
expect(children.length).to.equal(1);
const testedChild = children.pop();
expect(testedChild._id).to.equal(childId);
expect(testedChild.title).to.equal(child.body.blocks[0].data.text);
expect(testedChild.body).to.deep.equal(child.body);
expect(testedChild._parent).to.equal(child._parent);
expect(testedChild._parent).to.equal(parent._id);
parent.destroy();
child.destroy();
});
it('Extracting title from page body', async () => {
const pageData = {
body: {
blocks: [
{
type: 'header',
data: {
text: 'Page header'
}
}
]
}
};
const page = new Page(pageData);
expect(page.title).to.equal(pageData.body.blocks[0].data.text);
});
});