mirror of
				https://codeberg.org/yeentown/barkey.git
				synced 2025-10-31 21:44:12 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			62 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| /*
 | |
|  * SPDX-FileCopyrightText: hazelnoot and other Sharkey contributors
 | |
|  * SPDX-License-Identifier: AGPL-3.0-only
 | |
|  */
 | |
| 
 | |
| import { jest } from '@jest/globals';
 | |
| import { Mock } from 'jest-mock';
 | |
| import type { FastifyReply } from 'fastify';
 | |
| import { LimitInfo, sendRateLimitHeaders } from '@/misc/rate-limit-utils.js';
 | |
| 
 | |
| /* eslint-disable @typescript-eslint/no-non-null-assertion */
 | |
| 
 | |
| describe(sendRateLimitHeaders, () => {
 | |
| 	let mockHeader: Mock<((name: string, value: unknown) => void)> = null!;
 | |
| 	let mockReply: FastifyReply = null!;
 | |
| 	let fakeInfo: LimitInfo = null!;
 | |
| 
 | |
| 	beforeEach(() => {
 | |
| 		mockHeader = jest.fn<((name: string, value: unknown) => void)>();
 | |
| 		mockReply = {
 | |
| 			header: mockHeader,
 | |
| 		} as unknown as FastifyReply;
 | |
| 		fakeInfo = {
 | |
| 			blocked: false,
 | |
| 			remaining: 1,
 | |
| 			resetSec: 1,
 | |
| 			resetMs: 567,
 | |
| 			fullResetSec: 10,
 | |
| 			fullResetMs: 9876,
 | |
| 		};
 | |
| 	});
 | |
| 
 | |
| 	it('should send X-RateLimit-Clear', () => {
 | |
| 		sendRateLimitHeaders(mockReply, fakeInfo);
 | |
| 
 | |
| 		expect(mockHeader).toHaveBeenCalledWith('X-RateLimit-Clear', '9.876');
 | |
| 	});
 | |
| 
 | |
| 	it('should send X-RateLimit-Remaining', () => {
 | |
| 		sendRateLimitHeaders(mockReply, fakeInfo);
 | |
| 
 | |
| 		expect(mockHeader).toHaveBeenCalledWith('X-RateLimit-Remaining', '1');
 | |
| 	});
 | |
| 
 | |
| 	describe('when limit is blocked', () => {
 | |
| 		it('should send X-RateLimit-Reset', () => {
 | |
| 			fakeInfo.blocked = true;
 | |
| 
 | |
| 			sendRateLimitHeaders(mockReply, fakeInfo);
 | |
| 
 | |
| 			expect(mockHeader).toHaveBeenCalledWith('X-RateLimit-Reset', '0.567');
 | |
| 		});
 | |
| 
 | |
| 		it('should send Retry-After', () => {
 | |
| 			fakeInfo.blocked = true;
 | |
| 
 | |
| 			sendRateLimitHeaders(mockReply, fakeInfo);
 | |
| 
 | |
| 			expect(mockHeader).toHaveBeenCalledWith('Retry-After', '1');
 | |
| 		});
 | |
| 	});
 | |
| });
 |