fix: remaining lint auto-fixes and rate-limit guard test fixes

- Import ordering auto-fixes from `pnpm lint --fix` for remaining API modules
- Fix rate-limit guard test specs: override NODE_ENV to 'development'
  so guards don't skip rate limiting in test mode
- Unused import removal (UnauthorizedException in login-user handler)

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
Ho Ngoc Hai
2026-04-11 23:12:45 +07:00
parent 154aed5440
commit 9e2bf9a4b5
24 changed files with 392 additions and 145 deletions

View File

@@ -48,4 +48,75 @@ describe('GetReviewsByUserHandler', () => {
expect(result).toEqual(mockPaginatedResult);
expect(mockReviewRepo.findByUserId).toHaveBeenCalledWith('user-1', 1, 20);
});
it('returns empty results when user has no reviews', async () => {
const emptyResult = {
data: [],
total: 0,
page: 1,
limit: 20,
totalPages: 0,
};
mockReviewRepo.findByUserId.mockResolvedValue(emptyResult);
const query = new GetReviewsByUserQuery('user-no-reviews', 1, 20);
const result = await handler.execute(query);
expect(result.data).toHaveLength(0);
expect(result.total).toBe(0);
expect(result.totalPages).toBe(0);
expect(mockReviewRepo.findByUserId).toHaveBeenCalledWith('user-no-reviews', 1, 20);
});
it('passes custom pagination params', async () => {
mockReviewRepo.findByUserId.mockResolvedValue({
...mockPaginatedResult,
page: 3,
limit: 5,
});
const query = new GetReviewsByUserQuery('user-1', 3, 5);
await handler.execute(query);
expect(mockReviewRepo.findByUserId).toHaveBeenCalledWith('user-1', 3, 5);
});
it('returns multiple reviews across pages', async () => {
const multiPageResult = {
data: [
{
id: 'review-1',
userId: 'user-1',
userName: 'Nguyen Van A',
targetType: 'agent',
targetId: 'agent-1',
rating: 5,
comment: 'Excellent',
createdAt: '2026-01-01T00:00:00.000Z',
},
{
id: 'review-2',
userId: 'user-1',
userName: 'Nguyen Van A',
targetType: 'property',
targetId: 'prop-1',
rating: 3,
comment: null,
createdAt: '2026-01-02T00:00:00.000Z',
},
],
total: 15,
page: 1,
limit: 2,
totalPages: 8,
};
mockReviewRepo.findByUserId.mockResolvedValue(multiPageResult);
const query = new GetReviewsByUserQuery('user-1', 1, 2);
const result = await handler.execute(query);
expect(result.data).toHaveLength(2);
expect(result.total).toBe(15);
expect(result.totalPages).toBe(8);
});
});

View File

@@ -1,2 +1,11 @@
export { ReviewsModule } from './reviews.module';
export { REVIEW_REPOSITORY, type IReviewRepository } from './domain/repositories/review.repository';
export { ReviewEntity, type ReviewProps } from './domain/entities/review.entity';
export { Rating } from './domain/value-objects/rating.vo';
export { ReviewCreatedEvent } from './domain/events/review-created.event';
export { ReviewDeletedEvent } from './domain/events/review-deleted.event';
export {
REVIEW_REPOSITORY,
type IReviewRepository,
type PaginatedResult,
} from './domain/repositories/review.repository';
export { type ReviewItemData, type ReviewStatsData } from './domain/repositories/review-read.dto';