You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
209 lines
6.9 KiB
209 lines
6.9 KiB
import {Post, PostType} from '../../../src/api/activitypub';
|
|
import {mapPostToActivity} from '../../../src/utils/posts';
|
|
|
|
describe('mapPostToActivity', function () {
|
|
let post: Post;
|
|
|
|
beforeEach(function () {
|
|
post = {
|
|
id: '123',
|
|
type: PostType.Article,
|
|
title: 'Test Post',
|
|
excerpt: 'Test Excerpt',
|
|
summary: 'Test Summary',
|
|
content: 'Test Content',
|
|
url: 'https://example.com/posts/123',
|
|
featureImageUrl: 'https://example.com/posts/123/feature.jpg',
|
|
publishedAt: '2024-01-01T00:00:00Z',
|
|
likeCount: 2,
|
|
likedByMe: true,
|
|
replyCount: 3,
|
|
readingTimeMinutes: 4,
|
|
attachments: [
|
|
{
|
|
type: 'Image',
|
|
mediaType: 'image/jpeg',
|
|
name: 'test.jpg',
|
|
url: 'https://example.com/test.jpg'
|
|
},
|
|
{
|
|
type: 'Image',
|
|
mediaType: 'image/jpeg',
|
|
name: 'test1.jpg',
|
|
url: 'https://example.com/test1.jpg'
|
|
}
|
|
],
|
|
author: {
|
|
id: 'https://example.com/users/123',
|
|
handle: '@testuser@example.com',
|
|
avatarUrl: 'https://example.com/users/123/avatar.jpg',
|
|
name: 'Test User',
|
|
url: 'https://example.com/users/123',
|
|
followedByMe: false
|
|
},
|
|
authoredByMe: true,
|
|
repostCount: 5,
|
|
repostedByMe: false,
|
|
repostedBy: null
|
|
};
|
|
});
|
|
|
|
test('it sets the correct activity type', function () {
|
|
expect(
|
|
mapPostToActivity(post).type
|
|
).toBe('Create');
|
|
|
|
expect(
|
|
mapPostToActivity({
|
|
...post,
|
|
repostedBy: {
|
|
id: 'https://example.com/users/456',
|
|
handle: '@testuser2@example.com',
|
|
avatarUrl: 'https://example.com/users/456/avatar.jpg',
|
|
name: 'Test User 2',
|
|
url: 'https://example.com/users/456',
|
|
followedByMe: true
|
|
}
|
|
}).type
|
|
).toBe('Announce');
|
|
});
|
|
|
|
test('it sets the correct actor', function () {
|
|
let actor = mapPostToActivity(post).actor;
|
|
|
|
expect(actor.id).toBe('https://example.com/users/123');
|
|
expect(actor.icon.url).toBe('https://example.com/users/123/avatar.jpg');
|
|
expect(actor.name).toBe('Test User');
|
|
expect(actor.preferredUsername).toBe('testuser');
|
|
|
|
// When the post has been reposted, the actor should be the reposter
|
|
actor = mapPostToActivity({
|
|
...post,
|
|
repostedBy: {
|
|
id: 'https://example.com/users/456',
|
|
handle: '@testuser2@example.com',
|
|
avatarUrl: 'https://example.com/users/456/avatar.jpg',
|
|
name: 'Test User 2',
|
|
url: 'https://example.com/users/456',
|
|
followedByMe: false
|
|
}
|
|
}).actor;
|
|
|
|
expect(actor.id).toBe('https://example.com/users/456');
|
|
expect(actor.icon.url).toBe('https://example.com/users/456/avatar.jpg');
|
|
expect(actor.name).toBe('Test User 2');
|
|
expect(actor.preferredUsername).toBe('testuser2');
|
|
});
|
|
|
|
test('it sets the correct object type', function () {
|
|
expect(
|
|
mapPostToActivity(post).object.type
|
|
).toBe('Article');
|
|
|
|
expect(
|
|
mapPostToActivity({
|
|
...post,
|
|
type: PostType.Note
|
|
}).object.type
|
|
).toBe('Note');
|
|
|
|
expect(
|
|
mapPostToActivity({
|
|
...post,
|
|
type: PostType.Tombstone
|
|
}).object.type
|
|
).toBe('Tombstone');
|
|
});
|
|
|
|
test('it sets the correct object', function () {
|
|
const object = mapPostToActivity(post).object;
|
|
|
|
expect(object.type).toBe('Article');
|
|
expect(object.name).toBe('Test Post');
|
|
expect(object.content).toBe('Test Content');
|
|
expect(object.summary).toBe('Test Summary');
|
|
expect(object.url).toBe('https://example.com/posts/123');
|
|
expect(object.attributedTo.id).toBe('https://example.com/users/123');
|
|
expect(object.published).toBe('2024-01-01T00:00:00Z');
|
|
expect(object.preview.content).toBe('Test Excerpt');
|
|
expect(object.id).toBe('123');
|
|
expect(object.replyCount).toBe(3);
|
|
expect(object.liked).toBe(true);
|
|
expect(object.reposted).toBe(false);
|
|
expect(object.repostCount).toBe(5);
|
|
});
|
|
|
|
test('it sets the correct attachments', function () {
|
|
const object = mapPostToActivity(post).object;
|
|
|
|
expect(object.attachment).toHaveLength(2);
|
|
expect(object.attachment[0]).toEqual({
|
|
type: 'Image',
|
|
mediaType: 'image/jpeg',
|
|
name: 'test.jpg',
|
|
url: 'https://example.com/test.jpg'
|
|
});
|
|
expect(object.attachment[1]).toEqual({
|
|
type: 'Image',
|
|
mediaType: 'image/jpeg',
|
|
name: 'test1.jpg',
|
|
url: 'https://example.com/test1.jpg'
|
|
});
|
|
});
|
|
|
|
test('it maps followedByMe property correctly', function () {
|
|
// Test for regular posts (non-reposts)
|
|
const activity = mapPostToActivity({
|
|
...post,
|
|
author: {
|
|
...post.author,
|
|
followedByMe: true
|
|
}
|
|
});
|
|
|
|
expect(activity.actor.followedByMe).toBe(true);
|
|
|
|
// Test for reposts
|
|
const repostActivity = mapPostToActivity({
|
|
...post,
|
|
repostedBy: {
|
|
id: 'https://example.com/users/456',
|
|
handle: '@testuser2@example.com',
|
|
avatarUrl: 'https://example.com/users/456/avatar.jpg',
|
|
name: 'Test User 2',
|
|
url: 'https://example.com/users/456',
|
|
followedByMe: true
|
|
}
|
|
});
|
|
|
|
expect(repostActivity.actor.followedByMe).toBe(true);
|
|
expect(repostActivity.object.attributedTo.followedByMe).toBe(false); // Original author from post.author
|
|
});
|
|
|
|
test('it maps reposted property correctly', function () {
|
|
// Test for regular posts
|
|
const activity = mapPostToActivity({
|
|
...post,
|
|
repostedByMe: true
|
|
});
|
|
|
|
expect(activity.object.reposted).toBe(true);
|
|
|
|
// Test for reposts
|
|
const repostActivity = mapPostToActivity({
|
|
...post,
|
|
repostedByMe: false,
|
|
repostedBy: {
|
|
id: 'https://example.com/users/456',
|
|
handle: '@testuser2@example.com',
|
|
avatarUrl: 'https://example.com/users/456/avatar.jpg',
|
|
name: 'Test User 2',
|
|
url: 'https://example.com/users/456',
|
|
followedByMe: true
|
|
}
|
|
});
|
|
|
|
expect(repostActivity.object.reposted).toBe(false);
|
|
});
|
|
});
|