Test groups creation in slugifyMiddleware

This commit is contained in:
Wolfgang Huß 2022-08-03 07:51:29 +02:00
parent da2c7dc684
commit fc20143a65
4 changed files with 222 additions and 60 deletions

View File

@ -27,3 +27,33 @@ export const createGroupMutation = gql`
}
}
`
export const createPostMutation = gql`
mutation ($title: String!, $content: String!, $categoryIds: [ID]!, $slug: String) {
CreatePost(title: $title, content: $content, categoryIds: $categoryIds, slug: $slug) {
slug
}
}
`
export const signupVerificationMutation = gql`
mutation (
$password: String!
$email: String!
$name: String!
$slug: String
$nonce: String!
$termsAndConditionsAgreedVersion: String!
) {
SignupVerification(
email: $email
password: $password
name: $name
slug: $slug
nonce: $nonce
termsAndConditionsAgreedVersion: $termsAndConditionsAgreedVersion
) {
slug
}
}
`

View File

@ -1,8 +1,9 @@
import Factory, { cleanDatabase } from '../db/factories'
import { gql } from '../helpers/jest'
import gql from 'graphql-tag'
import { getNeode, getDriver } from '../db/neo4j'
import createServer from '../server'
import { createTestClient } from 'apollo-server-testing'
import Factory, { cleanDatabase } from '../db/factories'
import { createPostMutation, createGroupMutation, signupVerificationMutation } from '../db/graphql/mutations'
let mutate
let authenticatedUser
@ -57,15 +58,128 @@ afterEach(async () => {
})
describe('slugifyMiddleware', () => {
describe('CreateGroup', () => {
const categoryIds = ['cat9']
beforeEach(() => {
variables = {
...variables,
name: 'The Best Group',
about: 'Some about',
categoryIds,
}
})
describe('if slug not exists', () => {
it('generates a slug based on name', async () => {
await expect(
mutate({
mutation: createGroupMutation,
variables,
}),
).resolves.toMatchObject({
data: {
CreateGroup: {
slug: 'the-best-group',
},
},
})
})
it('generates a slug based on given slug', async () => {
await expect(
mutate({
mutation: createGroupMutation,
variables: {
...variables,
slug: 'the-group',
},
}),
).resolves.toMatchObject({
data: {
CreateGroup: {
slug: 'the-group',
},
},
})
})
})
describe('if slug exists', () => {
beforeEach(async () => {
await mutate({
mutation: createGroupMutation,
variables: {
...variables,
name: 'Pre-Existing Group',
slug: 'pre-existing-group',
about: 'As an about',
},
})
})
it('chooses another slug', async () => {
variables = {
...variables,
name: 'Pre-Existing Group',
about: 'As an about',
}
await expect(
mutate({
mutation: createGroupMutation,
variables,
}),
).resolves.toMatchObject({
data: {
CreateGroup: {
slug: 'pre-existing-group-1',
},
},
})
})
describe('but if the client specifies a slug', () => {
it('rejects CreateGroup', async (done) => {
variables = {
...variables,
name: 'Pre-Existing Group',
about: 'As an about',
slug: 'pre-existing-group',
}
try {
await expect(
mutate({ mutation: createGroupMutation, variables }),
).resolves.toMatchObject({
errors: [
{
message: 'Group with this slug already exists!',
},
],
})
done()
} catch (error) {
throw new Error(`
${error}
Probably your database has no unique constraints!
To see all constraints go to http://localhost:7474/browser/ and
paste the following:
\`\`\`
CALL db.constraints();
\`\`\`
Learn how to setup the database here:
https://github.com/Ocelot-Social-Community/Ocelot-Social/blob/master/backend/README.md#database-indices-and-constraints
`)
}
})
})
})
})
describe('CreatePost', () => {
const categoryIds = ['cat9']
const createPostMutation = gql`
mutation ($title: String!, $content: String!, $categoryIds: [ID]!, $slug: String) {
CreatePost(title: $title, content: $content, categoryIds: $categoryIds, slug: $slug) {
slug
}
}
`
beforeEach(() => {
variables = {
@ -76,18 +190,38 @@ describe('slugifyMiddleware', () => {
}
})
it('generates a slug based on title', async () => {
await expect(
mutate({
mutation: createPostMutation,
variables,
}),
).resolves.toMatchObject({
data: {
CreatePost: {
slug: 'i-am-a-brand-new-post',
describe('if slug not exists', () => {
it('generates a slug based on title', async () => {
await expect(
mutate({
mutation: createPostMutation,
variables,
}),
).resolves.toMatchObject({
data: {
CreatePost: {
slug: 'i-am-a-brand-new-post',
},
},
},
})
})
it('generates a slug based on given slug', async () => {
await expect(
mutate({
mutation: createPostMutation,
variables: {
...variables,
slug: 'the-post',
},
}),
).resolves.toMatchObject({
data: {
CreatePost: {
slug: 'the-post',
},
},
})
})
})
@ -160,7 +294,7 @@ describe('slugifyMiddleware', () => {
\`\`\`
Learn how to setup the database here:
https://docs.human-connection.org/human-connection/backend#database-indices-and-constraints
https://github.com/Ocelot-Social-Community/Ocelot-Social/blob/master/backend/README.md#database-indices-and-constraints
`)
}
})
@ -169,28 +303,6 @@ describe('slugifyMiddleware', () => {
})
describe('SignupVerification', () => {
const mutation = gql`
mutation (
$password: String!
$email: String!
$name: String!
$slug: String
$nonce: String!
$termsAndConditionsAgreedVersion: String!
) {
SignupVerification(
email: $email
password: $password
name: $name
slug: $slug
nonce: $nonce
termsAndConditionsAgreedVersion: $termsAndConditionsAgreedVersion
) {
slug
}
}
`
beforeEach(() => {
variables = {
...variables,
@ -211,21 +323,41 @@ describe('slugifyMiddleware', () => {
})
})
it('generates a slug based on name', async () => {
await expect(
mutate({
mutation,
variables,
}),
).resolves.toMatchObject({
data: {
SignupVerification: {
slug: 'i-am-a-user',
describe('if slug not exists', () => {
it('generates a slug based on name', async () => {
await expect(
mutate({
mutation: signupVerificationMutation,
variables,
}),
).resolves.toMatchObject({
data: {
SignupVerification: {
slug: 'i-am-a-user',
},
},
},
})
})
it('generates a slug based on given slug', async () => {
await expect(
mutate({
mutation: signupVerificationMutation,
variables: {
...variables,
slug: 'the-user',
},
}),
).resolves.toMatchObject({
data: {
SignupVerification: {
slug: 'the-user',
},
},
})
})
})
describe('if slug exists', () => {
beforeEach(async () => {
await Factory.build('user', {
@ -237,7 +369,7 @@ describe('slugifyMiddleware', () => {
it('chooses another slug', async () => {
await expect(
mutate({
mutation,
mutation: signupVerificationMutation,
variables,
}),
).resolves.toMatchObject({
@ -260,7 +392,7 @@ describe('slugifyMiddleware', () => {
it('rejects SignupVerification (on FAIL Neo4j constraints may not defined in database)', async () => {
await expect(
mutate({
mutation,
mutation: signupVerificationMutation,
variables,
}),
).resolves.toMatchObject({

View File

@ -55,7 +55,7 @@ describe('slug', () => {
\`\`\`
Learn how to setup the database here:
https://docs.human-connection.org/human-connection/backend#database-indices-and-constraints
https://github.com/Ocelot-Social-Community/Ocelot-Social/blob/master/backend/README.md#database-indices-and-constraints
`)
}
})

View File

@ -250,7 +250,7 @@ describe('CreateGroup', () => {
...variables,
id: 'g589',
name: 'The Best Group',
slug: 'the-best-group',
slug: 'the-group',
about: 'We will change the world!',
categoryIds,
}
@ -274,7 +274,7 @@ describe('CreateGroup', () => {
CreateGroup: {
// Wolle: id: 'g589',
name: 'The Best Group',
slug: 'the-best-group',
slug: 'the-group',
about: 'We will change the world!',
},
},