WIP pass the failed tests.

This commit is contained in:
Ahmed Bouhuolia
2020-05-17 07:08:12 +02:00
parent 00de156c9f
commit 10f636d2bc
77 changed files with 2164 additions and 1403 deletions

View File

@@ -1,282 +1,284 @@
import knexFactory from 'knex-factory';
import KnexFactory from '@/lib/KnexFactory';
import faker from 'faker';
import knex from '@/database/knex';
import { hashPassword } from '@/utils';
const factory = knexFactory(knex);
factory.define('user', 'users', async () => {
const hashedPassword = await hashPassword('admin');
return {
first_name: faker.name.firstName(),
last_name: faker.name.lastName(),
email: faker.internet.email(),
phone_number: faker.phone.phoneNumberFormat().replace('-', ''),
active: 1,
password: hashedPassword,
};
});
export default (tenantDb) => {
const factory = new KnexFactory(tenantDb);
factory.define('password_reset', 'password_resets', async () => {
const user = await faker.create('user');
return {
user_id: user.id,
token: faker.lorem.slug,
};
});
factory.define('user', 'users', async () => {
// const hashedPassword = await hashPassword('admin');
factory.define('account_type', 'account_types', async () => ({
name: faker.lorem.words(2),
normal: 'debit',
}));
return {
first_name: faker.name.firstName(),
last_name: faker.name.lastName(),
email: faker.internet.email(),
phone_number: faker.phone.phoneNumberFormat().replace('-', ''),
active: 1,
// password: hashedPassword,
};
});
factory.define('account_balance', 'account_balances', async () => {
const account = await factory.create('account');
factory.define('password_reset', 'password_resets', async () => {
return {
user_id: null,
token: faker.lorem.slug,
};
});
return {
account_id: account.id,
amount: faker.random.number(),
currency_code: 'USD',
};
});
factory.define('account_type', 'account_types', async () => ({
name: faker.lorem.words(2),
normal: 'debit',
}));
factory.define('account', 'accounts', async () => {
const accountType = await factory.create('account_type');
return {
factory.define('account_balance', 'account_balances', async () => {
const account = await factory.create('account');
return {
account_id: account.id,
amount: faker.random.number(),
currency_code: 'USD',
};
});
factory.define('account', 'accounts', async () => {
const accountType = await factory.create('account_type');
return {
name: faker.lorem.word(),
code: faker.random.number(),
account_type_id: accountType.id,
description: faker.lorem.paragraph(),
};
});
factory.define('account_transaction', 'accounts_transactions', async () => {
const account = await factory.create('account');
const user = await factory.create('user');
return {
account_id: account.id,
credit: faker.random.number(),
debit: 0,
user_id: user.id,
};
});
factory.define('manual_journal', 'manual_journals', async () => {
const user = await factory.create('user');
return {
journal_number: faker.random.number(),
transaction_type: '',
amount: faker.random.number(),
date: faker.date.future,
status: 1,
user_id: user.id,
};
});
factory.define('item_category', 'items_categories', () => ({
name: faker.name.firstName(),
description: faker.lorem.text(),
parent_category_id: null,
}));
factory.define('item_metadata', 'items_metadata', async () => {
const item = await factory.create('item');
return {
key: faker.lorem.slug(),
value: faker.lorem.word(),
item_id: item.id,
};
});
factory.define('item', 'items', async () => {
const category = await factory.create('item_category');
const costAccount = await factory.create('account');
const sellAccount = await factory.create('account');
const inventoryAccount = await factory.create('account');
return {
name: faker.lorem.word(),
note: faker.lorem.paragraph(),
cost_price: faker.random.number(),
sell_price: faker.random.number(),
cost_account_id: costAccount.id,
sell_account_id: sellAccount.id,
inventory_account_id: inventoryAccount.id,
category_id: category.id,
};
});
factory.define('setting', 'settings', async () => {
const user = await factory.create('user');
return {
key: faker.lorem.slug(),
user_id: user.id,
type: 'string',
value: faker.lorem.words(),
group: 'default',
};
});
factory.define('role', 'roles', async () => ({
name: faker.lorem.word(),
code: faker.random.number(),
account_type_id: accountType.id,
description: faker.lorem.paragraph(),
};
});
factory.define('account_transaction', 'accounts_transactions', async () => {
const account = await factory.create('account');
const user = await factory.create('user');
return {
account_id: account.id,
credit: faker.random.number(),
debit: 0,
user_id: user.id,
};
});
factory.define('manual_journal', 'manual_journals', async () => {
const user = await factory.create('user');
return {
journal_number: faker.random.number(),
transaction_type: '',
amount: faker.random.number(),
date: faker.date.future,
status: 1,
user_id: user.id,
};
});
factory.define('item_category', 'items_categories', () => ({
name: faker.name.firstName(),
description: faker.lorem.text(),
parent_category_id: null,
}));
factory.define('item_metadata', 'items_metadata', async () => {
const item = await factory.create('item');
return {
key: faker.lorem.slug(),
value: faker.lorem.word(),
item_id: item.id,
};
});
factory.define('item', 'items', async () => {
const category = await factory.create('item_category');
const costAccount = await factory.create('account');
const sellAccount = await factory.create('account');
const inventoryAccount = await factory.create('account');
return {
name: faker.lorem.word(),
note: faker.lorem.paragraph(),
cost_price: faker.random.number(),
sell_price: faker.random.number(),
cost_account_id: costAccount.id,
sell_account_id: sellAccount.id,
inventory_account_id: inventoryAccount.id,
category_id: category.id,
};
});
factory.define('setting', 'settings', async () => {
const user = await factory.create('user');
return {
key: faker.lorem.slug(),
user_id: user.id,
type: 'string',
value: faker.lorem.words(),
group: 'default',
};
});
factory.define('role', 'roles', async () => ({
name: faker.lorem.word(),
description: faker.lorem.words(),
predefined: false,
}));
factory.define('user_has_role', 'user_has_roles', async () => {
const user = await factory.create('user');
const role = await factory.create('role');
return {
user_id: user.id,
role_id: role.id,
};
});
factory.define('permission', 'permissions', async () => {
const permissions = ['create', 'edit', 'delete', 'view', 'owner'];
const randomPermission = permissions[Math.floor(Math.random() * permissions.length)];
return {
name: randomPermission,
};
});
factory.define('role_has_permission', 'role_has_permissions', async () => {
const permission = await factory.create('permission');
const role = await factory.create('role');
const resource = await factory.create('resource');
return {
role_id: role.id,
permission_id: permission.id,
resource_id: resource.id,
};
});
factory.define('resource', 'resources', () => ({
name: faker.lorem.word(),
}));
factory.define('view', 'views', async () => {
const resource = await factory.create('resource');
return {
name: faker.lorem.word(),
resource_id: resource.id,
description: faker.lorem.words(),
predefined: false,
};
});
}));
factory.define('resource_field', 'resource_fields', async () => {
const resource = await factory.create('resource');
const dataTypes = ['select', 'date', 'text'];
factory.define('user_has_role', 'user_has_roles', async () => {
const user = await factory.create('user');
const role = await factory.create('role');
return {
label_name: faker.lorem.words(),
key: faker.lorem.slug(),
data_type: dataTypes[Math.floor(Math.random() * dataTypes.length)],
help_text: faker.lorem.words(),
default: faker.lorem.word(),
resource_id: resource.id,
active: true,
columnable: true,
predefined: false,
};
});
return {
user_id: user.id,
role_id: role.id,
};
});
factory.define('resource_custom_field_metadata', 'resource_custom_fields_metadata', async () => {
const resource = await factory.create('resource');
factory.define('permission', 'permissions', async () => {
const permissions = ['create', 'edit', 'delete', 'view', 'owner'];
const randomPermission = permissions[Math.floor(Math.random() * permissions.length)];
return {
resource_id: resource.id,
resource_item_id: 1,
key: faker.lorem.words(),
value: faker.lorem.words(),
};
});
return {
name: randomPermission,
};
});
factory.define('view_role', 'view_roles', async () => {
const view = await factory.create('view');
const field = await factory.create('resource_field');
factory.define('role_has_permission', 'role_has_permissions', async () => {
const permission = await factory.create('permission');
const role = await factory.create('role');
const resource = await factory.create('resource');
return {
view_id: view.id,
index: faker.random.number(),
field_id: field.id,
value: '',
comparator: '',
};
});
return {
role_id: role.id,
permission_id: permission.id,
resource_id: resource.id,
};
});
factory.define('view_column', 'view_has_columns', async () => {
const view = await factory.create('view');
const field = await factory.create('resource_field');
factory.define('resource', 'resources', () => ({
name: faker.lorem.word(),
}));
return {
field_id: field.id,
view_id: view.id,
// index: 1,
};
});
factory.define('view', 'views', async () => {
const resource = await factory.create('resource');
return {
name: faker.lorem.word(),
resource_id: resource.id,
predefined: false,
};
});
factory.define('expense', 'expenses', async () => {
const paymentAccount = await factory.create('account');
const expenseAccount = await factory.create('account');
const user = await factory.create('user');
factory.define('resource_field', 'resource_fields', async () => {
const resource = await factory.create('resource');
const dataTypes = ['select', 'date', 'text'];
return {
payment_account_id: paymentAccount.id,
expense_account_id: expenseAccount.id,
user_id: user.id,
amount: faker.random.number(),
currency_code: 'USD',
};
});
return {
label_name: faker.lorem.words(),
key: faker.lorem.slug(),
data_type: dataTypes[Math.floor(Math.random() * dataTypes.length)],
help_text: faker.lorem.words(),
default: faker.lorem.word(),
resource_id: resource.id,
active: true,
columnable: true,
predefined: false,
};
});
factory.define('option', 'options', async () => {
return {
key: faker.lorem.slug(),
value: faker.lorem.slug(),
group: faker.lorem.slug(),
};
});
factory.define('resource_custom_field_metadata', 'resource_custom_fields_metadata', async () => {
const resource = await factory.create('resource');
factory.define('currency', 'currencies', async () => {
return {
currency_name: faker.lorem.slug(),
currency_code: 'USD',
};
});
return {
resource_id: resource.id,
resource_item_id: 1,
key: faker.lorem.words(),
value: faker.lorem.words(),
};
});
factory.define('exchange_rate', 'exchange_rates', async () => {
return {
date: '2020-02-02',
currency_code: 'USD',
exchange_rate: faker.random.number(),
};
});
factory.define('view_role', 'view_roles', async () => {
const view = await factory.create('view');
const field = await factory.create('resource_field');
factory.define('budget', 'budgets', async () => {
return {
name: faker.lorem.slug(),
fiscal_year: '2020',
period: 'month',
account_types: 'profit_loss',
};
});
return {
view_id: view.id,
index: faker.random.number(),
field_id: field.id,
value: '',
comparator: '',
};
});
factory.define('budget_entry', 'budget_entries', async () => {
const budget = await factory.create('budget');
const account = await factory.create('account');
factory.define('view_column', 'view_has_columns', async () => {
const view = await factory.create('view');
const field = await factory.create('resource_field');
return {
account_id: account.id,
budget_id: budget.id,
amount: 1000,
order: 1,
};
});
return {
field_id: field.id,
view_id: view.id,
// index: 1,
};
});
export default factory;
factory.define('expense', 'expenses', async () => {
const paymentAccount = await factory.create('account');
const expenseAccount = await factory.create('account');
const user = await factory.create('user');
return {
payment_account_id: paymentAccount.id,
expense_account_id: expenseAccount.id,
user_id: user.id,
amount: faker.random.number(),
currency_code: 'USD',
};
});
factory.define('option', 'options', async () => {
return {
key: faker.lorem.slug(),
value: faker.lorem.slug(),
group: faker.lorem.slug(),
};
});
factory.define('currency', 'currencies', async () => {
return {
currency_name: faker.lorem.slug(),
currency_code: 'USD',
};
});
factory.define('exchange_rate', 'exchange_rates', async () => {
return {
date: '2020-02-02',
currency_code: 'USD',
exchange_rate: faker.random.number(),
};
});
factory.define('budget', 'budgets', async () => {
return {
name: faker.lorem.slug(),
fiscal_year: '2020',
period: 'month',
account_types: 'profit_loss',
};
});
factory.define('budget_entry', 'budget_entries', async () => {
const budget = await factory.create('budget');
const account = await factory.create('account');
return {
account_id: account.id,
budget_id: budget.id,
amount: 1000,
order: 1,
};
});
return factory;
}

