mirror of
				https://codeberg.org/yeentown/barkey.git
				synced 2025-11-03 23:14:13 +00:00 
			
		
		
		
	* chore: add workflow which checks if SPDX ID exists * chore: add missing SPDX ID in some files * chore: change trigger condition * chore: trigger on push * lint
		
			
				
	
	
		
			93 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			93 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
/*
 | 
						|
 * SPDX-FileCopyrightText: syuilo and misskey-project
 | 
						|
 * SPDX-License-Identifier: AGPL-3.0-only
 | 
						|
 */
 | 
						|
 | 
						|
import { DebounceLoader } from '@/misc/loader.js';
 | 
						|
 | 
						|
class Mock {
 | 
						|
	loadCountByKey = new Map<number, number>();
 | 
						|
	load = async (key: number): Promise<number> => {
 | 
						|
		const count = this.loadCountByKey.get(key);
 | 
						|
		if (typeof count === 'undefined') {
 | 
						|
			this.loadCountByKey.set(key, 1);
 | 
						|
		} else {
 | 
						|
			this.loadCountByKey.set(key, count + 1);
 | 
						|
		}
 | 
						|
		return key * 2;
 | 
						|
	};
 | 
						|
	reset() {
 | 
						|
		this.loadCountByKey.clear();
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
describe(DebounceLoader, () => {
 | 
						|
	describe('single request', () => {
 | 
						|
		it('loads once', async () => {
 | 
						|
			const mock = new Mock();
 | 
						|
			const loader = new DebounceLoader(mock.load);
 | 
						|
			expect(await loader.load(7)).toBe(14);
 | 
						|
			expect(mock.loadCountByKey.size).toBe(1);
 | 
						|
			expect(mock.loadCountByKey.get(7)).toBe(1);
 | 
						|
		});
 | 
						|
	});
 | 
						|
 | 
						|
	describe('two duplicated requests at same time', () => {
 | 
						|
		it('loads once', async () => {
 | 
						|
			const mock = new Mock();
 | 
						|
			const loader = new DebounceLoader(mock.load);
 | 
						|
			const [v1, v2] = await Promise.all([
 | 
						|
				loader.load(7),
 | 
						|
				loader.load(7),
 | 
						|
			]);
 | 
						|
			expect(v1).toBe(14);
 | 
						|
			expect(v2).toBe(14);
 | 
						|
			expect(mock.loadCountByKey.size).toBe(1);
 | 
						|
			expect(mock.loadCountByKey.get(7)).toBe(1);
 | 
						|
		});
 | 
						|
	});
 | 
						|
 | 
						|
	describe('two different requests at same time', () => {
 | 
						|
		it('loads twice', async () => {
 | 
						|
			const mock = new Mock();
 | 
						|
			const loader = new DebounceLoader(mock.load);
 | 
						|
			const [v1, v2] = await Promise.all([
 | 
						|
				loader.load(7),
 | 
						|
				loader.load(13),
 | 
						|
			]);
 | 
						|
			expect(v1).toBe(14);
 | 
						|
			expect(v2).toBe(26);
 | 
						|
			expect(mock.loadCountByKey.size).toBe(2);
 | 
						|
			expect(mock.loadCountByKey.get(7)).toBe(1);
 | 
						|
			expect(mock.loadCountByKey.get(13)).toBe(1);
 | 
						|
		});
 | 
						|
	});
 | 
						|
 | 
						|
	describe('non-continuous same two requests', () => {
 | 
						|
		it('loads twice', async () => {
 | 
						|
			const mock = new Mock();
 | 
						|
			const loader = new DebounceLoader(mock.load);
 | 
						|
			expect(await loader.load(7)).toBe(14);
 | 
						|
			expect(mock.loadCountByKey.size).toBe(1);
 | 
						|
			expect(mock.loadCountByKey.get(7)).toBe(1);
 | 
						|
			mock.reset();
 | 
						|
			expect(await loader.load(7)).toBe(14);
 | 
						|
			expect(mock.loadCountByKey.size).toBe(1);
 | 
						|
			expect(mock.loadCountByKey.get(7)).toBe(1);
 | 
						|
		});
 | 
						|
	});
 | 
						|
 | 
						|
	describe('non-continuous different two requests', () => {
 | 
						|
		it('loads twice', async () => {
 | 
						|
			const mock = new Mock();
 | 
						|
			const loader = new DebounceLoader(mock.load);
 | 
						|
			expect(await loader.load(7)).toBe(14);
 | 
						|
			expect(mock.loadCountByKey.size).toBe(1);
 | 
						|
			expect(mock.loadCountByKey.get(7)).toBe(1);
 | 
						|
			mock.reset();
 | 
						|
			expect(await loader.load(13)).toBe(26);
 | 
						|
			expect(mock.loadCountByKey.size).toBe(1);
 | 
						|
			expect(mock.loadCountByKey.get(13)).toBe(1);
 | 
						|
		});
 | 
						|
	});
 | 
						|
});
 |