Skip to content

Commit

Permalink
test: setup_hooks unit test
Browse files Browse the repository at this point in the history
  • Loading branch information
JimmyDaddy committed Aug 11, 2021
1 parent af2fb01 commit c46d3c9
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 22 deletions.
19 changes: 0 additions & 19 deletions src/setup_hooks.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,6 @@ function formatArgs(isInstance, fnName, args, target) {
argsRes = [ target, ...args ];
break;
}
// class.create(values, options)
opts = args[1];
if (opts && opts.hooks === false) useHooks = false;
argsRes = args;
break;
}
case 'update': case 'remove': {
Expand Down Expand Up @@ -91,8 +87,6 @@ function formatArgs(isInstance, fnName, args, target) {
argsRes = [ target, ...args ];
break;
}
default:
throw new Error('Unsupported hook');
}
return {
useHooks,
Expand Down Expand Up @@ -168,18 +162,6 @@ function addHook(target, hookName, func) {
}
}

/**
* Batch setup hooks
* @param {Bone} target
* @param {Object<string, function>} hooks
*/
function setupHooks(target, hooks) {
if (!hooks || !target) return;
Object.keys(hooks).map(hookName => {
addHook(target, hookName, hooks[hookName]);
});
}

/**
* setup hook to class
* @param {Bone} target target class
Expand All @@ -194,7 +176,6 @@ function setupSingleHook(target, hookName, func) {
}

module.exports = {
setupHooks,
setupSingleHook,
hookNames,
};
58 changes: 55 additions & 3 deletions test/unit/hooks.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -85,10 +85,10 @@ describe('hooks', function() {
});

it('create skip hooks', async () => {
assert.rejects(async () => {
await assert.rejects(async () => {
await User.create({ nickname: 'testy', meta: { foo: 1, bar: 'baz'}, status: 1 }, { hooks: false });
});
}, /Error: ER_NO_DEFAULT_FOR_FIELD: Field 'email' doesn't have a default value/);
}, /Error: ER_NO_DEFAULT_FOR_FIELD: Field 'email' doesn't have a default value/);
});

describe('bulkCreate', () => {

Expand Down Expand Up @@ -510,6 +510,58 @@ describe('hooks', function() {
});
});

describe('save', () => {
class User extends Bone {
constructor(opts) {
super(opts);
}
}

User.init(attributes, {
hooks: {
beforeSave(obj) {
console.log(obj);
if (!obj.email) {
obj.email = 'hello@yo.com';
}
},
afterSave(obj){
obj.status = 10;
},
}
});

beforeEach(async () => {
Bone.driver = null;
await connect({
port: process.env.MYSQL_PORT,
user: 'root',
database: 'leoric',
models: [ User ],
});
});

afterEach(async () => {
await User.remove({}, true);
Bone.driver = null;
});

it('create', async () => {
const user = new User({ nickname: 'testy', meta: { foo: 1, bar: 'baz'}, status: 1 });
await user.save();
assert(user.email === 'hello@yo.com');
assert(user.meta.foo === 1);
assert(user.status === 10);
});

it('create skip hooks', async () => {
await assert.rejects(async () => {
const user = new User({ nickname: 'testy', meta: { foo: 1, bar: 'baz'}, status: 1 });
await user.save({ hooks: false });
}, /Error: ER_NO_DEFAULT_FOR_FIELD: Field 'email' doesn't have a default value/);
});
});

describe('addHooks', () => {

describe('hook', () => {
Expand Down

0 comments on commit c46d3c9

Please sign in to comment.