From 86c57af94b62d9dac1a366479186a8e72c3381f0 Mon Sep 17 00:00:00 2001 From: Faris Ansari Date: Fri, 13 Dec 2019 12:43:45 +0530 Subject: [PATCH] test: Add test for database migration --- tests/test_database.js | 2 +- tests/test_migrate.js | 76 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 tests/test_migrate.js diff --git a/tests/test_database.js b/tests/test_database.js index 8bd469aa..da476f97 100644 --- a/tests/test_database.js +++ b/tests/test_database.js @@ -2,7 +2,7 @@ const assert = require('assert'); const frappe = require('frappejs'); const helpers = require('./helpers'); -describe('Database', () => { +describe('Database CRUD', () => { before(async function() { await helpers.initSqlite(); }); diff --git a/tests/test_migrate.js b/tests/test_migrate.js new file mode 100644 index 00000000..b1cb5684 --- /dev/null +++ b/tests/test_migrate.js @@ -0,0 +1,76 @@ +const assert = require('assert'); +const frappe = require('frappejs'); +const server = require('frappejs/server'); +const SQLite = require('frappejs/backends/sqlite'); + +let Person = { + name: 'Person', + fields: [ + { + label: 'Full Name', + fieldname: 'name', + fieldtype: 'Data' + }, + { + label: 'Age', + fieldname: 'age', + fieldtype: 'Int' + }, + { + label: 'Gender', + fieldname: 'gender', + fieldtype: 'Link', + target: 'Gender' + } + ] +}; + +let Gender = { + name: 'Gender', + fields: [ + { + label: 'Name', + fieldname: 'name', + fieldtype: 'Data' + } + ] +}; + +describe('Database Migrate', () => { + it('should create tables for model definition', async () => { + let dbPath = '_migrate_test.db'; + server.init(); + let models = { + models: { + Person, + Gender + } + }; + frappe.models = {}; + frappe.registerModels(models); + frappe.db = new SQLite({ dbPath }); + await frappe.db.connect(); + await frappe.db.migrate(); + + let tables = await frappe.db + .knex('sqlite_master') + .select('name') + .where('type', 'table') + .orderBy('name') + .pluck('name'); + + // check if tables were created + assert.deepEqual(['Gender', 'Person'], tables); + + let fields = await frappe.db.sql('PRAGMA table_info(??)', 'Person') + // check if standard fields and model fields were created + assert.equal(fields.length, 8); + assert.equal(fields.find(d => d.name === 'age').type, 'integer'); + + let foreignKeys = await frappe.db.sql('PRAGMA foreign_key_list(??)', 'Person') + // check for foreign keys + assert.equal(foreignKeys.length, 1); + assert.equal(foreignKeys[0].from, 'gender'); + assert.equal(foreignKeys[0].table, 'Gender'); + }); +});