View File

@@ -0,0 +1,16 @@
import KnexFactory from '@/lib/KnexFactory';
import systemDb from '@/database/knex';
import faker from 'faker';
export default () => {
const factory = new KnexFactory(systemDb);
factory.define('password_reset', 'password_resets', async () => {
return {
email: faker.lorem.email,
token: faker.lorem.slug,
};
});
return factory;
};

View File

@@ -3,6 +3,7 @@ import { knexSnakeCaseMappers } from 'objection';
import knexfile from '@/../config/systemKnexfile';
const config = knexfile[process.env.NODE_ENV];
const knex = Knex({
...config,
...knexSnakeCaseMappers({ upperCase: true }),

View File

@@ -4,10 +4,6 @@ import config from '@/../config/config';
const knexConfig = knexfile[process.env.NODE_ENV];
console.log({
superUser: config.manager.superUser,
superPassword: config.manager.superPassword,
});
const dbManager = knexManager.databaseManagerFactory({
knex: knexConfig,
dbManager: {

View File

@@ -5,6 +5,8 @@ exports.up = (knex) => knex.schema.createTable('roles', (table) => {
table.string('description');
table.boolean('predefined').default(false);
table.timestamps();
});
}).raw('ALTER TABLE `ROLES` AUTO_INCREMENT = 1000');
exports.down = (knex) => knex.schema.dropTable('roles');

View File

@@ -13,7 +13,7 @@ exports.up = function (knex) {
table.date('invite_accepted_at');
table.timestamps();
});
}).raw('ALTER TABLE `USERS` AUTO_INCREMENT = 1000');;
};
exports.down = function (knex) {

View File

@@ -1,16 +0,0 @@
exports.up = function(knex) {
return knex.schema.createTable('oauth_tokens', (table) => {
table.increments();
table.string('access_token');
table.date('access_token_expires_on');
table.integer('client_id').unsigned();
table.string('refresh_token');
table.date('refresh_token_expires_on');
table.integer('user_id').unsigned();
});
};
exports.down = function(knex) {
return knex.schema.dropTableIfExists('oauth_tokens');
};

View File

@@ -1,11 +0,0 @@
exports.up = function(knex) {
return knex.schema.createTable('oauth_clients', (table) => {
table.increments();
table.integer('client_id').unsigned();
table.string('client_secret');
table.string('redirect_uri');
});
};
exports.down = (knex) => knex.schema.dropTableIfExists('oauth_clients');

View File

@@ -7,7 +7,7 @@ exports.up = function (knex) {
table.string('type');
table.string('key');
table.string('value');
});
}).raw('ALTER TABLE `SETTINGS` AUTO_INCREMENT = 2000');
};
exports.down = (knex) => knex.schema.dropTableIfExists('settings');

