summaryrefslogtreecommitdiff
path: root/packages/backend/test/unit/activitypub.ts
diff options
context:
space:
mode:
authorDaiki Mizukami <tesaguriguma@gmail.com>2024-08-09 12:10:51 +0900
committerGitHub <noreply@github.com>2024-08-09 12:10:51 +0900
commit0d508db8a7a36218d38231af4e718aff0e94d9bc (patch)
treee17b48907ba006f0492e77084093015516ce4b42 /packages/backend/test/unit/activitypub.ts
parentci: change prerelease channels to alpha, beta, and rc (#14376) (diff)
downloadsharkey-0d508db8a7a36218d38231af4e718aff0e94d9bc.tar.gz
sharkey-0d508db8a7a36218d38231af4e718aff0e94d9bc.tar.bz2
sharkey-0d508db8a7a36218d38231af4e718aff0e94d9bc.zip
fix(backend): check visibility of following/followers of remote users / feat: moderators can see following/followers of all users (#14375)
* fix(backend): check visibility of following/followers of remote users Resolves https://github.com/misskey-dev/misskey/issues/13362. * test(backend): add tests for visibility of following/followers of remote users * docs(changelog): update CHANGELOG.md * feat: moderators can see following/followers of all users * docs(changelog): update CHANGELOG.md * refactor(backend): minor refactoring `createPerson`と`if`の条件を統一するとともに、異常系の 処理をearly returnに追い出すための変更。 * feat(backend): moderators can see following/followers count of all users As per https://github.com/misskey-dev/misskey/pull/14375#issuecomment-2275044908.
Diffstat (limited to 'packages/backend/test/unit/activitypub.ts')
-rw-r--r--packages/backend/test/unit/activitypub.ts53
1 files changed, 52 insertions, 1 deletions
diff --git a/packages/backend/test/unit/activitypub.ts b/packages/backend/test/unit/activitypub.ts
index 6962608106..763ce2b336 100644
--- a/packages/backend/test/unit/activitypub.ts
+++ b/packages/backend/test/unit/activitypub.ts
@@ -20,7 +20,8 @@ import { CoreModule } from '@/core/CoreModule.js';
import { FederatedInstanceService } from '@/core/FederatedInstanceService.js';
import { LoggerService } from '@/core/LoggerService.js';
import type { IActor, IApDocument, ICollection, IObject, IPost } from '@/core/activitypub/type.js';
-import { MiMeta, MiNote } from '@/models/_.js';
+import { MiMeta, MiNote, UserProfilesRepository } from '@/models/_.js';
+import { DI } from '@/di-symbols.js';
import { secureRndstr } from '@/misc/secure-rndstr.js';
import { DownloadService } from '@/core/DownloadService.js';
import { MetaService } from '@/core/MetaService.js';
@@ -86,6 +87,7 @@ async function createRandomRemoteUser(
}
describe('ActivityPub', () => {
+ let userProfilesRepository: UserProfilesRepository;
let imageService: ApImageService;
let noteService: ApNoteService;
let personService: ApPersonService;
@@ -127,6 +129,8 @@ describe('ActivityPub', () => {
await app.init();
app.enableShutdownHooks();
+ userProfilesRepository = app.get(DI.userProfilesRepository);
+
noteService = app.get<ApNoteService>(ApNoteService);
personService = app.get<ApPersonService>(ApPersonService);
rendererService = app.get<ApRendererService>(ApRendererService);
@@ -205,6 +209,53 @@ describe('ActivityPub', () => {
});
});
+ describe('Collection visibility', () => {
+ test('Public following/followers', async () => {
+ const actor = createRandomActor();
+ actor.following = {
+ id: `${actor.id}/following`,
+ type: 'OrderedCollection',
+ totalItems: 0,
+ first: `${actor.id}/following?page=1`,
+ };
+ actor.followers = `${actor.id}/followers`;
+
+ resolver.register(actor.id, actor);
+ resolver.register(actor.followers, {
+ id: actor.followers,
+ type: 'OrderedCollection',
+ totalItems: 0,
+ first: `${actor.followers}?page=1`,
+ });
+
+ const user = await personService.createPerson(actor.id, resolver);
+ const userProfile = await userProfilesRepository.findOneByOrFail({ userId: user.id });
+
+ assert.deepStrictEqual(userProfile.followingVisibility, 'public');
+ assert.deepStrictEqual(userProfile.followersVisibility, 'public');
+ });
+
+ test('Private following/followers', async () => {
+ const actor = createRandomActor();
+ actor.following = {
+ id: `${actor.id}/following`,
+ type: 'OrderedCollection',
+ totalItems: 0,
+ // first: …
+ };
+ actor.followers = `${actor.id}/followers`;
+
+ resolver.register(actor.id, actor);
+ //resolver.register(actor.followers, { … });
+
+ const user = await personService.createPerson(actor.id, resolver);
+ const userProfile = await userProfilesRepository.findOneByOrFail({ userId: user.id });
+
+ assert.deepStrictEqual(userProfile.followingVisibility, 'private');
+ assert.deepStrictEqual(userProfile.followersVisibility, 'private');
+ });
+ });
+
describe('Renderer', () => {
test('Render an announce with visibility: followers', () => {
rendererService.renderAnnounce('https://example.com/notes/00example', {