mirror of
https://github.com/Ocelot-Social-Community/Ocelot-Social.git
synced 2025-12-13 07:46:06 +00:00
155 lines
4.5 KiB
JavaScript
155 lines
4.5 KiB
JavaScript
import { createTestClient } from 'apollo-server-testing'
|
|
import Factory from '../../seed/factories'
|
|
import { gql } from '../../jest/helpers'
|
|
import { neode as getNeode, getDriver } from '../../bootstrap/neo4j'
|
|
import createServer from '../../server'
|
|
|
|
let mutate, query, authenticatedUser, variables
|
|
const factory = Factory()
|
|
const instance = getNeode()
|
|
const driver = getDriver()
|
|
|
|
const mutationShoutPost = gql`
|
|
mutation($id: ID!) {
|
|
shout(id: $id, type: Post)
|
|
}
|
|
`
|
|
const mutationUnshoutPost = gql`
|
|
mutation($id: ID!) {
|
|
unshout(id: $id, type: Post)
|
|
}
|
|
`
|
|
const queryPost = gql`
|
|
query($id: ID!) {
|
|
Post(id: $id) {
|
|
id
|
|
shoutedBy {
|
|
id
|
|
}
|
|
}
|
|
}
|
|
`
|
|
|
|
describe('shout and unshout posts', () => {
|
|
let currentUser, postAuthor
|
|
beforeAll(() => {
|
|
authenticatedUser = undefined
|
|
const { server } = createServer({
|
|
context: () => {
|
|
return {
|
|
driver,
|
|
neode: instance,
|
|
user: authenticatedUser,
|
|
}
|
|
},
|
|
})
|
|
mutate = createTestClient(server).mutate
|
|
query = createTestClient(server).query
|
|
})
|
|
beforeEach(async () => {
|
|
currentUser = await factory.create('User', {
|
|
id: 'current-user-id',
|
|
name: 'Current User',
|
|
email: 'current.user@example.org',
|
|
password: '1234',
|
|
})
|
|
|
|
postAuthor = await factory.create('User', {
|
|
id: 'id-of-another-user',
|
|
name: 'Another User',
|
|
email: 'another.user@example.org',
|
|
password: '1234',
|
|
})
|
|
})
|
|
afterEach(async () => {
|
|
await factory.cleanDatabase()
|
|
})
|
|
|
|
describe('shout', () => {
|
|
describe('unauthenticated', () => {
|
|
it('throws authorization error', async () => {
|
|
variables = { id: 'post-to-shout-id' }
|
|
authenticatedUser = undefined
|
|
await expect(mutate({ mutation: mutationShoutPost, variables })).resolves.toMatchObject({
|
|
errors: [{ message: 'Not Authorised!' }],
|
|
})
|
|
})
|
|
})
|
|
describe('authenticated', () => {
|
|
beforeEach(async () => {
|
|
authenticatedUser = await currentUser.toJson()
|
|
await factory.create('Post', {
|
|
name: 'Other user post',
|
|
id: 'another-user-post-id',
|
|
author: postAuthor,
|
|
})
|
|
await factory.create('Post', {
|
|
name: 'current user post',
|
|
id: 'current-user-post-id',
|
|
author: currentUser,
|
|
})
|
|
variables = {}
|
|
})
|
|
|
|
it("can shout another user's post", async () => {
|
|
variables = { id: 'another-user-post-id' }
|
|
await expect(mutate({ mutation: mutationShoutPost, variables })).resolves.toMatchObject({
|
|
data: { shout: true },
|
|
})
|
|
await expect(query({ query: queryPost, variables })).resolves.toMatchObject({
|
|
data: { Post: [{ id: 'another-user-post-id', shoutedBy: [{ id: 'current-user-id' }] }] },
|
|
errors: undefined,
|
|
})
|
|
})
|
|
|
|
it('can not shout my own post', async () => {
|
|
variables = { id: 'current-user-post-id' }
|
|
await expect(mutate({ mutation: mutationShoutPost, variables })).resolves.toMatchObject({
|
|
data: { shout: false },
|
|
})
|
|
await expect(query({ query: queryPost, variables })).resolves.toMatchObject({
|
|
data: { Post: [{ id: 'current-user-post-id', shoutedBy: [] }] },
|
|
errors: undefined,
|
|
})
|
|
})
|
|
})
|
|
})
|
|
describe('unshout', () => {
|
|
describe('unauthenticated', () => {
|
|
it('throws authorization error', async () => {
|
|
authenticatedUser = undefined
|
|
variables = { id: 'post-to-shout-id' }
|
|
await expect(mutate({ mutation: mutationUnshoutPost, variables })).resolves.toMatchObject({
|
|
errors: [{ message: 'Not Authorised!' }],
|
|
})
|
|
})
|
|
})
|
|
|
|
describe('authenticated', () => {
|
|
beforeEach(async () => {
|
|
authenticatedUser = await currentUser.toJson()
|
|
await factory.create('Post', {
|
|
name: 'Posted By Another User',
|
|
id: 'posted-by-another-user',
|
|
author: postAuthor,
|
|
})
|
|
await mutate({
|
|
mutation: mutationShoutPost,
|
|
variables: { id: 'posted-by-another-user' },
|
|
})
|
|
})
|
|
|
|
it("can unshout another user's post", async () => {
|
|
variables = { id: 'posted-by-another-user' }
|
|
await expect(mutate({ mutation: mutationUnshoutPost, variables })).resolves.toMatchObject({
|
|
data: { unshout: true },
|
|
})
|
|
await expect(query({ query: queryPost, variables })).resolves.toMatchObject({
|
|
data: { Post: [{ id: 'posted-by-another-user', shoutedBy: [] }] },
|
|
errors: undefined,
|
|
})
|
|
})
|
|
})
|
|
})
|
|
})
|