mirror of
				https://codeberg.org/yeentown/barkey.git
				synced 2025-10-30 21:14:12 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			152 lines
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			152 lines
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| /* eslint-disable @typescript-eslint/no-unused-vars */
 | |
| /*
 | |
|  * SPDX-FileCopyrightText: syuilo and misskey-project
 | |
|  * SPDX-License-Identifier: AGPL-3.0-only
 | |
|  */
 | |
| 
 | |
| import { Test, TestingModule } from '@nestjs/testing';
 | |
| import { FlashService } from '@/core/FlashService.js';
 | |
| import { IdService } from '@/core/IdService.js';
 | |
| import { FlashsRepository, MiFlash, MiUser, UserProfilesRepository, UsersRepository } from '@/models/_.js';
 | |
| import { DI } from '@/di-symbols.js';
 | |
| import { GlobalModule } from '@/GlobalModule.js';
 | |
| 
 | |
| describe('FlashService', () => {
 | |
| 	let app: TestingModule;
 | |
| 	let service: FlashService;
 | |
| 
 | |
| 	// --------------------------------------------------------------------------------------
 | |
| 
 | |
| 	let flashsRepository: FlashsRepository;
 | |
| 	let usersRepository: UsersRepository;
 | |
| 	let userProfilesRepository: UserProfilesRepository;
 | |
| 	let idService: IdService;
 | |
| 
 | |
| 	// --------------------------------------------------------------------------------------
 | |
| 
 | |
| 	let root: MiUser;
 | |
| 	let alice: MiUser;
 | |
| 	let bob: MiUser;
 | |
| 
 | |
| 	// --------------------------------------------------------------------------------------
 | |
| 
 | |
| 	async function createFlash(data: Partial<MiFlash>) {
 | |
| 		return flashsRepository.insert({
 | |
| 			id: idService.gen(),
 | |
| 			updatedAt: new Date(),
 | |
| 			userId: root.id,
 | |
| 			title: 'title',
 | |
| 			summary: 'summary',
 | |
| 			script: 'script',
 | |
| 			permissions: [],
 | |
| 			likedCount: 0,
 | |
| 			...data,
 | |
| 		}).then(x => flashsRepository.findOneByOrFail(x.identifiers[0]));
 | |
| 	}
 | |
| 
 | |
| 	async function createUser(data: Partial<MiUser> = {}) {
 | |
| 		const user = await usersRepository
 | |
| 			.insert({
 | |
| 				id: idService.gen(),
 | |
| 				...data,
 | |
| 			})
 | |
| 			.then(x => usersRepository.findOneByOrFail(x.identifiers[0]));
 | |
| 
 | |
| 		await userProfilesRepository.insert({
 | |
| 			userId: user.id,
 | |
| 		});
 | |
| 
 | |
| 		return user;
 | |
| 	}
 | |
| 
 | |
| 	// --------------------------------------------------------------------------------------
 | |
| 
 | |
| 	beforeEach(async () => {
 | |
| 		app = await Test.createTestingModule({
 | |
| 			imports: [
 | |
| 				GlobalModule,
 | |
| 			],
 | |
| 			providers: [
 | |
| 				FlashService,
 | |
| 				IdService,
 | |
| 			],
 | |
| 		}).compile();
 | |
| 
 | |
| 		service = app.get(FlashService);
 | |
| 
 | |
| 		flashsRepository = app.get(DI.flashsRepository);
 | |
| 		usersRepository = app.get(DI.usersRepository);
 | |
| 		userProfilesRepository = app.get(DI.userProfilesRepository);
 | |
| 		idService = app.get(IdService);
 | |
| 
 | |
| 		root = await createUser({ username: 'root', usernameLower: 'root', isRoot: true });
 | |
| 		alice = await createUser({ username: 'alice', usernameLower: 'alice', isRoot: false });
 | |
| 		bob = await createUser({ username: 'bob', usernameLower: 'bob', isRoot: false });
 | |
| 	});
 | |
| 
 | |
| 	afterEach(async () => {
 | |
| 		await usersRepository.delete({});
 | |
| 		await userProfilesRepository.delete({});
 | |
| 		await flashsRepository.delete({});
 | |
| 	});
 | |
| 
 | |
| 	afterAll(async () => {
 | |
| 		await app.close();
 | |
| 	});
 | |
| 
 | |
| 	// --------------------------------------------------------------------------------------
 | |
| 
 | |
| 	describe('featured', () => {
 | |
| 		test('should return featured flashes', async () => {
 | |
| 			const flash1 = await createFlash({ likedCount: 1 });
 | |
| 			const flash2 = await createFlash({ likedCount: 2 });
 | |
| 			const flash3 = await createFlash({ likedCount: 3 });
 | |
| 
 | |
| 			const result = await service.featured({
 | |
| 				offset: 0,
 | |
| 				limit: 10,
 | |
| 			});
 | |
| 
 | |
| 			expect(result).toEqual([flash3, flash2, flash1]);
 | |
| 		});
 | |
| 
 | |
| 		test('should return featured flashes public visibility only', async () => {
 | |
| 			const flash1 = await createFlash({ likedCount: 1, visibility: 'public' });
 | |
| 			const flash2 = await createFlash({ likedCount: 2, visibility: 'public' });
 | |
| 			const flash3 = await createFlash({ likedCount: 3, visibility: 'private' });
 | |
| 
 | |
| 			const result = await service.featured({
 | |
| 				offset: 0,
 | |
| 				limit: 10,
 | |
| 			});
 | |
| 
 | |
| 			expect(result).toEqual([flash2, flash1]);
 | |
| 		});
 | |
| 
 | |
| 		test('should return featured flashes with offset', async () => {
 | |
| 			const flash1 = await createFlash({ likedCount: 1 });
 | |
| 			const flash2 = await createFlash({ likedCount: 2 });
 | |
| 			const flash3 = await createFlash({ likedCount: 3 });
 | |
| 
 | |
| 			const result = await service.featured({
 | |
| 				offset: 1,
 | |
| 				limit: 10,
 | |
| 			});
 | |
| 
 | |
| 			expect(result).toEqual([flash2, flash1]);
 | |
| 		});
 | |
| 
 | |
| 		test('should return featured flashes with limit', async () => {
 | |
| 			const flash1 = await createFlash({ likedCount: 1 });
 | |
| 			const flash2 = await createFlash({ likedCount: 2 });
 | |
| 			const flash3 = await createFlash({ likedCount: 3 });
 | |
| 
 | |
| 			const result = await service.featured({
 | |
| 				offset: 0,
 | |
| 				limit: 2,
 | |
| 			});
 | |
| 
 | |
| 			expect(result).toEqual([flash3, flash2]);
 | |
| 		});
 | |
| 	});
 | |
| });
 |