View File

@@ -4,6 +4,7 @@ exports.up = function (knex) {
table.increments();
table.string('name');
table.string('type');
table.string('sku');
table.decimal('cost_price').unsigned();
table.decimal('sell_price').unsigned();
table.string('currency_code', 3);
@@ -15,7 +16,7 @@ exports.up = function (knex) {
table.integer('category_id').unsigned();
table.integer('user_id').unsigned();
table.timestamps();
});
}).raw('ALTER TABLE `ITEMS` AUTO_INCREMENT = 1000');;
};
exports.down = (knex) => knex.schema.dropTableIfExists('items');

View File

@@ -1,7 +1,7 @@
exports.up = function (knex) {
return knex.schema.createTable('accounts', (table) => {
table.increments();
table.bigIncrements('id').comment('Auto-generated id');;
table.string('name');
table.integer('account_type_id');
table.integer('parent_account_id');
@@ -11,7 +11,7 @@ exports.up = function (knex) {
table.integer('index').unsigned();
table.boolean('predefined').defaultTo(false);
table.timestamps();
}).then(() => {
}).raw('ALTER TABLE `ACCOUNTS` AUTO_INCREMENT = 1000').then(() => {
return knex.seed.run({
specific: 'seed_accounts.js',
});

View File

@@ -1,11 +0,0 @@
exports.up = function (knex) {
return knex.schema.createTable('items_metadata', (table) => {
table.increments();
table.string('key');
table.string('value');
table.integer('item_id').unsigned();
});
};
exports.down = (knex) => knex.schema.dropTableIfExists('items_metadata');

View File

@@ -7,7 +7,7 @@ exports.up = (knex) => {
table.string('root_type');
table.boolean('balance_sheet');
table.boolean('income_sheet');
}).then(() => {
}).raw('ALTER TABLE `ACCOUNT_TYPES` AUTO_INCREMENT = 1000').then(() => {
return knex.seed.run({
specific: 'seed_account_types.js',
});

View File

@@ -14,7 +14,7 @@ exports.up = function (knex) {
table.integer('index');
table.json('options');
table.integer('resource_id').unsigned();
}).then(() => {
}).raw('ALTER TABLE `RESOURCE_FIELDS` AUTO_INCREMENT = 1000').then(() => {
return knex.seed.run({
specific: 'seed_resources_fields.js',
});

View File

@@ -5,6 +5,8 @@ exports.up = function (knex) {
table.integer('view_id').unsigned();
table.integer('field_id').unsigned();
table.integer('index').unsigned();
}).raw('ALTER TABLE `ITEMS_CATEGORIES` AUTO_INCREMENT = 1000').then(() => {
});
};

View File

@@ -7,7 +7,7 @@ exports.up = function (knex) {
table.string('comparator');
table.string('value');
table.integer('view_id').unsigned();
}).then(() => {
}).raw('ALTER TABLE `VIEW_ROLES` AUTO_INCREMENT = 1000').then(() => {
return knex.seed.run({
specific: 'seed_views_roles.js',
});

View File

@@ -7,7 +7,7 @@ exports.up = function (knex) {
table.integer('resource_id').unsigned().references('id').inTable('resources');
table.boolean('favourite');
table.string('roles_logic_expression');
}).then(() => {
}).raw('ALTER TABLE `VIEWS` AUTO_INCREMENT = 1000').then(() => {
return knex.seed.run({
specific: 'seed_views.js',
});

View File

@@ -13,7 +13,7 @@ exports.up = function(knex) {
table.integer('user_id').unsigned();
table.date('date');
table.timestamps();
});
}).raw('ALTER TABLE `ACCOUNTS_TRANSACTIONS` AUTO_INCREMENT = 1000');
};
exports.down = function(knex) {

View File

@@ -12,7 +12,7 @@ exports.up = function(knex) {
table.string('attachment_file');
table.integer('user_id').unsigned();
table.timestamps();
});
}).raw('ALTER TABLE `MANUAL_JOURNALS` AUTO_INCREMENT = 1000');
};
exports.down = function(knex) {

View File

@@ -4,7 +4,7 @@ exports.up = function(knex) {
table.increments();
table.string('currency_name');
table.string('currency_code', 4);
})
}).raw('ALTER TABLE `CURRENCIES` AUTO_INCREMENT = 1000');
};
exports.down = function(knex) {

View File

@@ -5,7 +5,7 @@ exports.up = function(knex) {
table.string('currency_code', 4);
table.decimal('exchange_rate');
table.date('date');
});
}).raw('ALTER TABLE `EXCHANGE_RATES` AUTO_INCREMENT = 1000');
};
exports.down = function(knex) {