2020-10-27 11:27:17 +01:00
|
|
|
'use strict';
|
|
|
|
|
2019-09-18 12:07:59 +02:00
|
|
|
// Helpers.
|
2023-04-05 10:32:20 +02:00
|
|
|
const { createStrapiInstance } = require('api-tests/strapi');
|
|
|
|
const { createAuthRequest, createRequest } = require('api-tests/request');
|
2019-09-18 12:07:59 +02:00
|
|
|
|
2020-11-17 15:38:41 +01:00
|
|
|
let strapi;
|
2019-09-18 12:07:59 +02:00
|
|
|
let authReq;
|
|
|
|
|
|
|
|
describe('Test Graphql user service', () => {
|
|
|
|
beforeAll(async () => {
|
2021-09-27 17:17:24 +02:00
|
|
|
strapi = await createStrapiInstance({ bypassAuth: false });
|
2020-11-17 15:38:41 +01:00
|
|
|
authReq = await createAuthRequest({ strapi });
|
2021-03-26 20:15:38 +01:00
|
|
|
});
|
2019-09-18 12:07:59 +02:00
|
|
|
|
2020-11-17 15:38:41 +01:00
|
|
|
afterAll(async () => {
|
|
|
|
await strapi.destroy();
|
|
|
|
});
|
|
|
|
|
2019-09-18 12:07:59 +02:00
|
|
|
describe('Check createUser authorizations', () => {
|
|
|
|
test('createUser is forbidden to public', async () => {
|
2020-11-17 15:38:41 +01:00
|
|
|
const rq = createRequest({ strapi });
|
2019-09-18 12:07:59 +02:00
|
|
|
const res = await rq({
|
|
|
|
url: '/graphql',
|
|
|
|
method: 'POST',
|
|
|
|
body: {
|
|
|
|
query: /* GraphQL */ `
|
|
|
|
mutation {
|
2021-09-27 17:17:24 +02:00
|
|
|
createUsersPermissionsUser(
|
|
|
|
data: { username: "test", email: "test", password: "test" }
|
|
|
|
) {
|
|
|
|
data {
|
2019-09-18 12:07:59 +02:00
|
|
|
id
|
2021-09-27 17:17:24 +02:00
|
|
|
attributes {
|
|
|
|
username
|
|
|
|
}
|
2019-09-18 12:07:59 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
`,
|
|
|
|
},
|
|
|
|
});
|
|
|
|
|
|
|
|
expect(res.statusCode).toBe(200);
|
|
|
|
expect(res.body).toMatchObject({
|
2021-09-27 17:17:24 +02:00
|
|
|
data: null,
|
2019-09-18 12:07:59 +02:00
|
|
|
errors: [
|
|
|
|
{
|
2021-09-27 17:17:24 +02:00
|
|
|
message: 'Forbidden access',
|
2019-09-18 12:07:59 +02:00
|
|
|
},
|
|
|
|
],
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2021-09-27 17:17:24 +02:00
|
|
|
test('createUser is forbidden for admins', async () => {
|
2019-09-18 12:07:59 +02:00
|
|
|
const res = await authReq({
|
|
|
|
url: '/graphql',
|
|
|
|
method: 'POST',
|
|
|
|
body: {
|
|
|
|
query: /* GraphQL */ `
|
|
|
|
mutation {
|
2021-09-27 17:17:24 +02:00
|
|
|
createUsersPermissionsUser(
|
|
|
|
data: { username: "test", email: "test", password: "test" }
|
2019-09-18 12:07:59 +02:00
|
|
|
) {
|
2021-09-27 17:17:24 +02:00
|
|
|
data {
|
2019-09-18 12:07:59 +02:00
|
|
|
id
|
2021-09-27 17:17:24 +02:00
|
|
|
attributes {
|
|
|
|
username
|
|
|
|
}
|
2019-09-18 12:07:59 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
`,
|
|
|
|
},
|
|
|
|
});
|
|
|
|
|
2021-09-27 17:17:24 +02:00
|
|
|
expect(res.statusCode).toBe(401);
|
2019-09-18 12:07:59 +02:00
|
|
|
expect(res.body).toMatchObject({
|
2021-10-20 17:30:05 +02:00
|
|
|
error: {
|
|
|
|
status: 401,
|
|
|
|
name: 'UnauthorizedError',
|
|
|
|
message: 'Missing or invalid credentials',
|
|
|
|
details: {},
|
|
|
|
},
|
2019-09-18 12:07:59 +02:00
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe('Check updateUser authorizations', () => {
|
|
|
|
test('updateUser is forbidden to public', async () => {
|
2020-11-17 15:38:41 +01:00
|
|
|
const rq = createRequest({ strapi });
|
2019-09-18 12:07:59 +02:00
|
|
|
const res = await rq({
|
|
|
|
url: '/graphql',
|
|
|
|
method: 'POST',
|
|
|
|
body: {
|
|
|
|
query: /* GraphQL */ `
|
|
|
|
mutation {
|
2021-09-27 17:17:24 +02:00
|
|
|
updateUsersPermissionsUser(
|
|
|
|
id: 1
|
|
|
|
data: { username: "test", email: "test", password: "test" }
|
2019-09-18 12:07:59 +02:00
|
|
|
) {
|
2021-09-27 17:17:24 +02:00
|
|
|
data {
|
2019-09-18 12:07:59 +02:00
|
|
|
id
|
2021-09-27 17:17:24 +02:00
|
|
|
attributes {
|
|
|
|
username
|
|
|
|
}
|
2019-09-18 12:07:59 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
`,
|
|
|
|
},
|
|
|
|
});
|
|
|
|
|
|
|
|
expect(res.statusCode).toBe(200);
|
|
|
|
expect(res.body).toMatchObject({
|
2021-09-27 17:17:24 +02:00
|
|
|
data: null,
|
2019-09-18 12:07:59 +02:00
|
|
|
errors: [
|
|
|
|
{
|
2021-09-27 17:17:24 +02:00
|
|
|
message: 'Forbidden access',
|
2019-09-18 12:07:59 +02:00
|
|
|
},
|
|
|
|
],
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2021-09-27 17:17:24 +02:00
|
|
|
test('updateUser is forbidden for admins', async () => {
|
2019-09-18 12:07:59 +02:00
|
|
|
const res = await authReq({
|
|
|
|
url: '/graphql',
|
|
|
|
method: 'POST',
|
|
|
|
body: {
|
|
|
|
query: /* GraphQL */ `
|
2021-09-27 17:17:24 +02:00
|
|
|
mutation {
|
|
|
|
updateUsersPermissionsUser(
|
|
|
|
id: 1
|
|
|
|
data: { username: "test", email: "test", password: "test" }
|
|
|
|
) {
|
|
|
|
data {
|
2019-09-18 12:07:59 +02:00
|
|
|
id
|
2021-09-27 17:17:24 +02:00
|
|
|
attributes {
|
|
|
|
username
|
|
|
|
}
|
2019-09-18 12:07:59 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
`,
|
|
|
|
},
|
|
|
|
});
|
|
|
|
|
2021-09-27 17:17:24 +02:00
|
|
|
expect(res.statusCode).toBe(401);
|
2019-09-18 12:07:59 +02:00
|
|
|
expect(res.body).toMatchObject({
|
2021-10-20 17:30:05 +02:00
|
|
|
error: {
|
|
|
|
status: 401,
|
|
|
|
name: 'UnauthorizedError',
|
|
|
|
message: 'Missing or invalid credentials',
|
|
|
|
details: {},
|
|
|
|
},
|
2019-09-18 12:07:59 +02:00
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2021-09-27 17:17:24 +02:00
|
|
|
describe('Check deleteUser authorizations', () => {
|
|
|
|
test('deleteUser is forbidden to public', async () => {
|
|
|
|
const rq = createRequest({ strapi });
|
|
|
|
const res = await rq({
|
|
|
|
url: '/graphql',
|
|
|
|
method: 'POST',
|
|
|
|
body: {
|
|
|
|
query: /* GraphQL */ `
|
|
|
|
mutation deleteUser {
|
|
|
|
deleteUsersPermissionsUser(id: 1) {
|
|
|
|
data {
|
|
|
|
id
|
|
|
|
attributes {
|
|
|
|
username
|
|
|
|
}
|
|
|
|
}
|
2019-09-18 12:07:59 +02:00
|
|
|
}
|
|
|
|
}
|
2021-09-27 17:17:24 +02:00
|
|
|
`,
|
2019-09-18 12:07:59 +02:00
|
|
|
},
|
2021-09-27 17:17:24 +02:00
|
|
|
});
|
|
|
|
|
|
|
|
expect(res.statusCode).toBe(200);
|
|
|
|
expect(res.body).toMatchObject({
|
|
|
|
data: null,
|
|
|
|
errors: [
|
|
|
|
{
|
|
|
|
message: 'Forbidden access',
|
|
|
|
},
|
|
|
|
],
|
|
|
|
});
|
2019-09-18 12:07:59 +02:00
|
|
|
});
|
|
|
|
|
2021-09-27 17:17:24 +02:00
|
|
|
test('deleteUser is authorized for admins', async () => {
|
|
|
|
const res = await authReq({
|
|
|
|
url: '/graphql',
|
|
|
|
method: 'POST',
|
|
|
|
body: {
|
|
|
|
query: /* GraphQL */ `
|
|
|
|
mutation deleteUser {
|
|
|
|
deleteUsersPermissionsUser(id: 1) {
|
|
|
|
data {
|
|
|
|
id
|
|
|
|
attributes {
|
|
|
|
username
|
|
|
|
}
|
|
|
|
}
|
2019-09-18 12:07:59 +02:00
|
|
|
}
|
|
|
|
}
|
2021-09-27 17:17:24 +02:00
|
|
|
`,
|
2019-09-18 12:07:59 +02:00
|
|
|
},
|
2021-09-27 17:17:24 +02:00
|
|
|
});
|
|
|
|
|
|
|
|
expect(res.statusCode).toBe(401);
|
|
|
|
expect(res.body).toMatchObject({
|
2021-10-20 17:30:05 +02:00
|
|
|
error: {
|
|
|
|
status: 401,
|
|
|
|
name: 'UnauthorizedError',
|
|
|
|
message: 'Missing or invalid credentials',
|
|
|
|
details: {},
|
|
|
|
},
|
2021-09-27 17:17:24 +02:00
|
|
|
});
|
2019-09-18 12:07:59 +02:00
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|