Merge pull request #2219 from automatisch/aut-1350-beforeHooks
test(user): write tests for $beforeInsert and $beforeUpdate
This commit is contained in:
@@ -602,10 +602,17 @@ class User extends Base {
|
|||||||
return conditionMap;
|
return conditionMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lowercaseEmail() {
|
||||||
|
if (this.email) {
|
||||||
|
this.email = this.email.toLowerCase();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
g;
|
||||||
|
|
||||||
async $beforeInsert(queryContext) {
|
async $beforeInsert(queryContext) {
|
||||||
await super.$beforeInsert(queryContext);
|
await super.$beforeInsert(queryContext);
|
||||||
|
|
||||||
this.email = this.email.toLowerCase();
|
this.lowercaseEmail();
|
||||||
await this.generateHash();
|
await this.generateHash();
|
||||||
|
|
||||||
if (appConfig.isCloud) {
|
if (appConfig.isCloud) {
|
||||||
@@ -616,9 +623,7 @@ class User extends Base {
|
|||||||
async $beforeUpdate(opt, queryContext) {
|
async $beforeUpdate(opt, queryContext) {
|
||||||
await super.$beforeUpdate(opt, queryContext);
|
await super.$beforeUpdate(opt, queryContext);
|
||||||
|
|
||||||
if (this.email) {
|
this.lowercaseEmail();
|
||||||
this.email = this.email.toLowerCase();
|
|
||||||
}
|
|
||||||
|
|
||||||
await this.generateHash();
|
await this.generateHash();
|
||||||
}
|
}
|
||||||
|
@@ -1244,4 +1244,112 @@ describe('User model', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('lowercaseEmail should lowercase the user email', () => {
|
||||||
|
const user = new User();
|
||||||
|
user.email = 'USER@AUTOMATISCH.IO';
|
||||||
|
|
||||||
|
user.lowercaseEmail();
|
||||||
|
|
||||||
|
expect(user.email).toBe('user@automatisch.io');
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('$beforeInsert', () => {
|
||||||
|
it('should call super.$beforeInsert', async () => {
|
||||||
|
const superBeforeInsertSpy = vi
|
||||||
|
.spyOn(User.prototype, '$beforeInsert')
|
||||||
|
.mockResolvedValue();
|
||||||
|
|
||||||
|
await createUser();
|
||||||
|
|
||||||
|
expect(superBeforeInsertSpy).toHaveBeenCalledOnce();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should lowercase the user email', async () => {
|
||||||
|
const user = await createUser({
|
||||||
|
fullName: 'Sample user',
|
||||||
|
email: 'USER@AUTOMATISCH.IO',
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(user.email).toBe('user@automatisch.io');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should generate password hash', async () => {
|
||||||
|
const user = await createUser({
|
||||||
|
fullName: 'Sample user',
|
||||||
|
email: 'user@automatisch.io',
|
||||||
|
password: 'sample-password',
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(user.password).not.toBe('sample-password');
|
||||||
|
expect(await user.login('sample-password')).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should start trial period if Automatisch is a cloud installation', async () => {
|
||||||
|
vi.spyOn(appConfig, 'isCloud', 'get').mockReturnValue(true);
|
||||||
|
|
||||||
|
const startTrialPeriodSpy = vi.spyOn(User.prototype, 'startTrialPeriod');
|
||||||
|
|
||||||
|
await createUser({
|
||||||
|
fullName: 'Sample user',
|
||||||
|
email: 'user@automatisch.io',
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(startTrialPeriodSpy).toHaveBeenCalledOnce();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should not start trial period if Automatisch is not a cloud installation', async () => {
|
||||||
|
vi.spyOn(appConfig, 'isCloud', 'get').mockReturnValue(false);
|
||||||
|
|
||||||
|
const startTrialPeriodSpy = vi.spyOn(User.prototype, 'startTrialPeriod');
|
||||||
|
|
||||||
|
await createUser({
|
||||||
|
fullName: 'Sample user',
|
||||||
|
email: 'user@automatisch.io',
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(startTrialPeriodSpy).not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('$beforeUpdate', () => {
|
||||||
|
it('should call super.$beforeUpdate', async () => {
|
||||||
|
const superBeforeUpdateSpy = vi
|
||||||
|
.spyOn(User.prototype, '$beforeUpdate')
|
||||||
|
.mockResolvedValue();
|
||||||
|
|
||||||
|
const user = await createUser({
|
||||||
|
fullName: 'Sample user',
|
||||||
|
email: 'user@automatisch.io',
|
||||||
|
});
|
||||||
|
|
||||||
|
await user.$query().patch({ fullName: 'Updated user name' });
|
||||||
|
|
||||||
|
expect(superBeforeUpdateSpy).toHaveBeenCalledOnce();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should lowercase the user email if given', async () => {
|
||||||
|
const user = await createUser({
|
||||||
|
fullName: 'Sample user',
|
||||||
|
email: 'user@automatisch.io',
|
||||||
|
});
|
||||||
|
|
||||||
|
await user.$query().patchAndFetch({ email: 'NEW_EMAIL@AUTOMATISCH.IO' });
|
||||||
|
|
||||||
|
expect(user.email).toBe('new_email@automatisch.io');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should generate password hash', async () => {
|
||||||
|
const user = await createUser({
|
||||||
|
fullName: 'Sample user',
|
||||||
|
email: 'user@automatisch.io',
|
||||||
|
password: 'sample-password',
|
||||||
|
});
|
||||||
|
|
||||||
|
await user.$query().patchAndFetch({ password: 'new-password' });
|
||||||
|
|
||||||
|
expect(user.password).not.toBe('new-password');
|
||||||
|
expect(await user.login('new-password')).toBe(true);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
Reference in New Issue
Block a user