diff options
| author | Kagami Sascha Rosylight <saschanaz@outlook.com> | 2023-02-19 07:27:14 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-02-19 15:27:14 +0900 |
| commit | 2aa73fdf6c91f6f1ec01c5d50d046f2e6e970faf (patch) | |
| tree | 93dca7b84038ad45b0c71552167765debb7981b4 /packages/backend/test/unit/activitypub.ts | |
| parent | fix lint (diff) | |
| download | misskey-2aa73fdf6c91f6f1ec01c5d50d046f2e6e970faf.tar.gz misskey-2aa73fdf6c91f6f1ec01c5d50d046f2e6e970faf.tar.bz2 misskey-2aa73fdf6c91f6f1ec01c5d50d046f2e6e970faf.zip | |
test(backend): restore AP unit tests (#9987)
Diffstat (limited to 'packages/backend/test/unit/activitypub.ts')
| -rw-r--r-- | packages/backend/test/unit/activitypub.ts | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/packages/backend/test/unit/activitypub.ts b/packages/backend/test/unit/activitypub.ts new file mode 100644 index 0000000000..3d0032507e --- /dev/null +++ b/packages/backend/test/unit/activitypub.ts @@ -0,0 +1,108 @@ +process.env.NODE_ENV = 'test'; + +import * as assert from 'assert'; +import rndstr from 'rndstr'; +import { Test } from '@nestjs/testing'; +import { jest } from '@jest/globals'; + +import { ApNoteService } from '@/core/activitypub/models/ApNoteService.js'; +import { ApPersonService } from '@/core/activitypub/models/ApPersonService.js'; +import { GlobalModule } from '@/GlobalModule.js'; +import { CoreModule } from '@/core/CoreModule.js'; +import { FederatedInstanceService } from '@/core/FederatedInstanceService.js'; +import { LoggerService } from '@/core/LoggerService.js'; +import { MockResolver } from '../misc/mock-resolver.js'; + +describe('ActivityPub', () => { + let noteService: ApNoteService; + let personService: ApPersonService; + let resolver: MockResolver; + + beforeEach(async () => { + const app = await Test.createTestingModule({ + imports: [GlobalModule, CoreModule], + }).compile(); + + await app.init(); + app.enableShutdownHooks(); + + noteService = app.get<ApNoteService>(ApNoteService); + personService = app.get<ApPersonService>(ApPersonService); + resolver = new MockResolver(await app.resolve<LoggerService>(LoggerService)); + + // Prevent ApPersonService from fetching instance, as it causes Jest import-after-test error + const federatedInstanceService = app.get<FederatedInstanceService>(FederatedInstanceService); + jest.spyOn(federatedInstanceService, 'fetch').mockImplementation(() => new Promise(() => {})); + }); + + describe('Parse minimum object', () => { + const host = 'https://host1.test'; + const preferredUsername = `${rndstr('A-Z', 4)}${rndstr('a-z', 4)}`; + const actorId = `${host}/users/${preferredUsername.toLowerCase()}`; + + const actor = { + '@context': 'https://www.w3.org/ns/activitystreams', + id: actorId, + type: 'Person', + preferredUsername, + inbox: `${actorId}/inbox`, + outbox: `${actorId}/outbox`, + }; + + const post = { + '@context': 'https://www.w3.org/ns/activitystreams', + id: `${host}/users/${rndstr('0-9a-z', 8)}`, + type: 'Note', + attributedTo: actor.id, + to: 'https://www.w3.org/ns/activitystreams#Public', + content: 'あ', + }; + + test('Minimum Actor', async () => { + resolver._register(actor.id, actor); + + const user = await personService.createPerson(actor.id, resolver); + + assert.deepStrictEqual(user.uri, actor.id); + assert.deepStrictEqual(user.username, actor.preferredUsername); + assert.deepStrictEqual(user.inbox, actor.inbox); + }); + + test('Minimum Note', async () => { + resolver._register(actor.id, actor); + resolver._register(post.id, post); + + const note = await noteService.createNote(post.id, resolver, true); + + assert.deepStrictEqual(note?.uri, post.id); + assert.deepStrictEqual(note.visibility, 'public'); + assert.deepStrictEqual(note.text, post.content); + }); + }); + + describe('Truncate long name', () => { + const host = 'https://host1.test'; + const preferredUsername = `${rndstr('A-Z', 4)}${rndstr('a-z', 4)}`; + const actorId = `${host}/users/${preferredUsername.toLowerCase()}`; + + const name = rndstr('0-9a-z', 129); + + const actor = { + '@context': 'https://www.w3.org/ns/activitystreams', + id: actorId, + type: 'Person', + preferredUsername, + name, + inbox: `${actorId}/inbox`, + outbox: `${actorId}/outbox`, + }; + + test('Actor', async () => { + resolver._register(actor.id, actor); + + const user = await personService.createPerson(actor.id, resolver); + + assert.deepStrictEqual(user.name, actor.name.substr(0, 128)); + }); + }); +}); |