- Added `UsersService` to manage user preferences in `EventsGateway`. - Enhanced online/offline broadcasting to respect user `showOnlineStatus` preference. - Updated `handleTyping` and `check_status` to verify user preferences before emitting events. - Abstracted status broadcasting logic into `broadcastStatus`.
61 lines
1.5 KiB
TypeScript
61 lines
1.5 KiB
TypeScript
import { ConfigService } from "@nestjs/config";
|
|
import { Test, TestingModule } from "@nestjs/testing";
|
|
import { JwtService } from "../crypto/services/jwt.service";
|
|
import { UsersService } from "../users/users.service";
|
|
import { EventsGateway } from "./events.gateway";
|
|
|
|
describe("EventsGateway", () => {
|
|
let gateway: EventsGateway;
|
|
let _jwtService: JwtService;
|
|
|
|
const mockJwtService = {
|
|
verifyJwt: jest.fn(),
|
|
};
|
|
|
|
const mockConfigService = {
|
|
get: jest.fn().mockReturnValue("secret-password-32-chars-long-!!!"),
|
|
};
|
|
|
|
const mockUsersService = {
|
|
findOne: jest.fn(),
|
|
};
|
|
|
|
beforeEach(async () => {
|
|
const module: TestingModule = await Test.createTestingModule({
|
|
providers: [
|
|
EventsGateway,
|
|
{ provide: JwtService, useValue: mockJwtService },
|
|
{ provide: ConfigService, useValue: mockConfigService },
|
|
{ provide: UsersService, useValue: mockUsersService },
|
|
],
|
|
}).compile();
|
|
|
|
gateway = module.get<EventsGateway>(EventsGateway);
|
|
_jwtService = module.get<JwtService>(JwtService);
|
|
gateway.server = {
|
|
to: jest.fn().mockReturnThis(),
|
|
emit: jest.fn(),
|
|
} as any;
|
|
});
|
|
|
|
it("should be defined", () => {
|
|
expect(gateway).toBeDefined();
|
|
});
|
|
|
|
describe("sendToUser", () => {
|
|
it("should emit event to user room", () => {
|
|
const userId = "user123";
|
|
const event = "test_event";
|
|
const data = { foo: "bar" };
|
|
|
|
gateway.sendToUser(userId, event, data);
|
|
|
|
expect(gateway.server.to).toHaveBeenCalledWith(`user:${userId}`);
|
|
expect(gateway.server.to(`user:${userId}`).emit).toHaveBeenCalledWith(
|
|
event,
|
|
data,
|
|
);
|
|
});
|
|
});
|
|
});
|