Signed-off-by: Pierre Noël <petersg83@gmail.com>
This commit is contained in:
Pierre Noël 2020-08-03 12:27:42 +02:00
parent ba8954794b
commit c9545f2b7d
6 changed files with 61 additions and 21 deletions

View File

@ -0,0 +1,24 @@
'use strict';
const metricsService = require('../metrics');
describe('Metrics', () => {
test('sendDidInviteUser', async () => {
const send = jest.fn(() => Promise.resolve());
const countUsers = jest.fn(() => Promise.resolve(2));
const countRoles = jest.fn(() => Promise.resolve(3));
global.strapi = {
telemetry: { send },
admin: {
services: {
user: { count: countUsers },
role: { count: countRoles },
},
},
};
await metricsService.sendDidInviteUser();
expect(send).toHaveBeenCalledWith('didInviteUser', { numberOfRoles: 3, numberOfUsers: 2 });
});
});

View File

@ -27,7 +27,7 @@ describe('User', () => {
describe('create', () => {
const count = jest.fn(() => Promise.resolve(1));
const send = jest.fn();
const sendDidInviteUser = jest.fn();
test('Creates a user by merging given and default attributes', async () => {
const create = jest.fn(user => Promise.resolve(user));
@ -35,12 +35,12 @@ describe('User', () => {
const hashPassword = jest.fn(() => Promise.resolve('123456789'));
global.strapi = {
telemetry: { send },
admin: {
services: {
token: { createToken },
auth: { hashPassword },
role: { count },
metrics: { sendDidInviteUser },
},
},
query() {
@ -64,12 +64,12 @@ describe('User', () => {
const hashPassword = jest.fn(() => Promise.resolve('123456789'));
global.strapi = {
telemetry: { send },
admin: {
services: {
token: { createToken },
auth: { hashPassword },
role: { count },
metrics: { sendDidInviteUser },
},
},
query() {
@ -106,12 +106,12 @@ describe('User', () => {
const hashPassword = jest.fn(() => Promise.resolve('123456789'));
global.strapi = {
telemetry: { send },
admin: {
services: {
token: { createToken },
auth: { hashPassword },
role: { count },
metrics: { sendDidInviteUser },
},
},
query() {

View File

@ -0,0 +1,11 @@
'use strict';
const sendDidInviteUser = async () => {
const numberOfUsers = await strapi.admin.services.user.count();
const numberOfRoles = await strapi.admin.services.role.count();
return strapi.telemetry.send('didInviteUser', { numberOfRoles, numberOfUsers });
};
module.exports = {
sendDidInviteUser,
};

View File

@ -120,9 +120,9 @@ const exists = async params => {
};
/**
* Count the number of users based on params
* @param params
* @returns {Promise<*>}
* Count the number of roles based on search params
* @param params params used for the query
* @returns {Promise<number>}
*/
const count = async (params = {}) => {
return strapi.query('role', 'admin').count(params);

View File

@ -24,23 +24,19 @@ const sanitizeUser = user => {
* @returns {Promise<user>}
*/
const create = async attributes => {
const user = createUser({
const userInfo = {
registrationToken: strapi.admin.services.token.createToken(),
...attributes,
});
};
if (_.has(user, 'password')) {
user.password = await strapi.admin.services.auth.hashPassword(user.password);
if (_.has(attributes, 'password')) {
userInfo.password = await strapi.admin.services.auth.hashPassword(attributes.password);
}
const user = createUser(userInfo);
const createdUser = await strapi.query('user', 'admin').create(user);
if (createdUser) {
const numberOfUsers = await count();
const numberOfRoles = await strapi.admin.services.role.count();
await strapi.telemetry.send('didInviteUser', { numberOfRoles, numberOfUsers });
}
await strapi.admin.services.metrics.sendDidInviteUser();
return createdUser;
};
@ -241,12 +237,12 @@ const countUsersWithoutRole = async () => {
};
/**
* Count number of users based on attributes
* @param attributes the filters used to filter the search
* Count the number of users based on search params
* @param params params used for the query
* @returns {Promise<number>}
*/
const count = async (attributes = {}) => {
return strapi.query('user', 'admin').count(attributes);
const count = async (params = {}) => {
return strapi.query('user', 'admin').count(params);
};
/** Assign some roles to several users

View File

@ -59,6 +59,15 @@ describe('metrics', () => {
send('someEvent');
expect(fetch).toHaveBeenCalled();
expect(fetch.mock.calls[0][0]).toBe('https://analytics.strapi.io/track');
expect(fetch.mock.calls[0][1].method).toBe('POST');
expect(JSON.parse(fetch.mock.calls[0][1].body)).toMatchObject({
event: 'someEvent',
uuid: 'test',
properties: {
projectType: 'Community',
},
});
fetch.mockClear();
});