mirror of
https://github.com/Ocelot-Social-Community/Ocelot-Social.git
synced 2025-12-12 23:35:58 +00:00
Test drive to get the functionality how we'd like
This commit is contained in:
parent
704b8c2d57
commit
e639358557
@ -20,7 +20,7 @@ export default {
|
||||
AND NOT (
|
||||
author.deleted = true OR author.disabled = true
|
||||
OR resource.deleted = true OR resource.disabled = true
|
||||
OR (:User { id: $thisUserId })-[:BLOCKED]-(author)
|
||||
OR (:User { id: $thisUserId })-[:MUTED]-(author)
|
||||
)
|
||||
WITH resource, author,
|
||||
[(resource)<-[:COMMENTS]-(comment:Comment) | comment] as comments,
|
||||
|
||||
@ -23,6 +23,21 @@ export const getMutedUsers = async context => {
|
||||
return mutedUsers
|
||||
}
|
||||
|
||||
export const getBlockedUsers = async context => {
|
||||
const { neode } = context
|
||||
const userModel = neode.model('User')
|
||||
let blockedUsers = neode
|
||||
.query()
|
||||
.match('user', userModel)
|
||||
.where('user.id', context.user.id)
|
||||
.relationship(userModel.relationships().get('blocked'))
|
||||
.to('blocked', userModel)
|
||||
.return('blocked')
|
||||
blockedUsers = await blockedUsers.execute()
|
||||
blockedUsers = blockedUsers.records.map(r => r.get('blocked').properties)
|
||||
return blockedUsers
|
||||
}
|
||||
|
||||
export default {
|
||||
Query: {
|
||||
mutedUsers: async (object, args, context, resolveInfo) => {
|
||||
@ -32,6 +47,13 @@ export default {
|
||||
throw new UserInputError(e.message)
|
||||
}
|
||||
},
|
||||
blockedUsers: async (object, args, context, resolveInfo) => {
|
||||
try {
|
||||
return getBlockedUsers(context)
|
||||
} catch (e) {
|
||||
throw new UserInputError(e.message)
|
||||
}
|
||||
},
|
||||
User: async (object, args, context, resolveInfo) => {
|
||||
const { email } = args
|
||||
if (email) {
|
||||
|
||||
@ -39,7 +39,7 @@ Given("I am logged in", () => {
|
||||
cy.login(loginCredentials);
|
||||
});
|
||||
|
||||
Given("I am logged in as the muted user", () => {
|
||||
Given("I am logged in as the {string} user", _ => {
|
||||
cy.login({ email: annoyingParams.email, password: '1234' });
|
||||
});
|
||||
|
||||
@ -123,6 +123,12 @@ When("I visit the {string} page", page => {
|
||||
cy.openPage(page);
|
||||
});
|
||||
|
||||
When("the blocked user visits my post", () => {
|
||||
cy.logout()
|
||||
.login({ email: annoyingParams.email, password: annoyingParams.password })
|
||||
.openPage('/post/previously-created-post')
|
||||
})
|
||||
|
||||
Given("I am on the {string} page", page => {
|
||||
cy.openPage(page);
|
||||
});
|
||||
@ -485,7 +491,7 @@ Given("I follow the user {string}", name => {
|
||||
});
|
||||
});
|
||||
|
||||
Given('"Spammy Spammer" wrote a post {string}', title => {
|
||||
Given('{string} wrote a post {string}', (_, title) => {
|
||||
cy.createCategories("cat21")
|
||||
.factory()
|
||||
.create("Post", {
|
||||
@ -532,6 +538,20 @@ When("I mute the user {string}", name => {
|
||||
});
|
||||
});
|
||||
|
||||
When("I block the user {string}", name => {
|
||||
cy.neode()
|
||||
.first("User", {
|
||||
name
|
||||
})
|
||||
.then(blockedUser => {
|
||||
cy.neode()
|
||||
.first("User", {
|
||||
name: narratorParams.name
|
||||
})
|
||||
.relateTo(blockedUser, "blocked");
|
||||
});
|
||||
});
|
||||
|
||||
When("I log in with:", table => {
|
||||
const [firstRow] = table.hashes();
|
||||
const {
|
||||
@ -550,3 +570,11 @@ Then("I see only one post with the title {string}", title => {
|
||||
.should("have.length", 1);
|
||||
cy.get(".main-container").contains(".post-link", title);
|
||||
});
|
||||
|
||||
Then("they should not see the comment from", () => {
|
||||
cy.get(".ds-card-footer").children().should('not.have.class', 'comment-form')
|
||||
})
|
||||
|
||||
Then("they should see a text explaining commenting is not possible", () => {
|
||||
cy.get('.ds-placeholder').should('contain', "Commenting is not possible at this time on this post.")
|
||||
})
|
||||
48
cypress/integration/user_profile/BlockUser.feature
Normal file
48
cypress/integration/user_profile/BlockUser.feature
Normal file
@ -0,0 +1,48 @@
|
||||
Feature: Block a User
|
||||
As a user
|
||||
I'd like to have a button to block another user
|
||||
To prevent him from seeing and interacting with my contributions
|
||||
|
||||
Background:
|
||||
Given I have a user account
|
||||
And there is an annoying user called "Harassing User"
|
||||
And I am logged in
|
||||
|
||||
Scenario: Block a user
|
||||
Given I am on the profile page of the annoying user
|
||||
When I click on "Block user" from the content menu in the user info box
|
||||
And I navigate to my "Blocked users" settings page
|
||||
Then I can see the following table:
|
||||
| Avatar | Name |
|
||||
| | Harassing User |
|
||||
|
||||
Scenario: Blocked user cannot interact with my contributions
|
||||
Given I block the user "Harassing User"
|
||||
And I previously created a post
|
||||
And the blocked user visits my post
|
||||
Then they should not see the comment from
|
||||
And they should see a text explaining commenting is not possible
|
||||
|
||||
Scenario: Block a previously followed user
|
||||
Given I follow the user "Harassing User"
|
||||
When I visit the profile page of the annoying user
|
||||
And I click on "Block user" from the content menu in the user info box
|
||||
And nobody is following the user profile anymore
|
||||
|
||||
Scenario: Posts of blocked users are not filtered from search results
|
||||
Given "Harassing User" wrote a post "You can still see my posts"
|
||||
And I block the user "Harassing User"
|
||||
When I search for "see"
|
||||
Then I should see the following posts in the select dropdown:
|
||||
| title |
|
||||
| You can still see my posts |
|
||||
|
||||
Scenario: Blocked users can still see my posts
|
||||
Given I previously created a post
|
||||
And I block the user "Harassing User"
|
||||
Given I log out
|
||||
And I am logged in as the "blocked" user
|
||||
When I search for "previously created"
|
||||
Then I should see the following posts in the select dropdown:
|
||||
| title |
|
||||
| previously created post |
|
||||
@ -1,8 +1,7 @@
|
||||
Feature: Mute a User
|
||||
As a user
|
||||
I'd like to have a button to mute another user
|
||||
To prevent him from seeing and interacting with my contributions and also to avoid seeing his/her posts
|
||||
|
||||
To prevent him from seeing and interacting with my contributions
|
||||
Background:
|
||||
Given I have a user account
|
||||
And there is an annoying user called "Spammy Spammer"
|
||||
@ -46,7 +45,7 @@ Feature: Mute a User
|
||||
Given I previously created a post
|
||||
And I mute the user "Spammy Spammer"
|
||||
Given I log out
|
||||
And I am logged in as the muted user
|
||||
And I am logged in as the "muted" user
|
||||
When I search for "previously created"
|
||||
Then I should see the following posts in the select dropdown:
|
||||
| title |
|
||||
|
||||
@ -172,6 +172,23 @@ export default {
|
||||
icon: 'user-times',
|
||||
})
|
||||
}
|
||||
if (this.resource.isBlocked) {
|
||||
routes.push({
|
||||
label: this.$t(`settings.blocked-users.unblock`),
|
||||
callback: () => {
|
||||
this.$emit('unblock', this.resource)
|
||||
},
|
||||
icon: 'user-plus',
|
||||
})
|
||||
} else {
|
||||
routes.push({
|
||||
label: this.$t(`settings.blocked-users.block`),
|
||||
callback: () => {
|
||||
this.$emit('block', this.resource)
|
||||
},
|
||||
icon: 'user-times',
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -337,7 +337,9 @@
|
||||
"your-perspective": "You will no longer be able to interact with their contributions.",
|
||||
"their-perspective": "Vice versa: The blocked person will also no longer be able to interact with your contributions.",
|
||||
"notifications": "Blocked users will no longer receive notifications if they mention each other.",
|
||||
"closing": "This should be sufficient for now so that blocked users can no longer bother you."
|
||||
"closing": "This should be sufficient for now so that blocked users can no longer bother you.",
|
||||
"commenting-disabled": "Commenting is not possible at this time on this post.",
|
||||
"commenting-explanation": "This can happen for several reasons, please see our "
|
||||
},
|
||||
"columns": {
|
||||
"name": "Name",
|
||||
|
||||
@ -24,6 +24,8 @@
|
||||
class="user-content-menu"
|
||||
@mute="muteUser"
|
||||
@unmute="unmuteUser"
|
||||
@block="blockUser"
|
||||
@unblock="unblockUser"
|
||||
/>
|
||||
</client-only>
|
||||
<ds-space margin="small">
|
||||
@ -67,7 +69,7 @@
|
||||
<ds-space margin="small">
|
||||
<template v-if="!myProfile">
|
||||
<hc-follow-button
|
||||
v-if="!user.isMuted"
|
||||
v-if="!user.isMuted || !user.isBlocked"
|
||||
:follow-id="user.id"
|
||||
:is-followed="user.followedByCurrentUser"
|
||||
@optimistic="optimisticFollow"
|
||||
@ -285,6 +287,7 @@ import MasonryGridItem from '~/components/MasonryGrid/MasonryGridItem.vue'
|
||||
import { profilePagePosts } from '~/graphql/PostQuery'
|
||||
import UserQuery from '~/graphql/User'
|
||||
import { muteUser, unmuteUser } from '~/graphql/settings/MutedUsers'
|
||||
import { blockUser, unblockUser } from '~/graphql/settings/BlockedUsers'
|
||||
import PostMutations from '~/graphql/PostMutations'
|
||||
import UpdateQuery from '~/components/utils/UpdateQuery'
|
||||
|
||||
@ -417,6 +420,24 @@ export default {
|
||||
this.$apollo.queries.profilePagePosts.refetch()
|
||||
}
|
||||
},
|
||||
async blockUser(user) {
|
||||
try {
|
||||
await this.$apollo.mutate({ mutation: blockUser(), variables: { id: user.id } })
|
||||
} catch (error) {
|
||||
this.$toast.error(error.message)
|
||||
} finally {
|
||||
this.$apollo.queries.User.refetch()
|
||||
}
|
||||
},
|
||||
async unblockUser(user) {
|
||||
try {
|
||||
this.$apollo.mutate({ mutation: unblockUser(), variables: { id: user.id } })
|
||||
} catch (error) {
|
||||
this.$toast.error(error.message)
|
||||
} finally {
|
||||
this.$apollo.queries.User.refetch()
|
||||
}
|
||||
},
|
||||
pinPost(post) {
|
||||
this.$apollo
|
||||
.mutate({
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user