Show NSFW-node posts to authenticated local members in Curated and Swarm feeds
Hop-State: A_06FP9V8EJ8CX3VM4D7DDZJR Hop-Proposal: R_06FP9V7H6GNGX6CFBQN8HER Hop-Task: T_06FP9TA4HBBMJPF6SDEMEC0 Hop-Attempt: AT_06FP9TA4HBQJXX3KT14FYN0
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
import { describe, expect, it } from 'vitest';
|
||||
import { shouldIncludeNsfwFeed } from './feed-access';
|
||||
|
||||
describe('shouldIncludeNsfwFeed', () => {
|
||||
it('keeps NSFW posts hidden from signed-out visitors on an NSFW node', () => {
|
||||
expect(shouldIncludeNsfwFeed({ viewer: null, localNodeIsNsfw: true })).toBe(false);
|
||||
});
|
||||
|
||||
it('includes NSFW posts for authenticated members of an NSFW node', () => {
|
||||
expect(shouldIncludeNsfwFeed({
|
||||
viewer: { nsfwEnabled: false },
|
||||
localNodeIsNsfw: true,
|
||||
})).toBe(true);
|
||||
});
|
||||
|
||||
it('respects an enabled account preference on a general-purpose node', () => {
|
||||
expect(shouldIncludeNsfwFeed({
|
||||
viewer: { nsfwEnabled: true },
|
||||
localNodeIsNsfw: false,
|
||||
})).toBe(true);
|
||||
});
|
||||
|
||||
it('filters NSFW posts when neither form of consent is present', () => {
|
||||
expect(shouldIncludeNsfwFeed({
|
||||
viewer: { nsfwEnabled: false },
|
||||
localNodeIsNsfw: false,
|
||||
})).toBe(false);
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,17 @@
|
||||
export interface NsfwFeedViewer {
|
||||
nsfwEnabled?: boolean;
|
||||
}
|
||||
|
||||
export function shouldIncludeNsfwFeed({
|
||||
viewer,
|
||||
localNodeIsNsfw,
|
||||
}: {
|
||||
viewer: NsfwFeedViewer | null;
|
||||
localNodeIsNsfw: boolean;
|
||||
}): boolean {
|
||||
if (!viewer) return false;
|
||||
|
||||
// Signing in to an NSFW node is consent to view its feed. On other nodes,
|
||||
// the viewer's explicit account preference remains authoritative.
|
||||
return localNodeIsNsfw || viewer.nsfwEnabled === true;
|
||||
}
|
||||
Reference in New Issue
Block a user