mirror of
				https://github.com/NodeBB/NodeBB.git
				synced 2025-10-31 02:55:58 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			106 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			106 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| const assert = require('assert');
 | |
| 
 | |
| const db = require('./mocks/databasemock');
 | |
| 
 | |
| const plugins = require('../src/plugins');
 | |
| const categories = require('../src/categories');
 | |
| const topics = require('../src/topics');
 | |
| const user = require('../src/user');
 | |
| 
 | |
| describe('Topic Events', () => {
 | |
| 	let fooUid;
 | |
| 	let topic;
 | |
| 	before(async () => {
 | |
| 		fooUid = await user.create({ username: 'foo', password: '123456' });
 | |
| 
 | |
| 		const categoryObj = await categories.create({
 | |
| 			name: 'Test Category',
 | |
| 			description: 'Test category created by testing script',
 | |
| 		});
 | |
| 		topic = await topics.post({
 | |
| 			title: 'topic events testing',
 | |
| 			content: 'foobar one two three',
 | |
| 			uid: fooUid,
 | |
| 			cid: 1,
 | |
| 		});
 | |
| 	});
 | |
| 
 | |
| 	describe('.init()', () => {
 | |
| 		before(() => {
 | |
| 			topics.events._ready = false;
 | |
| 		});
 | |
| 
 | |
| 		it('should allow a plugin to expose new event types', async () => {
 | |
| 			await plugins.hooks.register('core', {
 | |
| 				hook: 'filter:topicEvents.init',
 | |
| 				method: async ({ types }) => {
 | |
| 					types.foo = {
 | |
| 						icon: 'bar',
 | |
| 						text: 'baz',
 | |
| 						quux: 'quux',
 | |
| 					};
 | |
| 
 | |
| 					return { types };
 | |
| 				},
 | |
| 			});
 | |
| 
 | |
| 			await topics.events.init();
 | |
| 
 | |
| 			assert(topics.events._types.foo);
 | |
| 			assert.deepStrictEqual(topics.events._types.foo, {
 | |
| 				icon: 'bar',
 | |
| 				text: 'baz',
 | |
| 				quux: 'quux',
 | |
| 			});
 | |
| 		});
 | |
| 	});
 | |
| 
 | |
| 	describe('.log()', () => {
 | |
| 		it('should log and return a set of new events in the topic', async () => {
 | |
| 			const events = await topics.events.log(topic.topicData.tid, {
 | |
| 				type: 'foo',
 | |
| 			});
 | |
| 
 | |
| 			assert(events);
 | |
| 			assert(Array.isArray(events));
 | |
| 			events.forEach((event) => {
 | |
| 				assert(['id', 'icon', 'text', 'timestamp', 'timestampISO', 'type', 'quux'].every(key => event.hasOwnProperty(key)));
 | |
| 			});
 | |
| 		});
 | |
| 	});
 | |
| 
 | |
| 	describe('.get()', () => {
 | |
| 		it('should get a topic\'s events', async () => {
 | |
| 			const events = await topics.events.get(topic.topicData.tid);
 | |
| 
 | |
| 			assert(events);
 | |
| 			assert(Array.isArray(events));
 | |
| 			assert.strictEqual(events.length, 1);
 | |
| 			events.forEach((event) => {
 | |
| 				assert(['id', 'icon', 'text', 'timestamp', 'timestampISO', 'type', 'quux'].every(key => event.hasOwnProperty(key)));
 | |
| 			});
 | |
| 		});
 | |
| 	});
 | |
| 
 | |
| 	describe('.purge()', () => {
 | |
| 		let eventIds;
 | |
| 
 | |
| 		before(async () => {
 | |
| 			const events = await topics.events.get(topic.topicData.tid);
 | |
| 			eventIds = events.map(event => event.id);
 | |
| 		});
 | |
| 
 | |
| 		it('should purge topic\'s events from the database', async () => {
 | |
| 			await topics.events.purge(topic.topicData.tid);
 | |
| 
 | |
| 			const keys = [`topic:${topic.topicData.tid}:events`];
 | |
| 			keys.push(...eventIds.map(id => `topicEvent:${id}`));
 | |
| 
 | |
| 			const exists = await Promise.all(keys.map(key => db.exists(key)));
 | |
| 			assert(exists.every(exists => !exists));
 | |
| 		});
 | |
| 	});
 | |
| });
 |