diff options
| author | Daiki Mizukami <tesaguriguma@gmail.com> | 2024-08-09 12:10:51 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-08-09 12:10:51 +0900 |
| commit | 0d508db8a7a36218d38231af4e718aff0e94d9bc (patch) | |
| tree | e17b48907ba006f0492e77084093015516ce4b42 /packages/backend/test/unit/activitypub.ts | |
| parent | ci: change prerelease channels to alpha, beta, and rc (#14376) (diff) | |
| download | sharkey-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.ts | 53 |
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', { |