mirror of
https://github.com/bitsocialnet/5chan.git
synced 2026-08-03 07:41:04 +02:00
fix(edit-menu): allow pseudonymous reply deletion (#1076)
* fix(edit-menu): allow pseudonymous reply deletion * fix(edit-menu): ignore non-pseudonymous mode
This commit is contained in:
@@ -14,6 +14,7 @@ const testState = vi.hoisted(() => ({
|
||||
hidden: false,
|
||||
hideMock: vi.fn(),
|
||||
mediaInfo: undefined as { thumbnail?: string; type?: string; url?: string } | undefined,
|
||||
pseudonymityMode: undefined as string | undefined,
|
||||
privileges: {
|
||||
isAccountCommentAuthor: false,
|
||||
isAccountMod: false,
|
||||
@@ -90,6 +91,10 @@ vi.mock('../../../../hooks/use-author-privileges', () => ({
|
||||
default: () => testState.privileges,
|
||||
}));
|
||||
|
||||
vi.mock('../../../../hooks/use-board-pseudonymity-mode', () => ({
|
||||
useBoardPseudonymityMode: () => testState.pseudonymityMode,
|
||||
}));
|
||||
|
||||
vi.mock('../../../../hooks/use-hide', () => ({
|
||||
default: () => ({
|
||||
hidden: testState.hidden,
|
||||
@@ -151,6 +156,7 @@ describe('PostMenuMobile', () => {
|
||||
vi.clearAllMocks();
|
||||
testState.hidden = false;
|
||||
testState.mediaInfo = undefined;
|
||||
testState.pseudonymityMode = undefined;
|
||||
testState.privileges = {
|
||||
isAccountCommentAuthor: false,
|
||||
isAccountMod: false,
|
||||
@@ -197,6 +203,22 @@ describe('PostMenuMobile', () => {
|
||||
expect(testState.hideMock).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('shows edit controls on pseudonymous boards even without a local author-address match', async () => {
|
||||
testState.pseudonymityMode = 'per-post';
|
||||
|
||||
await renderMenu('/mu');
|
||||
|
||||
expect(document.body.querySelector('[data-testid="edit-menu"]')?.textContent).toBe('cid-1');
|
||||
});
|
||||
|
||||
it("does not show edit controls when pseudonymity mode is 'none' and the user lacks privileges", async () => {
|
||||
testState.pseudonymityMode = 'none';
|
||||
|
||||
await renderMenu('/mu');
|
||||
|
||||
expect(document.body.querySelector('[data-testid="edit-menu"]')).toBeNull();
|
||||
});
|
||||
|
||||
it('omits thread hiding on the root thread route and suppresses the menu for deleted posts', async () => {
|
||||
await renderMenu('/mu/thread/cid-1');
|
||||
await openMenu();
|
||||
|
||||
@@ -10,6 +10,7 @@ import { copyToClipboard } from '../../../lib/utils/clipboard-utils';
|
||||
import { getBoardPath } from '../../../lib/utils/route-utils';
|
||||
import { useDirectories } from '../../../hooks/use-directories';
|
||||
import useEditCommentPrivileges from '../../../hooks/use-author-privileges';
|
||||
import { useBoardPseudonymityMode } from '../../../hooks/use-board-pseudonymity-mode';
|
||||
import useHide from '../../../hooks/use-hide';
|
||||
import EditMenu from '../../edit-menu/edit-menu';
|
||||
import { isBoardView, isPostPageView } from '../../../lib/utils/view-utils';
|
||||
@@ -198,6 +199,8 @@ const PostMenuMobile = ({ postMenu, editMenuPost }: PostMenuMobileProps) => {
|
||||
commentAuthorAddress: authorAddress || '',
|
||||
subplebbitAddress: resolvedCommunityAddress || '',
|
||||
});
|
||||
const pseudonymityMode = useBoardPseudonymityMode(resolvedCommunityAddress);
|
||||
const canAttemptAuthorDelete = pseudonymityMode !== undefined && pseudonymityMode !== 'none';
|
||||
const commentMediaInfo = getCommentMediaInfo(link || '', thumbnailUrl || '', linkWidth || 0, linkHeight || 0);
|
||||
const { thumbnail, type, url } = commentMediaInfo || {};
|
||||
const [isMenuOpen, setIsMenuOpen] = useState(false);
|
||||
@@ -261,7 +264,7 @@ const PostMenuMobile = ({ postMenu, editMenuPost }: PostMenuMobileProps) => {
|
||||
)}
|
||||
</>
|
||||
)}
|
||||
{(isAccountMod || isAccountCommentAuthor) && cid && (
|
||||
{(isAccountMod || isAccountCommentAuthor || canAttemptAuthorDelete) && cid && (
|
||||
<span className={styles.checkbox}>
|
||||
<EditMenu post={editMenuPost} />
|
||||
</span>
|
||||
|
||||
Reference in New Issue
Block a user