1b9857b427
Hop-State: A_06FPEZ3WB9ZANP4K6YVY4S0 Hop-Proposal: R_06FPEZ34Y13T1DBP9HTRMBR Hop-Task: T_06FPEYF7BR1M5HZ8Z1684KG Hop-Attempt: AT_06FPEYF7BS5KHWEJRTK2PW0
83 lines
2.5 KiB
TypeScript
83 lines
2.5 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
import type { SwarmPost } from '@/app/api/swarm/timeline/route';
|
|
import { mapSwarmPostToPost } from './feed-post';
|
|
|
|
const original: SwarmPost = {
|
|
id: 'original-id',
|
|
content: 'Original post body',
|
|
createdAt: '2026-07-15T18:49:15.000Z',
|
|
author: {
|
|
handle: 'original-author',
|
|
displayName: 'Original Author',
|
|
avatarUrl: 'https://example.com/original.png',
|
|
isNsfw: false,
|
|
},
|
|
nodeDomain: 'remote.example',
|
|
nodeIsNsfw: true,
|
|
isNsfw: false,
|
|
likeCount: 2,
|
|
repostCount: 1,
|
|
replyCount: 0,
|
|
media: [{ url: 'https://example.com/image.jpg', mimeType: 'image/jpeg' }],
|
|
};
|
|
|
|
describe('mapSwarmPostToPost', () => {
|
|
it('preserves the complete embedded original when mapping a repost', () => {
|
|
const repost: SwarmPost = {
|
|
id: 'repost-id',
|
|
content: '',
|
|
createdAt: '2026-07-15T20:07:48.000Z',
|
|
repostOfId: original.id,
|
|
repostOf: original,
|
|
author: {
|
|
handle: 'reposter',
|
|
displayName: 'Reposter',
|
|
isNsfw: false,
|
|
},
|
|
nodeDomain: 'remote.example',
|
|
nodeIsNsfw: true,
|
|
isNsfw: false,
|
|
likeCount: 0,
|
|
repostCount: 0,
|
|
replyCount: 0,
|
|
};
|
|
|
|
const mapped = mapSwarmPostToPost(repost);
|
|
|
|
expect(mapped.repostOfId).toBe('swarm:remote.example:original-id');
|
|
expect(mapped.repostOf).toMatchObject({
|
|
id: 'swarm:remote.example:original-id',
|
|
content: 'Original post body',
|
|
nodeDomain: 'remote.example',
|
|
author: {
|
|
handle: 'original-author',
|
|
nodeIsNsfw: true,
|
|
},
|
|
media: [{
|
|
id: 'swarm:remote.example:original-id:media:0',
|
|
url: 'https://example.com/image.jpg',
|
|
mimeType: 'image/jpeg',
|
|
}],
|
|
});
|
|
});
|
|
|
|
it('preserves interaction and link-preview fields', () => {
|
|
const mapped = mapSwarmPostToPost({
|
|
...original,
|
|
isLiked: true,
|
|
isReposted: true,
|
|
linkPreviewUrl: 'https://example.com/story',
|
|
linkPreviewTitle: 'Story',
|
|
linkPreviewType: 'card',
|
|
});
|
|
|
|
expect(mapped).toMatchObject({
|
|
isLiked: true,
|
|
isReposted: true,
|
|
linkPreviewUrl: 'https://example.com/story',
|
|
linkPreviewTitle: 'Story',
|
|
linkPreviewType: 'card',
|
|
});
|
|
});
|
|
});
|