Enforce commenter gender targeting

This commit is contained in:
jjbrunton committed 2026-08-14 12:57:00 +01:00
1 parent 8523873831
commit 12e2dc56f1
5 files changed
+38 -6

No files matched your search

+31 -3
View File
@@ -727,7 +727,7 @@ describe('MonitorService', () => {
expect(screener.screenCommentReactions).toHaveBeenCalledTimes(1);
});
it('fails closed on low-confidence or non-qualifying reactions', async () => {
it('fails closed on low-confidence, non-qualifying, or non-targeted reactions', async () => {
const source = {
id: 'post1', name: 't3_post1', subreddit: 'scene', author: 'poster', title: 'A scene',
url: 'https://example.com/scene.jpg', permalink: '/r/scene/comments/post1/', thumbnail: '',
@@ -736,11 +736,13 @@ describe('MonitorService', () => {
const redditApi = createMockRedditApi([source]);
redditApi.getBrowsingComments = vi.fn().mockResolvedValue([
{ fullname: 't1_low', author: 'a', text: 'I want this as well', removed: false, createdAt: 101_000, permalink: '/low' },
{ fullname: 't1_male', author: 'b', text: 'As a man I want this', removed: false, createdAt: 102_000, permalink: '/male' },
{ fullname: 't1_male', author: 'b', text: 'I want to put my bulge there', removed: false, createdAt: 102_000, permalink: '/male' },
{ fullname: 't1_unknown', author: 'c', text: 'I would love this', removed: false, createdAt: 103_000, permalink: '/unknown' },
]);
const screener = { screenCommentReactions: vi.fn().mockResolvedValue([
{ id: 't1_low', qualifies: true, expressedGender: 'female', confidence: 0.79, evidence: '' },
{ id: 't1_male', qualifies: false, expressedGender: 'male', confidence: 0.99, evidence: '' },
{ id: 't1_male', qualifies: true, expressedGender: 'male', confidence: 0.99, evidence: 'self-referential male anatomy' },
{ id: 't1_unknown', qualifies: true, expressedGender: 'unknown', confidence: 0.95, evidence: 'no gender perspective' },
]) };
const config = getTestConfig({ reddit: {
subreddits: [{ name: 'scene', type: 'image', targetingMode: 'comment-author' }],
@@ -752,5 +754,31 @@ describe('MonitorService', () => {
await expect(monitor.fetchCandidates(config.reddit.subreddits[0])).resolves.toEqual([]);
});
it('allows an expressed gender when it is explicitly targeted', async () => {
const source = {
id: 'post1', name: 't3_post1', subreddit: 'scene', author: 'poster', title: 'A scene',
url: 'https://example.com/scene.jpg', permalink: '/r/scene/comments/post1/', thumbnail: '',
is_self: false, created_utc: 100, over_18: true, spoiler: false,
} as RedditPost;
const redditApi = createMockRedditApi([source]);
redditApi.getBrowsingComments = vi.fn().mockResolvedValue([
{ fullname: 't1_unknown', author: 'a', text: 'I would love this', removed: false, createdAt: 101_000, permalink: '/unknown' },
]);
const screener = { screenCommentReactions: vi.fn().mockResolvedValue([
{ id: 't1_unknown', qualifies: true, expressedGender: 'unknown', confidence: 0.95, evidence: '' },
]) };
const config = getTestConfig({ reddit: {
subreddits: [{ name: 'scene', type: 'image', targetingMode: 'comment-author' }],
targetGenders: ['unknown'],
} });
monitor = new MonitorService(
redditApi, createMockPostsRepo(), createMockMessagesRepo(), config, logger, 0, undefined, screener,
);
const candidates = await monitor.fetchCandidates(config.reddit.subreddits[0]);
expect(candidates.map((candidate) => candidate.id)).toEqual(['t1_unknown']);
});
});
});