Merge pull request #2168 from automatisch/aut-1350
test(user): write tests for tableName, jsonSchema, relationMappings
This commit is contained in:
81
packages/backend/src/models/__snapshots__/user.test.js.snap
Normal file
81
packages/backend/src/models/__snapshots__/user.test.js.snap
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
|
||||||
|
|
||||||
|
exports[`User model > jsonSchema should have correct validations 1`] = `
|
||||||
|
{
|
||||||
|
"properties": {
|
||||||
|
"createdAt": {
|
||||||
|
"type": "string",
|
||||||
|
},
|
||||||
|
"deletedAt": {
|
||||||
|
"type": "string",
|
||||||
|
},
|
||||||
|
"email": {
|
||||||
|
"format": "email",
|
||||||
|
"maxLength": 255,
|
||||||
|
"minLength": 1,
|
||||||
|
"type": "string",
|
||||||
|
},
|
||||||
|
"fullName": {
|
||||||
|
"minLength": 1,
|
||||||
|
"type": "string",
|
||||||
|
},
|
||||||
|
"id": {
|
||||||
|
"format": "uuid",
|
||||||
|
"type": "string",
|
||||||
|
},
|
||||||
|
"invitationToken": {
|
||||||
|
"type": [
|
||||||
|
"string",
|
||||||
|
"null",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
"invitationTokenSentAt": {
|
||||||
|
"format": "date-time",
|
||||||
|
"type": [
|
||||||
|
"string",
|
||||||
|
"null",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
"password": {
|
||||||
|
"minLength": 6,
|
||||||
|
"type": "string",
|
||||||
|
},
|
||||||
|
"resetPasswordToken": {
|
||||||
|
"type": [
|
||||||
|
"string",
|
||||||
|
"null",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
"resetPasswordTokenSentAt": {
|
||||||
|
"format": "date-time",
|
||||||
|
"type": [
|
||||||
|
"string",
|
||||||
|
"null",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
"roleId": {
|
||||||
|
"format": "uuid",
|
||||||
|
"type": "string",
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"default": "active",
|
||||||
|
"enum": [
|
||||||
|
"active",
|
||||||
|
"invited",
|
||||||
|
],
|
||||||
|
"type": "string",
|
||||||
|
},
|
||||||
|
"trialExpiryDate": {
|
||||||
|
"type": "string",
|
||||||
|
},
|
||||||
|
"updatedAt": {
|
||||||
|
"type": "string",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"fullName",
|
||||||
|
"email",
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
}
|
||||||
|
`;
|
188
packages/backend/src/models/user.test.js
Normal file
188
packages/backend/src/models/user.test.js
Normal file
@@ -0,0 +1,188 @@
|
|||||||
|
import { describe, it, expect, vi } from 'vitest';
|
||||||
|
import Base from './base.js';
|
||||||
|
import AccessToken from './access-token.js';
|
||||||
|
import Connection from './connection.js';
|
||||||
|
import Execution from './execution.js';
|
||||||
|
import Flow from './flow.js';
|
||||||
|
import Identity from './identity.ee.js';
|
||||||
|
import Permission from './permission.js';
|
||||||
|
import Role from './role.js';
|
||||||
|
import Step from './step.js';
|
||||||
|
import Subscription from './subscription.ee.js';
|
||||||
|
import UsageData from './usage-data.ee.js';
|
||||||
|
import User from './user.js';
|
||||||
|
|
||||||
|
describe('User model', () => {
|
||||||
|
it('tableName should return correct name', () => {
|
||||||
|
expect(User.tableName).toBe('users');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('jsonSchema should have correct validations', () => {
|
||||||
|
expect(User.jsonSchema).toMatchSnapshot();
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('relationMappings', () => {
|
||||||
|
it('should return correct associations', () => {
|
||||||
|
const relationMappings = User.relationMappings();
|
||||||
|
|
||||||
|
const expectedRelations = {
|
||||||
|
accessTokens: {
|
||||||
|
relation: Base.HasManyRelation,
|
||||||
|
modelClass: AccessToken,
|
||||||
|
join: {
|
||||||
|
from: 'users.id',
|
||||||
|
to: 'access_tokens.user_id',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
connections: {
|
||||||
|
relation: Base.HasManyRelation,
|
||||||
|
modelClass: Connection,
|
||||||
|
join: {
|
||||||
|
from: 'users.id',
|
||||||
|
to: 'connections.user_id',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
flows: {
|
||||||
|
relation: Base.HasManyRelation,
|
||||||
|
modelClass: Flow,
|
||||||
|
join: {
|
||||||
|
from: 'users.id',
|
||||||
|
to: 'flows.user_id',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
steps: {
|
||||||
|
relation: Base.ManyToManyRelation,
|
||||||
|
modelClass: Step,
|
||||||
|
join: {
|
||||||
|
from: 'users.id',
|
||||||
|
through: {
|
||||||
|
from: 'flows.user_id',
|
||||||
|
to: 'flows.id',
|
||||||
|
},
|
||||||
|
to: 'steps.flow_id',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
executions: {
|
||||||
|
relation: Base.ManyToManyRelation,
|
||||||
|
modelClass: Execution,
|
||||||
|
join: {
|
||||||
|
from: 'users.id',
|
||||||
|
through: {
|
||||||
|
from: 'flows.user_id',
|
||||||
|
to: 'flows.id',
|
||||||
|
},
|
||||||
|
to: 'executions.flow_id',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
usageData: {
|
||||||
|
relation: Base.HasManyRelation,
|
||||||
|
modelClass: UsageData,
|
||||||
|
join: {
|
||||||
|
from: 'usage_data.user_id',
|
||||||
|
to: 'users.id',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
currentUsageData: {
|
||||||
|
relation: Base.HasOneRelation,
|
||||||
|
modelClass: UsageData,
|
||||||
|
join: {
|
||||||
|
from: 'usage_data.user_id',
|
||||||
|
to: 'users.id',
|
||||||
|
},
|
||||||
|
filter: expect.any(Function),
|
||||||
|
},
|
||||||
|
subscriptions: {
|
||||||
|
relation: Base.HasManyRelation,
|
||||||
|
modelClass: Subscription,
|
||||||
|
join: {
|
||||||
|
from: 'subscriptions.user_id',
|
||||||
|
to: 'users.id',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
currentSubscription: {
|
||||||
|
relation: Base.HasOneRelation,
|
||||||
|
modelClass: Subscription,
|
||||||
|
join: {
|
||||||
|
from: 'subscriptions.user_id',
|
||||||
|
to: 'users.id',
|
||||||
|
},
|
||||||
|
filter: expect.any(Function),
|
||||||
|
},
|
||||||
|
role: {
|
||||||
|
relation: Base.HasOneRelation,
|
||||||
|
modelClass: Role,
|
||||||
|
join: {
|
||||||
|
from: 'roles.id',
|
||||||
|
to: 'users.role_id',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
permissions: {
|
||||||
|
relation: Base.HasManyRelation,
|
||||||
|
modelClass: Permission,
|
||||||
|
join: {
|
||||||
|
from: 'users.role_id',
|
||||||
|
to: 'permissions.role_id',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
identities: {
|
||||||
|
relation: Base.HasManyRelation,
|
||||||
|
modelClass: Identity,
|
||||||
|
join: {
|
||||||
|
from: 'identities.user_id',
|
||||||
|
to: 'users.id',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
expect(relationMappings).toStrictEqual(expectedRelations);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('currentUsageData should return the current usage data', () => {
|
||||||
|
const relations = User.relationMappings();
|
||||||
|
|
||||||
|
const firstSpy = vi.fn();
|
||||||
|
|
||||||
|
const limitSpy = vi.fn().mockImplementation(() => ({
|
||||||
|
first: firstSpy,
|
||||||
|
}));
|
||||||
|
|
||||||
|
const orderBySpy = vi.fn().mockImplementation(() => ({
|
||||||
|
limit: limitSpy,
|
||||||
|
}));
|
||||||
|
|
||||||
|
relations.currentUsageData.filter({ orderBy: orderBySpy });
|
||||||
|
|
||||||
|
expect(orderBySpy).toHaveBeenCalledWith('created_at', 'desc');
|
||||||
|
expect(limitSpy).toHaveBeenCalledWith(1);
|
||||||
|
expect(firstSpy).toHaveBeenCalledOnce();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('currentSubscription should return the current subscription', () => {
|
||||||
|
const relations = User.relationMappings();
|
||||||
|
|
||||||
|
const firstSpy = vi.fn();
|
||||||
|
|
||||||
|
const limitSpy = vi.fn().mockImplementation(() => ({
|
||||||
|
first: firstSpy,
|
||||||
|
}));
|
||||||
|
|
||||||
|
const orderBySpy = vi.fn().mockImplementation(() => ({
|
||||||
|
limit: limitSpy,
|
||||||
|
}));
|
||||||
|
|
||||||
|
relations.currentSubscription.filter({ orderBy: orderBySpy });
|
||||||
|
|
||||||
|
expect(orderBySpy).toHaveBeenCalledWith('created_at', 'desc');
|
||||||
|
expect(limitSpy).toHaveBeenCalledWith(1);
|
||||||
|
expect(firstSpy).toHaveBeenCalledOnce();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('virtualAttributes should return correct attributes', () => {
|
||||||
|
const virtualAttributes = User.virtualAttributes;
|
||||||
|
|
||||||
|
const expectedAttributes = ['acceptInvitationUrl'];
|
||||||
|
|
||||||
|
expect(virtualAttributes).toStrictEqual(expectedAttributes);
|
||||||
|
});
|
||||||
|
});
|
Reference in New Issue
Block a user