mirror of
https://github.com/IT4Change/Ocelot-Social.git
synced 2025-12-13 07:45:56 +00:00
test search posts with groups
This commit is contained in:
parent
74505a11c5
commit
a4cd7a8698
@ -71,3 +71,18 @@ export const profilePagePosts = () => {
|
|||||||
}
|
}
|
||||||
`
|
`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const searchPosts = () => {
|
||||||
|
return gql`
|
||||||
|
query ($query: String!, $firstPosts: Int, $postsOffset: Int) {
|
||||||
|
searchPosts(query: $query, firstPosts: $firstPosts, postsOffset: $postsOffset) {
|
||||||
|
postCount
|
||||||
|
posts {
|
||||||
|
id
|
||||||
|
title
|
||||||
|
content
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`
|
||||||
|
}
|
||||||
|
|||||||
@ -299,10 +299,10 @@ export default shield(
|
|||||||
{
|
{
|
||||||
Query: {
|
Query: {
|
||||||
'*': deny,
|
'*': deny,
|
||||||
searchResults: isAuthenticated,
|
searchResults: allow,
|
||||||
searchPosts: isAuthenticated,
|
searchPosts: allow,
|
||||||
searchUsers: isAuthenticated,
|
searchUsers: allow,
|
||||||
searchHashtags: isAuthenticated,
|
searchHashtags: allow,
|
||||||
embed: allow,
|
embed: allow,
|
||||||
Category: allow,
|
Category: allow,
|
||||||
Tag: allow,
|
Tag: allow,
|
||||||
|
|||||||
@ -12,6 +12,7 @@ import {
|
|||||||
postQuery,
|
postQuery,
|
||||||
filterPosts,
|
filterPosts,
|
||||||
profilePagePosts,
|
profilePagePosts,
|
||||||
|
searchPosts,
|
||||||
} from '../../db/graphql/posts'
|
} from '../../db/graphql/posts'
|
||||||
// eslint-disable-next-line no-unused-vars
|
// eslint-disable-next-line no-unused-vars
|
||||||
import { DESCRIPTION_WITHOUT_HTML_LENGTH_MIN } from '../../constants/groups'
|
import { DESCRIPTION_WITHOUT_HTML_LENGTH_MIN } from '../../constants/groups'
|
||||||
@ -943,6 +944,192 @@ describe('Posts in Groups', () => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
describe('searchPosts', () => {
|
||||||
|
describe('without authentication', () => {
|
||||||
|
beforeEach(async () => {
|
||||||
|
authenticatedUser = null
|
||||||
|
})
|
||||||
|
|
||||||
|
it('finds nothing', async () => {
|
||||||
|
const result = await query({
|
||||||
|
query: searchPosts(),
|
||||||
|
variables: {
|
||||||
|
query: 'post',
|
||||||
|
postsOffset: 0,
|
||||||
|
firstPosts: 25,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
expect(result.data.searchPosts.posts).toHaveLength(0)
|
||||||
|
expect(result).toMatchObject({
|
||||||
|
data: {
|
||||||
|
searchPosts: {
|
||||||
|
postCount: 0,
|
||||||
|
posts: [],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('as new user', () => {
|
||||||
|
beforeEach(async () => {
|
||||||
|
authenticatedUser = newUser
|
||||||
|
})
|
||||||
|
|
||||||
|
it('finds the post of the public group and the post without group', async () => {
|
||||||
|
const result = await query({
|
||||||
|
query: searchPosts(),
|
||||||
|
variables: {
|
||||||
|
query: 'post',
|
||||||
|
postsOffset: 0,
|
||||||
|
firstPosts: 25,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
expect(result.data.searchPosts.posts).toHaveLength(2)
|
||||||
|
expect(result).toMatchObject({
|
||||||
|
data: {
|
||||||
|
searchPosts: {
|
||||||
|
postCount: 2,
|
||||||
|
posts: expect.arrayContaining([
|
||||||
|
{
|
||||||
|
id: 'post-to-public-group',
|
||||||
|
title: 'A post to a public group',
|
||||||
|
content: 'I am posting into a public group as a member of the group',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'post-without-group',
|
||||||
|
title: 'A post without a group',
|
||||||
|
content: 'As a new user, I do not belong to a group yet.',
|
||||||
|
},
|
||||||
|
]),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('without membership of group', () => {
|
||||||
|
beforeEach(async () => {
|
||||||
|
authenticatedUser = await anyUser.toJson()
|
||||||
|
})
|
||||||
|
|
||||||
|
it('finds the post of the public group and the post without group', async () => {
|
||||||
|
const result = await query({
|
||||||
|
query: searchPosts(),
|
||||||
|
variables: {
|
||||||
|
query: 'post',
|
||||||
|
postsOffset: 0,
|
||||||
|
firstPosts: 25,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
expect(result.data.searchPosts.posts).toHaveLength(2)
|
||||||
|
expect(result).toMatchObject({
|
||||||
|
data: {
|
||||||
|
searchPosts: {
|
||||||
|
postCount: 2,
|
||||||
|
posts: expect.arrayContaining([
|
||||||
|
{
|
||||||
|
id: 'post-to-public-group',
|
||||||
|
title: 'A post to a public group',
|
||||||
|
content: 'I am posting into a public group as a member of the group',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'post-without-group',
|
||||||
|
title: 'A post without a group',
|
||||||
|
content: 'As a new user, I do not belong to a group yet.',
|
||||||
|
},
|
||||||
|
]),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('with pending membership of group', () => {
|
||||||
|
beforeEach(async () => {
|
||||||
|
authenticatedUser = await pendingUser.toJson()
|
||||||
|
})
|
||||||
|
|
||||||
|
it('finds the post of the public group and the post without group', async () => {
|
||||||
|
const result = await query({
|
||||||
|
query: searchPosts(),
|
||||||
|
variables: {
|
||||||
|
query: 'post',
|
||||||
|
postsOffset: 0,
|
||||||
|
firstPosts: 25,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
expect(result.data.searchPosts.posts).toHaveLength(2)
|
||||||
|
expect(result).toMatchObject({
|
||||||
|
data: {
|
||||||
|
searchPosts: {
|
||||||
|
postCount: 2,
|
||||||
|
posts: expect.arrayContaining([
|
||||||
|
{
|
||||||
|
id: 'post-to-public-group',
|
||||||
|
title: 'A post to a public group',
|
||||||
|
content: 'I am posting into a public group as a member of the group',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'post-without-group',
|
||||||
|
title: 'A post without a group',
|
||||||
|
content: 'As a new user, I do not belong to a group yet.',
|
||||||
|
},
|
||||||
|
]),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('as member of group', () => {
|
||||||
|
beforeEach(async () => {
|
||||||
|
authenticatedUser = await allGroupsUser.toJson()
|
||||||
|
})
|
||||||
|
|
||||||
|
it('finds all posts', async () => {
|
||||||
|
const result = await query({
|
||||||
|
query: searchPosts(),
|
||||||
|
variables: {
|
||||||
|
query: 'post',
|
||||||
|
postsOffset: 0,
|
||||||
|
firstPosts: 25,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
expect(result.data.searchPosts.posts).toHaveLength(4)
|
||||||
|
expect(result).toMatchObject({
|
||||||
|
data: {
|
||||||
|
searchPosts: {
|
||||||
|
postCount: 4,
|
||||||
|
posts: expect.arrayContaining([
|
||||||
|
{
|
||||||
|
id: 'post-to-public-group',
|
||||||
|
title: 'A post to a public group',
|
||||||
|
content: 'I am posting into a public group as a member of the group',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'post-without-group',
|
||||||
|
title: 'A post without a group',
|
||||||
|
content: 'As a new user, I do not belong to a group yet.',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'post-to-closed-group',
|
||||||
|
title: 'A post to a closed group',
|
||||||
|
content: 'I am posting into a closed group as a member of the group',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'post-to-hidden-group',
|
||||||
|
title: 'A post to a hidden group',
|
||||||
|
content: 'I am posting into a hidden group as a member of the group',
|
||||||
|
},
|
||||||
|
]),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@ -119,7 +119,8 @@ export default {
|
|||||||
Query: {
|
Query: {
|
||||||
searchPosts: async (_parent, args, context, _resolveInfo) => {
|
searchPosts: async (_parent, args, context, _resolveInfo) => {
|
||||||
const { query, postsOffset, firstPosts } = args
|
const { query, postsOffset, firstPosts } = args
|
||||||
const { id: userId } = context.user
|
let userId = null
|
||||||
|
if (context.user) userId = context.user.id
|
||||||
return {
|
return {
|
||||||
postCount: getSearchResults(
|
postCount: getSearchResults(
|
||||||
context,
|
context,
|
||||||
@ -179,7 +180,8 @@ export default {
|
|||||||
},
|
},
|
||||||
searchResults: async (_parent, args, context, _resolveInfo) => {
|
searchResults: async (_parent, args, context, _resolveInfo) => {
|
||||||
const { query, limit } = args
|
const { query, limit } = args
|
||||||
const { id: userId } = context.user
|
let userId = null
|
||||||
|
if (context.user) userId = context.user.id
|
||||||
|
|
||||||
const searchType = query.replace(/^([!@#]?).*$/, '$1')
|
const searchType = query.replace(/^([!@#]?).*$/, '$1')
|
||||||
const searchString = query.replace(/^([!@#])/, '')
|
const searchString = query.replace(/^([!@#])/, '')
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user