mirror of
https://github.com/strapi/strapi.git
synced 2025-07-06 08:31:30 +00:00
509 lines
12 KiB
JavaScript
509 lines
12 KiB
JavaScript
'use strict';
|
|
|
|
const { createStrapiInstance } = require('api-tests/strapi');
|
|
const { createRequest, createAuthRequest } = require('api-tests/request');
|
|
const { createTestBuilder } = require('api-tests/builder');
|
|
|
|
// Test a simple default API with no relations
|
|
describe('Simple Test GraphQL Users API End to End', () => {
|
|
let strapi;
|
|
let rq;
|
|
let graphqlQuery;
|
|
const user = {
|
|
username: 'User 1',
|
|
email: 'user1@strapi.io',
|
|
password: 'test1234',
|
|
};
|
|
const data = {};
|
|
|
|
beforeAll(async () => {
|
|
strapi = await createStrapiInstance();
|
|
rq = await createRequest({ strapi });
|
|
|
|
graphqlQuery = (body) => {
|
|
return rq({
|
|
url: '/graphql',
|
|
method: 'POST',
|
|
body,
|
|
});
|
|
};
|
|
});
|
|
|
|
afterAll(async () => {
|
|
await strapi.destroy();
|
|
});
|
|
|
|
describe('Test register and login', () => {
|
|
test('Register a user', async () => {
|
|
const res = await graphqlQuery({
|
|
query: /* GraphQL */ `
|
|
mutation register($input: UsersPermissionsRegisterInput!) {
|
|
register(input: $input) {
|
|
jwt
|
|
user {
|
|
id
|
|
email
|
|
}
|
|
}
|
|
}
|
|
`,
|
|
variables: {
|
|
input: user,
|
|
},
|
|
});
|
|
|
|
const { body } = res;
|
|
|
|
expect(res.statusCode).toBe(200);
|
|
expect(body).toMatchObject({
|
|
data: {
|
|
register: {
|
|
jwt: expect.any(String),
|
|
user: {
|
|
id: expect.any(String),
|
|
email: user.email,
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
data.user = res.body.data.register.user;
|
|
});
|
|
|
|
test('Log in a user', async () => {
|
|
const res = await graphqlQuery({
|
|
query: /* GraphQL */ `
|
|
mutation login($input: UsersPermissionsLoginInput!) {
|
|
login(input: $input) {
|
|
jwt
|
|
user {
|
|
id
|
|
email
|
|
}
|
|
}
|
|
}
|
|
`,
|
|
variables: {
|
|
input: {
|
|
identifier: user.username,
|
|
password: user.password,
|
|
},
|
|
},
|
|
});
|
|
|
|
const { body } = res;
|
|
|
|
expect(res.statusCode).toBe(200);
|
|
expect(body).toMatchObject({
|
|
data: {
|
|
login: {
|
|
jwt: expect.any(String),
|
|
user: {
|
|
id: expect.any(String),
|
|
email: user.email,
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
// Use the JWT returned by the login request to
|
|
// authentify the next queries or mutations
|
|
rq.setLoggedUser(user).setToken(res.body.data.login.jwt);
|
|
|
|
data.user = res.body.data.login.user;
|
|
});
|
|
|
|
test('Update a user', async () => {
|
|
const res = await graphqlQuery({
|
|
query: /* GraphQL */ `
|
|
mutation updateUser($id: ID!, $data: UsersPermissionsUserInput!) {
|
|
updateUsersPermissionsUser(id: $id, data: $data) {
|
|
data {
|
|
attributes {
|
|
username
|
|
email
|
|
}
|
|
}
|
|
}
|
|
}
|
|
`,
|
|
variables: {
|
|
id: data.user.id,
|
|
data: { username: 'User Test' },
|
|
},
|
|
});
|
|
|
|
const { body } = res;
|
|
|
|
expect(res.statusCode).toBe(200);
|
|
expect(body).toMatchObject({
|
|
data: {
|
|
updateUsersPermissionsUser: {
|
|
data: {
|
|
attributes: {
|
|
username: 'User Test',
|
|
email: data.user.email,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
});
|
|
});
|
|
|
|
test('Delete a user', async () => {
|
|
const res = await graphqlQuery({
|
|
query: /* GraphQL */ `
|
|
mutation deleteUser($id: ID!) {
|
|
deleteUsersPermissionsUser(id: $id) {
|
|
data {
|
|
attributes {
|
|
username
|
|
email
|
|
}
|
|
}
|
|
}
|
|
}
|
|
`,
|
|
variables: {
|
|
id: data.user.id,
|
|
},
|
|
});
|
|
|
|
const { body } = res;
|
|
|
|
expect(res.statusCode).toBe(200);
|
|
expect(body).toMatchObject({
|
|
data: {
|
|
deleteUsersPermissionsUser: {
|
|
data: {
|
|
attributes: {
|
|
username: 'User Test',
|
|
email: data.user.email,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
// Test with attributes such as components, relations..
|
|
describe('Advanced Test GraphQL Users API End to End', () => {
|
|
const builder = createTestBuilder();
|
|
|
|
let strapi;
|
|
let rq;
|
|
let authReq;
|
|
let graphqlQuery;
|
|
const user = {
|
|
username: 'User 2',
|
|
email: 'user2@strapi.io',
|
|
password: 'test1234',
|
|
};
|
|
const component = {
|
|
displayName: 'somecomponent',
|
|
attributes: {
|
|
name: {
|
|
type: 'string',
|
|
},
|
|
isTesting: {
|
|
type: 'boolean',
|
|
},
|
|
},
|
|
};
|
|
const data = {};
|
|
|
|
const restart = async () => {
|
|
await strapi.destroy();
|
|
strapi = await createStrapiInstance();
|
|
rq = await createAuthRequest({ strapi });
|
|
authReq = await createAuthRequest({ strapi });
|
|
|
|
graphqlQuery = (body) => {
|
|
return rq({
|
|
url: '/graphql',
|
|
method: 'POST',
|
|
body,
|
|
});
|
|
};
|
|
};
|
|
|
|
beforeAll(async () => {
|
|
await builder.addComponent(component).build();
|
|
|
|
strapi = await createStrapiInstance();
|
|
rq = await createRequest({ strapi });
|
|
authReq = await createAuthRequest({ strapi });
|
|
|
|
graphqlQuery = (body) => {
|
|
return rq({
|
|
url: '/graphql',
|
|
method: 'POST',
|
|
body,
|
|
});
|
|
};
|
|
});
|
|
|
|
afterAll(async () => {
|
|
await strapi.destroy();
|
|
await builder.cleanup();
|
|
});
|
|
|
|
test('Update user to add component attribute', async () => {
|
|
const uid = 'plugin::users-permissions.user';
|
|
|
|
const res = await authReq({
|
|
method: 'PUT',
|
|
url: `/content-type-builder/content-types/${uid}`,
|
|
body: {
|
|
contentType: {
|
|
displayName: 'User',
|
|
singularName: 'user',
|
|
pluralName: 'users',
|
|
description: '',
|
|
draftAndPublish: false,
|
|
kind: 'collectionType',
|
|
collectionName: 'up_users',
|
|
attributes: {
|
|
username: {
|
|
type: 'string',
|
|
minLength: 3,
|
|
unique: true,
|
|
configurable: false,
|
|
required: true,
|
|
},
|
|
email: {
|
|
type: 'email',
|
|
minLength: 6,
|
|
configurable: false,
|
|
required: true,
|
|
},
|
|
provider: {
|
|
type: 'string',
|
|
configurable: false,
|
|
},
|
|
password: {
|
|
type: 'password',
|
|
minLength: 6,
|
|
configurable: false,
|
|
private: true,
|
|
},
|
|
resetPasswordToken: {
|
|
type: 'string',
|
|
configurable: false,
|
|
private: true,
|
|
},
|
|
confirmationToken: {
|
|
type: 'string',
|
|
configurable: false,
|
|
private: true,
|
|
},
|
|
confirmed: {
|
|
type: 'boolean',
|
|
default: false,
|
|
configurable: false,
|
|
},
|
|
blocked: {
|
|
type: 'boolean',
|
|
default: false,
|
|
configurable: false,
|
|
},
|
|
role: {
|
|
type: 'relation',
|
|
relation: 'manyToOne',
|
|
target: 'plugin::users-permissions.role',
|
|
inversedBy: 'users',
|
|
configurable: false,
|
|
},
|
|
someComponent: {
|
|
type: 'component',
|
|
repeatable: false,
|
|
component: 'default.somecomponent',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
expect(res.statusCode).toBe(201);
|
|
expect(res.body).toEqual({
|
|
data: {
|
|
uid,
|
|
},
|
|
});
|
|
|
|
await restart();
|
|
});
|
|
|
|
describe('Test register and login with component', () => {
|
|
test('Register a user', async () => {
|
|
const res = await graphqlQuery({
|
|
query: /* GraphQL */ `
|
|
mutation register($input: UsersPermissionsRegisterInput!) {
|
|
register(input: $input) {
|
|
jwt
|
|
user {
|
|
id
|
|
email
|
|
}
|
|
}
|
|
}
|
|
`,
|
|
variables: {
|
|
input: user,
|
|
},
|
|
});
|
|
|
|
const { body } = res;
|
|
|
|
expect(res.statusCode).toBe(200);
|
|
expect(body).toMatchObject({
|
|
data: {
|
|
register: {
|
|
jwt: expect.any(String),
|
|
user: {
|
|
id: expect.any(String),
|
|
email: user.email,
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
data.user = res.body.data.register.user;
|
|
});
|
|
|
|
test('Log in a user', async () => {
|
|
const res = await graphqlQuery({
|
|
query: /* GraphQL */ `
|
|
mutation login($input: UsersPermissionsLoginInput!) {
|
|
login(input: $input) {
|
|
jwt
|
|
user {
|
|
id
|
|
email
|
|
}
|
|
}
|
|
}
|
|
`,
|
|
variables: {
|
|
input: {
|
|
identifier: user.username,
|
|
password: user.password,
|
|
},
|
|
},
|
|
});
|
|
|
|
const { body } = res;
|
|
|
|
expect(res.statusCode).toBe(200);
|
|
expect(body).toMatchObject({
|
|
data: {
|
|
login: {
|
|
jwt: expect.any(String),
|
|
user: {
|
|
id: expect.any(String),
|
|
email: user.email,
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
// Use the JWT returned by the login request to
|
|
// authentify the next queries or mutations
|
|
rq.setLoggedUser(user).setToken(res.body.data.login.jwt);
|
|
|
|
data.user = res.body.data.login.user;
|
|
});
|
|
|
|
test('Update a user', async () => {
|
|
const res = await graphqlQuery({
|
|
query: /* GraphQL */ `
|
|
mutation updateUser($id: ID!, $data: UsersPermissionsUserInput!) {
|
|
updateUsersPermissionsUser(id: $id, data: $data) {
|
|
data {
|
|
attributes {
|
|
username
|
|
email
|
|
someComponent {
|
|
name
|
|
isTesting
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
`,
|
|
variables: {
|
|
id: data.user.id,
|
|
data: {
|
|
username: 'User Test',
|
|
someComponent: { name: 'Changed Name', isTesting: false },
|
|
},
|
|
},
|
|
});
|
|
|
|
const { body } = res;
|
|
|
|
expect(res.statusCode).toBe(200);
|
|
expect(body).toMatchObject({
|
|
data: {
|
|
updateUsersPermissionsUser: {
|
|
data: {
|
|
attributes: {
|
|
username: 'User Test',
|
|
email: data.user.email,
|
|
someComponent: {
|
|
name: 'Changed Name',
|
|
isTesting: false,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
});
|
|
});
|
|
|
|
test('Delete a user', async () => {
|
|
const res = await graphqlQuery({
|
|
query: /* GraphQL */ `
|
|
mutation deleteUser($id: ID!) {
|
|
deleteUsersPermissionsUser(id: $id) {
|
|
data {
|
|
attributes {
|
|
username
|
|
email
|
|
someComponent {
|
|
name
|
|
isTesting
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
`,
|
|
variables: {
|
|
id: data.user.id,
|
|
},
|
|
});
|
|
|
|
const { body } = res;
|
|
|
|
expect(res.statusCode).toBe(200);
|
|
expect(body).toMatchObject({
|
|
data: {
|
|
deleteUsersPermissionsUser: {
|
|
data: {
|
|
attributes: {
|
|
username: 'User Test',
|
|
email: data.user.email,
|
|
someComponent: null,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
});
|
|
});
|
|
});
|
|
});
|