mirror of
https://github.com/Ocelot-Social-Community/Ocelot-Social.git
synced 2025-12-13 07:46:06 +00:00
Merge pull request #1542 from Human-Connection/1538_test-filter-by-followed-by
Test filter by followed by
This commit is contained in:
commit
a01c73536f
@ -1,120 +0,0 @@
|
|||||||
import { gql } from '../../jest/helpers'
|
|
||||||
import Factory from '../../seed/factories'
|
|
||||||
import { createTestClient } from 'apollo-server-testing'
|
|
||||||
import createServer from '../../server'
|
|
||||||
import { neode as getNeode, getDriver } from '../../bootstrap/neo4j'
|
|
||||||
|
|
||||||
const factory = Factory()
|
|
||||||
const neode = getNeode()
|
|
||||||
const driver = getDriver()
|
|
||||||
|
|
||||||
let authenticatedUser
|
|
||||||
let user
|
|
||||||
let query
|
|
||||||
|
|
||||||
const currentUserParams = {
|
|
||||||
id: 'u1',
|
|
||||||
email: 'you@example.org',
|
|
||||||
name: 'This is you',
|
|
||||||
password: '1234',
|
|
||||||
}
|
|
||||||
const followedAuthorParams = {
|
|
||||||
id: 'u2',
|
|
||||||
email: 'followed@example.org',
|
|
||||||
name: 'Followed User',
|
|
||||||
password: '1234',
|
|
||||||
}
|
|
||||||
const randomAuthorParams = {
|
|
||||||
email: 'someone@example.org',
|
|
||||||
name: 'Someone else',
|
|
||||||
password: 'else',
|
|
||||||
}
|
|
||||||
const categoryIds = ['cat9']
|
|
||||||
|
|
||||||
beforeEach(async () => {
|
|
||||||
const [currentUser, followedAuthor, randomAuthor] = await Promise.all([
|
|
||||||
factory.create('User', currentUserParams),
|
|
||||||
factory.create('User', followedAuthorParams),
|
|
||||||
factory.create('User', randomAuthorParams),
|
|
||||||
])
|
|
||||||
user = currentUser
|
|
||||||
await neode.create('Category', {
|
|
||||||
id: 'cat9',
|
|
||||||
name: 'Democracy & Politics',
|
|
||||||
icon: 'university',
|
|
||||||
})
|
|
||||||
await currentUser.relateTo(followedAuthor, 'following')
|
|
||||||
await factory.create('Post', {
|
|
||||||
author: followedAuthor,
|
|
||||||
title: 'This is the post of a followed user',
|
|
||||||
categoryIds,
|
|
||||||
})
|
|
||||||
await factory.create('Post', {
|
|
||||||
author: randomAuthor,
|
|
||||||
title: 'This is some random post',
|
|
||||||
categoryIds,
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
beforeAll(() => {
|
|
||||||
const { server } = createServer({
|
|
||||||
context: () => {
|
|
||||||
return {
|
|
||||||
driver,
|
|
||||||
neode,
|
|
||||||
user: authenticatedUser,
|
|
||||||
}
|
|
||||||
},
|
|
||||||
})
|
|
||||||
const client = createTestClient(server)
|
|
||||||
query = client.query
|
|
||||||
})
|
|
||||||
|
|
||||||
afterEach(async () => {
|
|
||||||
await factory.cleanDatabase()
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('Filter posts by author is followed by sb.', () => {
|
|
||||||
describe('given an authenticated user', () => {
|
|
||||||
beforeEach(async () => {
|
|
||||||
authenticatedUser = await user.toJson()
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('no filter bubble', () => {
|
|
||||||
it('returns all posts', async () => {
|
|
||||||
const postQuery = gql`
|
|
||||||
{
|
|
||||||
Post(filter: {}) {
|
|
||||||
title
|
|
||||||
}
|
|
||||||
}
|
|
||||||
`
|
|
||||||
const expected = {
|
|
||||||
data: {
|
|
||||||
Post: [
|
|
||||||
{ title: 'This is some random post' },
|
|
||||||
{ title: 'This is the post of a followed user' },
|
|
||||||
],
|
|
||||||
},
|
|
||||||
}
|
|
||||||
await expect(query({ query: postQuery })).resolves.toMatchObject(expected)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('filtering for posts of followed users only', () => {
|
|
||||||
it('returns only posts authored by followed users', async () => {
|
|
||||||
const postQuery = gql`
|
|
||||||
{
|
|
||||||
Post(filter: { author: { followedBy_some: { id: "u1" } } }) {
|
|
||||||
title
|
|
||||||
}
|
|
||||||
}
|
|
||||||
`
|
|
||||||
const expected = {
|
|
||||||
data: { Post: [{ title: 'This is the post of a followed user' }] },
|
|
||||||
}
|
|
||||||
await expect(query({ query: postQuery })).resolves.toMatchObject(expected)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
@ -56,7 +56,7 @@ beforeAll(() => {
|
|||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
variables = {}
|
variables = {}
|
||||||
user = await factory.create('User', {
|
user = await factory.create('User', {
|
||||||
id: 'u198',
|
id: 'current-user',
|
||||||
name: 'TestUser',
|
name: 'TestUser',
|
||||||
email: 'test@example.org',
|
email: 'test@example.org',
|
||||||
password: '1234',
|
password: '1234',
|
||||||
@ -91,6 +91,48 @@ afterEach(async () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
describe('Post', () => {
|
describe('Post', () => {
|
||||||
|
describe('can be filtered', () => {
|
||||||
|
let followedUser, happyPost, cryPost
|
||||||
|
beforeEach(async () => {
|
||||||
|
;[followedUser] = await Promise.all([
|
||||||
|
factory.create('User', {
|
||||||
|
id: 'followed-by-me',
|
||||||
|
email: 'followed@example.org',
|
||||||
|
name: 'Followed User',
|
||||||
|
password: '1234',
|
||||||
|
}),
|
||||||
|
])
|
||||||
|
;[happyPost, cryPost] = await Promise.all([
|
||||||
|
factory.create('Post', { id: 'happy-post', categoryIds: ['cat4'] }),
|
||||||
|
factory.create('Post', { id: 'cry-post', categoryIds: ['cat15'] }),
|
||||||
|
factory.create('Post', {
|
||||||
|
id: 'post-by-followed-user',
|
||||||
|
categoryIds: ['cat9'],
|
||||||
|
author: followedUser,
|
||||||
|
}),
|
||||||
|
])
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('no filter', () => {
|
||||||
|
it('returns all posts', async () => {
|
||||||
|
const postQueryNoFilters = gql`
|
||||||
|
query Post($filter: _PostFilter) {
|
||||||
|
Post(filter: $filter) {
|
||||||
|
id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`
|
||||||
|
const expected = [{ id: 'happy-post' }, { id: 'cry-post' }, { id: 'post-by-followed-user' }]
|
||||||
|
variables = { filter: {} }
|
||||||
|
await expect(query({ query: postQueryNoFilters, variables })).resolves.toMatchObject({
|
||||||
|
data: {
|
||||||
|
Post: expect.arrayContaining(expected),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
it('by categories', async () => {
|
||||||
const postQueryFilteredByCategories = gql`
|
const postQueryFilteredByCategories = gql`
|
||||||
query Post($filter: _PostFilter) {
|
query Post($filter: _PostFilter) {
|
||||||
Post(filter: $filter) {
|
Post(filter: $filter) {
|
||||||
@ -101,34 +143,11 @@ describe('Post', () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
`
|
`
|
||||||
|
|
||||||
const postQueryFilteredByEmotions = gql`
|
|
||||||
query Post($filter: _PostFilter) {
|
|
||||||
Post(filter: $filter) {
|
|
||||||
id
|
|
||||||
emotions {
|
|
||||||
emotion
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
`
|
|
||||||
|
|
||||||
describe('can be filtered', () => {
|
|
||||||
let post31, post32
|
|
||||||
beforeEach(async () => {
|
|
||||||
;[post31, post32] = await Promise.all([
|
|
||||||
factory.create('Post', { id: 'p31', categoryIds: ['cat4'] }),
|
|
||||||
factory.create('Post', { id: 'p32', categoryIds: ['cat15'] }),
|
|
||||||
factory.create('Post', { id: 'p33', categoryIds: ['cat9'] }),
|
|
||||||
])
|
|
||||||
})
|
|
||||||
|
|
||||||
it('by categories', async () => {
|
|
||||||
const expected = {
|
const expected = {
|
||||||
data: {
|
data: {
|
||||||
Post: [
|
Post: [
|
||||||
{
|
{
|
||||||
id: 'p33',
|
id: 'post-by-followed-user',
|
||||||
categories: [{ id: 'cat9' }],
|
categories: [{ id: 'cat9' }],
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
@ -140,45 +159,88 @@ describe('Post', () => {
|
|||||||
).resolves.toMatchObject(expected)
|
).resolves.toMatchObject(expected)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('by emotions', async () => {
|
describe('by emotions', () => {
|
||||||
|
const postQueryFilteredByEmotions = gql`
|
||||||
|
query Post($filter: _PostFilter) {
|
||||||
|
Post(filter: $filter) {
|
||||||
|
id
|
||||||
|
emotions {
|
||||||
|
emotion
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`
|
||||||
|
|
||||||
|
it('filters by single emotion', async () => {
|
||||||
const expected = {
|
const expected = {
|
||||||
data: {
|
data: {
|
||||||
Post: [
|
Post: [
|
||||||
{
|
{
|
||||||
id: 'p31',
|
id: 'happy-post',
|
||||||
emotions: [{ emotion: 'happy' }],
|
emotions: [{ emotion: 'happy' }],
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
await user.relateTo(post31, 'emoted', { emotion: 'happy' })
|
await user.relateTo(happyPost, 'emoted', { emotion: 'happy' })
|
||||||
variables = { ...variables, filter: { emotions_some: { emotion_in: ['happy'] } } }
|
variables = { ...variables, filter: { emotions_some: { emotion_in: ['happy'] } } }
|
||||||
await expect(query({ query: postQueryFilteredByEmotions, variables })).resolves.toMatchObject(
|
await expect(
|
||||||
expected,
|
query({ query: postQueryFilteredByEmotions, variables }),
|
||||||
)
|
).resolves.toMatchObject(expected)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('supports filtering by multiple emotions', async () => {
|
it('filters by multiple emotions', async () => {
|
||||||
const expected = [
|
const expected = [
|
||||||
{
|
{
|
||||||
id: 'p31',
|
id: 'happy-post',
|
||||||
emotions: [{ emotion: 'happy' }],
|
emotions: [{ emotion: 'happy' }],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'p32',
|
id: 'cry-post',
|
||||||
emotions: [{ emotion: 'cry' }],
|
emotions: [{ emotion: 'cry' }],
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
await user.relateTo(post31, 'emoted', { emotion: 'happy' })
|
await user.relateTo(happyPost, 'emoted', { emotion: 'happy' })
|
||||||
await user.relateTo(post32, 'emoted', { emotion: 'cry' })
|
await user.relateTo(cryPost, 'emoted', { emotion: 'cry' })
|
||||||
variables = { ...variables, filter: { emotions_some: { emotion_in: ['happy', 'cry'] } } }
|
variables = { ...variables, filter: { emotions_some: { emotion_in: ['happy', 'cry'] } } }
|
||||||
await expect(query({ query: postQueryFilteredByEmotions, variables })).resolves.toMatchObject(
|
await expect(
|
||||||
{
|
query({ query: postQueryFilteredByEmotions, variables }),
|
||||||
|
).resolves.toMatchObject({
|
||||||
data: {
|
data: {
|
||||||
Post: expect.arrayContaining(expected),
|
Post: expect.arrayContaining(expected),
|
||||||
},
|
},
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
it('by followed-by', async () => {
|
||||||
|
const postQueryFilteredByUsersFollowed = gql`
|
||||||
|
query Post($filter: _PostFilter) {
|
||||||
|
Post(filter: $filter) {
|
||||||
|
id
|
||||||
|
author {
|
||||||
|
id
|
||||||
|
name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`
|
||||||
|
|
||||||
|
await user.relateTo(followedUser, 'following')
|
||||||
|
variables = { filter: { author: { followedBy_some: { id: 'current-user' } } } }
|
||||||
|
const expected = {
|
||||||
|
data: {
|
||||||
|
Post: [
|
||||||
|
{
|
||||||
|
id: 'post-by-followed-user',
|
||||||
|
author: { id: 'followed-by-me', name: 'Followed User' },
|
||||||
},
|
},
|
||||||
)
|
],
|
||||||
|
},
|
||||||
|
}
|
||||||
|
await expect(
|
||||||
|
query({ query: postQueryFilteredByUsersFollowed, variables }),
|
||||||
|
).resolves.toMatchObject(expected)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
@ -656,7 +718,7 @@ describe('emotions', () => {
|
|||||||
const expected = {
|
const expected = {
|
||||||
data: {
|
data: {
|
||||||
AddPostEmotions: {
|
AddPostEmotions: {
|
||||||
from: { id: 'u198' },
|
from: { id: 'current-user' },
|
||||||
to: { id: 'p1376' },
|
to: { id: 'p1376' },
|
||||||
emotion: 'happy',
|
emotion: 'happy',
|
||||||
},
|
},
|
||||||
@ -690,8 +752,8 @@ describe('emotions', () => {
|
|||||||
Post: [
|
Post: [
|
||||||
{
|
{
|
||||||
emotions: expect.arrayContaining([
|
emotions: expect.arrayContaining([
|
||||||
{ emotion: 'happy', User: { id: 'u198' } },
|
{ emotion: 'happy', User: { id: 'current-user' } },
|
||||||
{ emotion: 'surprised', User: { id: 'u198' } },
|
{ emotion: 'surprised', User: { id: 'current-user' } },
|
||||||
]),
|
]),
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
@ -795,7 +857,7 @@ describe('emotions', () => {
|
|||||||
data: {
|
data: {
|
||||||
RemovePostEmotions: {
|
RemovePostEmotions: {
|
||||||
to: { id: 'p1376' },
|
to: { id: 'p1376' },
|
||||||
from: { id: 'u198' },
|
from: { id: 'current-user' },
|
||||||
emotion: 'cry',
|
emotion: 'cry',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user