* fix(backend): incorrect logic for determining whether Quote or not * Update CHANGELOG.md --------- Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
		
			
				
	
	
		
			145 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			145 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
/*
 | 
						|
 * SPDX-FileCopyrightText: syuilo and misskey-project
 | 
						|
 * SPDX-License-Identifier: AGPL-3.0-only
 | 
						|
 */
 | 
						|
 | 
						|
import { Test } from '@nestjs/testing';
 | 
						|
 | 
						|
import { CoreModule } from '@/core/CoreModule.js';
 | 
						|
import { NoteCreateService } from '@/core/NoteCreateService.js';
 | 
						|
import { GlobalModule } from '@/GlobalModule.js';
 | 
						|
import { MiNote } from '@/models/Note.js';
 | 
						|
import { IPoll } from '@/models/Poll.js';
 | 
						|
import { MiDriveFile } from '@/models/DriveFile.js';
 | 
						|
 | 
						|
describe('NoteCreateService', () => {
 | 
						|
	let noteCreateService: NoteCreateService;
 | 
						|
 | 
						|
	beforeAll(async () => {
 | 
						|
		const app = await Test.createTestingModule({
 | 
						|
			imports: [GlobalModule, CoreModule],
 | 
						|
		}).compile();
 | 
						|
		noteCreateService = app.get<NoteCreateService>(NoteCreateService);
 | 
						|
	});
 | 
						|
 | 
						|
	describe('is-renote', () => {
 | 
						|
		const base: MiNote = {
 | 
						|
			id: 'some-note-id',
 | 
						|
			replyId: null,
 | 
						|
			reply: null,
 | 
						|
			renoteId: null,
 | 
						|
			renote: null,
 | 
						|
			threadId: null,
 | 
						|
			text: null,
 | 
						|
			name: null,
 | 
						|
			cw: null,
 | 
						|
			userId: 'some-user-id',
 | 
						|
			user: null,
 | 
						|
			localOnly: false,
 | 
						|
			reactionAcceptance: null,
 | 
						|
			renoteCount: 0,
 | 
						|
			repliesCount: 0,
 | 
						|
			clippedCount: 0,
 | 
						|
			reactions: {},
 | 
						|
			visibility: 'public',
 | 
						|
			uri: null,
 | 
						|
			url: null,
 | 
						|
			fileIds: [],
 | 
						|
			attachedFileTypes: [],
 | 
						|
			visibleUserIds: [],
 | 
						|
			mentions: [],
 | 
						|
			mentionedRemoteUsers: '',
 | 
						|
			reactionAndUserPairCache: [],
 | 
						|
			emojis: [],
 | 
						|
			tags: [],
 | 
						|
			hasPoll: false,
 | 
						|
			channelId: null,
 | 
						|
			channel: null,
 | 
						|
			userHost: null,
 | 
						|
			replyUserId: null,
 | 
						|
			replyUserHost: null,
 | 
						|
			renoteUserId: null,
 | 
						|
			renoteUserHost: null,
 | 
						|
		};
 | 
						|
 | 
						|
		const poll: IPoll = {
 | 
						|
			choices: ['kinoko', 'takenoko'],
 | 
						|
			multiple: false,
 | 
						|
			expiresAt: null,
 | 
						|
		};
 | 
						|
 | 
						|
		const file: MiDriveFile = {
 | 
						|
			id: 'some-file-id',
 | 
						|
			userId: null,
 | 
						|
			user: null,
 | 
						|
			userHost: null,
 | 
						|
			md5: '',
 | 
						|
			name: '',
 | 
						|
			type: '',
 | 
						|
			size: 0,
 | 
						|
			comment: null,
 | 
						|
			blurhash: null,
 | 
						|
			properties: {},
 | 
						|
			storedInternal: false,
 | 
						|
			url: '',
 | 
						|
			thumbnailUrl: null,
 | 
						|
			webpublicUrl: null,
 | 
						|
			webpublicType: null,
 | 
						|
			accessKey: null,
 | 
						|
			thumbnailAccessKey: null,
 | 
						|
			webpublicAccessKey: null,
 | 
						|
			uri: null,
 | 
						|
			src: null,
 | 
						|
			folderId: null,
 | 
						|
			folder: null,
 | 
						|
			isSensitive: false,
 | 
						|
			maybeSensitive: false,
 | 
						|
			maybePorn: false,
 | 
						|
			isLink: false,
 | 
						|
			requestHeaders: null,
 | 
						|
			requestIp: null,
 | 
						|
		};
 | 
						|
 | 
						|
		test('note without renote should not be Renote', () => {
 | 
						|
			const note = { renote: null };
 | 
						|
			expect(noteCreateService['isRenote'](note)).toBe(false);
 | 
						|
		});
 | 
						|
 | 
						|
		test('note with renote should be Renote and not be Quote', () => {
 | 
						|
			const note = { renote: base };
 | 
						|
			expect(noteCreateService['isRenote'](note)).toBe(true);
 | 
						|
			expect(noteCreateService['isQuote'](note)).toBe(false);
 | 
						|
		});
 | 
						|
 | 
						|
		test('note with renote and text should be Quote', () => {
 | 
						|
			const note = { renote: base, text: 'some-text' };
 | 
						|
			expect(noteCreateService['isRenote'](note)).toBe(true);
 | 
						|
			expect(noteCreateService['isQuote'](note)).toBe(true);
 | 
						|
		});
 | 
						|
 | 
						|
		test('note with renote and cw should be Quote', () => {
 | 
						|
			const note = { renote: base, cw: 'some-cw' };
 | 
						|
			expect(noteCreateService['isRenote'](note)).toBe(true);
 | 
						|
			expect(noteCreateService['isQuote'](note)).toBe(true);
 | 
						|
		});
 | 
						|
 | 
						|
		test('note with renote and reply should be Quote', () => {
 | 
						|
			const note = { renote: base, reply: { ...base, id: 'another-note-id' } };
 | 
						|
			expect(noteCreateService['isRenote'](note)).toBe(true);
 | 
						|
			expect(noteCreateService['isQuote'](note)).toBe(true);
 | 
						|
		});
 | 
						|
 | 
						|
		test('note with renote and poll should be Quote', () => {
 | 
						|
			const note = { renote: base, poll };
 | 
						|
			expect(noteCreateService['isRenote'](note)).toBe(true);
 | 
						|
			expect(noteCreateService['isQuote'](note)).toBe(true);
 | 
						|
		});
 | 
						|
 | 
						|
		test('note with renote and non-empty files should be Quote', () => {
 | 
						|
			const note = { renote: base, files: [file] };
 | 
						|
			expect(noteCreateService['isRenote'](note)).toBe(true);
 | 
						|
			expect(noteCreateService['isQuote'](note)).toBe(true);
 | 
						|
		});
 | 
						|
	});
 | 
						|
});
 |