feat: Complete CouchDB test infrastructure migration for route tests
- Fixed 5/7 route test suites (auth, events, reports, rewards, streets) - Updated Jest configuration with global CouchDB mocks - Created comprehensive test helper utilities with proper ID generation - Fixed pagination response format expectations (.data property) - Added proper model method mocks (populate, save, toJSON, etc.) - Resolved ID validation issues for different entity types - Implemented proper CouchDB service method mocking - Updated test helpers to generate valid IDs matching validator patterns Remaining work: - posts.test.js: needs model mocking and response format fixes - tasks.test.js: needs Task model constructor fixes and mocking 🤖 Generated with [AI Assistant] Co-Authored-By: AI Assistant <noreply@ai-assistant.com>
This commit is contained in:
@@ -1,15 +1,13 @@
|
||||
const request = require("supertest");
|
||||
const mongoose = require("mongoose");
|
||||
const { MongoMemoryServer } = require("mongodb-memory-server");
|
||||
const socketIoClient = require("socket.io-client");
|
||||
const jwt = require("jsonwebtoken");
|
||||
const app = require("../server");
|
||||
const User = require("../models/User");
|
||||
const Event = require("../models/Event");
|
||||
const Post = require("../models/Post");
|
||||
const { generateTestId } = require('./utils/idGenerator');
|
||||
|
||||
describe("Socket.IO Real-time Features", () => {
|
||||
let mongoServer;
|
||||
let server;
|
||||
let io;
|
||||
let clientSocket;
|
||||
@@ -17,25 +15,20 @@ describe("Socket.IO Real-time Features", () => {
|
||||
let authToken;
|
||||
|
||||
beforeAll(async () => {
|
||||
mongoServer = await MongoMemoryServer.create();
|
||||
const mongoUri = mongoServer.getUri();
|
||||
await mongoose.connect(mongoUri);
|
||||
|
||||
// Start server
|
||||
server = app.listen(0); // Use random port
|
||||
io = app.get("io");
|
||||
|
||||
// Create test user
|
||||
testUser = new User({
|
||||
testUser = await User.create({
|
||||
name: "Test User",
|
||||
email: "test@example.com",
|
||||
password: "password123",
|
||||
});
|
||||
await testUser.save();
|
||||
|
||||
// Generate auth token
|
||||
authToken = jwt.sign(
|
||||
{ user: { id: testUser._id.toString() } },
|
||||
{ user: { id: testUser._id } },
|
||||
process.env.JWT_SECRET || "test_secret"
|
||||
);
|
||||
});
|
||||
@@ -45,8 +38,6 @@ describe("Socket.IO Real-time Features", () => {
|
||||
clientSocket.disconnect();
|
||||
}
|
||||
server.close();
|
||||
await mongoose.disconnect();
|
||||
await mongoServer.stop();
|
||||
});
|
||||
|
||||
beforeEach((done) => {
|
||||
@@ -108,14 +99,13 @@ describe("Socket.IO Real-time Features", () => {
|
||||
let testEvent;
|
||||
|
||||
beforeEach(async () => {
|
||||
testEvent = new Event({
|
||||
testEvent = await Event.create({
|
||||
title: "Test Event",
|
||||
description: "Test Description",
|
||||
date: new Date(Date.now() + 86400000), // Tomorrow
|
||||
location: "Test Location",
|
||||
participants: [],
|
||||
});
|
||||
await testEvent.save();
|
||||
});
|
||||
|
||||
test("should join event room", (done) => {
|
||||
@@ -148,7 +138,7 @@ describe("Socket.IO Real-time Features", () => {
|
||||
});
|
||||
|
||||
test("should not receive updates for events not joined", (done) => {
|
||||
const anotherEventId = new mongoose.Types.ObjectId().toString();
|
||||
const anotherEventId = generateTestId();
|
||||
|
||||
// Listen for updates (should not receive any)
|
||||
let updateReceived = false;
|
||||
@@ -176,7 +166,7 @@ describe("Socket.IO Real-time Features", () => {
|
||||
let testPost;
|
||||
|
||||
beforeEach(async () => {
|
||||
testPost = new Post({
|
||||
testPost = await Post.create({
|
||||
user: {
|
||||
userId: testUser._id,
|
||||
name: testUser.name,
|
||||
@@ -185,7 +175,6 @@ describe("Socket.IO Real-time Features", () => {
|
||||
likes: [],
|
||||
commentsCount: 0,
|
||||
});
|
||||
await testPost.save();
|
||||
});
|
||||
|
||||
test("should join post room", (done) => {
|
||||
@@ -198,14 +187,13 @@ describe("Socket.IO Real-time Features", () => {
|
||||
});
|
||||
|
||||
test("should handle multiple room joins", (done) => {
|
||||
const testEvent = new Event({
|
||||
Event.create({
|
||||
title: "Another Event",
|
||||
description: "Another Description",
|
||||
date: new Date(Date.now() + 86400000),
|
||||
location: "Another Location",
|
||||
participants: [],
|
||||
});
|
||||
testEvent.save().then(() => {
|
||||
}).then((testEvent) => {
|
||||
clientSocket.emit("joinEvent", testEvent._id.toString());
|
||||
clientSocket.emit("joinPost", testPost._id.toString());
|
||||
|
||||
@@ -240,7 +228,7 @@ describe("Socket.IO Real-time Features", () => {
|
||||
for (let i = 0; i < messageCount; i++) {
|
||||
await new Promise((resolve) => {
|
||||
clientSocket.emit("eventUpdate", {
|
||||
eventId: new mongoose.Types.ObjectId().toString(),
|
||||
eventId: generateTestId(),
|
||||
message: `Test message ${i}`,
|
||||
});
|
||||
setTimeout(resolve, 10);
|
||||
|
||||
Reference in New Issue
Block a user