mirror of
https://github.com/NodeBB/NodeBB.git
synced 2026-01-13 19:12:56 +01:00
154 lines
4.5 KiB
JavaScript
154 lines
4.5 KiB
JavaScript
'use strict';
|
|
|
|
const assert = require('assert');
|
|
const nconf = require('nconf');
|
|
|
|
const db = require('../mocks/databasemock');
|
|
const user = require('../../src/user');
|
|
const categories = require('../../src/categories');
|
|
const topics = require('../../src/topics');
|
|
const posts = require('../../src/posts');
|
|
const meta = require('../../src/meta');
|
|
const install = require('../../src/install');
|
|
const utils = require('../../src/utils');
|
|
const activitypub = require('../../src/activitypub');
|
|
|
|
const helpers = require('./helpers');
|
|
|
|
describe('Outbound activities module', () => {
|
|
before(async () => {
|
|
meta.config.activitypubEnabled = 1;
|
|
await install.giveWorldPrivileges();
|
|
});
|
|
|
|
describe('.announce', () => {
|
|
function commonTests() {
|
|
it('should not error when called', async function () {
|
|
await activitypub.out.announce.topic(this.tid, this.uid);
|
|
const { payload, targets } = Array.from(activitypub._sent).pop()[1];
|
|
this.payload = payload;
|
|
this.targets = targets;
|
|
});
|
|
|
|
it('should send an Announce activity', function () {
|
|
assert.strictEqual(activitypub._sent.size, 1);
|
|
assert.strictEqual(this.payload.type, 'Announce');
|
|
});
|
|
|
|
it('should contain the main post\'s pid in object', function () {
|
|
assert.strictEqual(this.payload.object, this.pid);
|
|
});
|
|
|
|
it('should have actor as the calling user or category as appropriate', function () {
|
|
if (this.uid) {
|
|
assert.strictEqual(this.payload.actor, `${nconf.get('url')}/uid/${this.uid}`);
|
|
} else {
|
|
assert.strictEqual(this.payload.actor, `${nconf.get('url')}/category/${this.cid}`);
|
|
}
|
|
});
|
|
}
|
|
|
|
describe('.topic() (remote topic; by cid)', () => {
|
|
before(async function () {
|
|
const { id: pid, note } = helpers.mocks.note();
|
|
const { cid } = await categories.create({ name: utils.generateUUID() });
|
|
await activitypub.notes.assert(0, pid, { skipChecks: 1, cid });
|
|
|
|
this.pid = pid;
|
|
this.note = note;
|
|
this.cid = cid;
|
|
this.tid = await posts.getPostField(pid, 'tid');
|
|
});
|
|
|
|
after(() => {
|
|
activitypub._sent.clear();
|
|
});
|
|
|
|
commonTests();
|
|
|
|
it('should include the category\'s followers collection in cc', function () {
|
|
assert(this.payload.cc.includes(`${nconf.get('url')}/category/${this.cid}/followers`));
|
|
});
|
|
|
|
it('should include the author in cc', function () {
|
|
assert(this.payload.cc.includes(this.note.attributedTo));
|
|
});
|
|
|
|
it('should include the author in targets', function () {
|
|
assert(this.targets.includes(this.note.attributedTo));
|
|
});
|
|
});
|
|
|
|
describe('.topic() (local topic; by cid)', () => {
|
|
before(async function () {
|
|
const uid = await user.create({ username: utils.generateUUID().slice(0, 10) });
|
|
const { cid } = await categories.create({ name: utils.generateUUID() });
|
|
const { postData, topicData } = await topics.post({
|
|
cid, uid,
|
|
title: utils.generateUUID(),
|
|
content: utils.generateUUID(),
|
|
});
|
|
|
|
this.tid = topicData.tid;
|
|
this.cid = cid;
|
|
this.pid = `${nconf.get('url')}/post/${topicData.mainPid}`;
|
|
this.note = await activitypub.mocks.notes.public(postData);
|
|
});
|
|
|
|
after(() => {
|
|
activitypub._sent.clear();
|
|
});
|
|
|
|
commonTests();
|
|
|
|
it('should include the topic\'s mainPid in object', async function () {
|
|
const mainPid = await topics.getTopicField(this.tid, 'mainPid');
|
|
assert.strictEqual(this.payload.object, `${nconf.get('url')}/post/${mainPid}`);
|
|
});
|
|
});
|
|
|
|
describe('.topic() (remote topic; by uid)', () => {
|
|
before(async function () {
|
|
const uid = await user.create({ username: utils.generateUUID().slice(0, 10) });
|
|
const { id: pid, note } = helpers.mocks.note();
|
|
|
|
await activitypub.notes.assert(0, pid, { skipChecks: 1 });
|
|
|
|
this.pid = pid;
|
|
this.note = note;
|
|
this.tid = await posts.getPostField(pid, 'tid');
|
|
this.uid = uid;
|
|
});
|
|
|
|
after(() => {
|
|
activitypub._sent.clear();
|
|
});
|
|
|
|
commonTests();
|
|
});
|
|
|
|
describe('.topic() (local topic; by uid)', () => {
|
|
before(async function () {
|
|
const uid = await user.create({ username: utils.generateUUID().slice(0, 10) });
|
|
const { cid } = await categories.create({ name: utils.generateUUID() });
|
|
const { postData, topicData } = await topics.post({
|
|
cid, uid,
|
|
title: utils.generateUUID(),
|
|
content: utils.generateUUID(),
|
|
});
|
|
|
|
this.tid = topicData.tid;
|
|
this.cid = cid;
|
|
this.pid = `${nconf.get('url')}/post/${topicData.mainPid}`;
|
|
this.note = await activitypub.mocks.notes.public(postData);
|
|
this.uid = uid;
|
|
});
|
|
|
|
after(() => {
|
|
activitypub._sent.clear();
|
|
});
|
|
|
|
commonTests();
|
|
});
|
|
});
|
|
}); |