Browse Source

Add test on AP hooks

tags/v5.1.0
Chocobozzz 3 weeks ago
parent
commit
96d00a997b
No known key found for this signature in database GPG Key ID: 583A612D890159BE
6 changed files with 34 additions and 5 deletions
  1. +2
    -2
      client/src/app/+videos/+video-edit/shared/video-edit.component.ts
  2. +1
    -1
      server/lib/activitypub/send/send-update.ts
  3. +1
    -1
      server/models/video/video.ts
  4. +12
    -0
      server/tests/fixtures/peertube-plugin-test/main.js
  5. +17
    -0
      server/tests/plugins/filter-hooks.ts
  6. +1
    -1
      shared/models/plugins/server/server-hook.model.ts

+ 2
- 2
client/src/app/+videos/+video-edit/shared/video-edit.component.ts View File

@@ -240,11 +240,11 @@ export class VideoEditComponent implements OnInit, OnDestroy {
this.schedulerInterval = setInterval(() => this.minScheduledDate = new Date(), 1000 * 60) // Update every minute
})

const updateForm = (values: any) => {
const updateFormForPlugins = (values: any) => {
this.form.patchValue(values)
this.cd.detectChanges()
}
this.hooks.runAction('action:video-edit.init', 'video-edit', { type: this.type, updateForm })
this.hooks.runAction('action:video-edit.init', 'video-edit', { type: this.type, updateForm: updateFormForPlugins })

this.form.valueChanges.subscribe(() => {
this.hooks.runAction('action:video-edit.form.updated', 'video-edit', { type: this.type, formValues: this.form.value })


+ 1
- 1
server/lib/activitypub/send/send-update.ts View File

@@ -59,7 +59,7 @@ async function sendUpdateActor (accountOrChannel: MChannelDefault | MAccountDefa
logger.info('Creating job to update actor %s.', byActor.url)

const url = getUpdateActivityPubUrl(byActor.url, byActor.updatedAt.toISOString())
const accountOrChannelObject = (accountOrChannel as any).toActivityPubObject() // FIXME: typescript bug?
const accountOrChannelObject = await (accountOrChannel as any).toActivityPubObject() // FIXME: typescript bug?
const audience = getAudience(byActor)
const updateActivity = buildUpdateActivity(url, byActor, accountOrChannelObject, audience)



+ 1
- 1
server/models/video/video.ts View File

@@ -1717,7 +1717,7 @@ export class VideoModel extends Model<Partial<AttributesOnly<VideoModel>>> {
toActivityPubObject (this: MVideoAP): Promise<VideoObject> {
return Hooks.wrapObject(
videoModelToActivityPubObject(this),
'filter:activity-pub.video.jsonld.build.result',
'filter:activity-pub.video.json-ld.build.result',
{ video: this }
)
}


+ 12
- 0
server/tests/fixtures/peertube-plugin-test/main.js View File

@@ -207,6 +207,18 @@ async function register ({ registerHook, registerSetting, settingsManager, stora

// ---------------------------------------------------------------------------

registerHook({
target: 'filter:activity-pub.activity.context.build.result',
handler: context => context.concat([ 'https://example.com/new-context' ])
})

registerHook({
target: 'filter:activity-pub.video.json-ld.build.result',
handler: (jsonld, { video }) => ({ ...jsonld, videoName: video.name })
})

// ---------------------------------------------------------------------------

registerHook({
target: 'filter:api.video-threads.list.params',
handler: obj => addToCount(obj)


+ 17
- 0
server/tests/plugins/filter-hooks.ts View File

@@ -14,6 +14,7 @@ import {
cleanupTests,
createMultipleServers,
doubleFollow,
makeActivityPubGetRequest,
makeGetRequest,
makeRawRequest,
PeerTubeServer,
@@ -846,6 +847,22 @@ describe('Test plugin filter hooks', function () {
})
})

describe('Activity Pub', function () {

it('Should run filter:activity-pub.activity.context.build.result', async function () {
const { body } = await makeActivityPubGetRequest(servers[0].url, '/w/' + videoUUID)
expect(body.type).to.equal('Video')

expect(body['@context'].some(c => c === 'https://example.com/new-context')).to.be.true
})

it('Should run filter:activity-pub.video.json-ld.build.result', async function () {
const { body } = await makeActivityPubGetRequest(servers[0].url, '/w/' + videoUUID)
expect(body.name).to.equal('default video 0')
expect(body.videoName).to.equal('default video 0')
})
})

after(async function () {
await cleanupTests(servers)
})


+ 1
- 1
shared/models/plugins/server/server-hook.model.ts View File

@@ -119,7 +119,7 @@ export const serverFilterHookObject = {

// Filter the result of video JSON LD builder
// You may also need to use filter:activity-pub.activity.context.build.result to also update JSON LD context
'filter:activity-pub.video.jsonld.build.result': true
'filter:activity-pub.video.json-ld.build.result': true
}

export type ServerFilterHookName = keyof typeof serverFilterHookObject


Loading…
Cancel
Save