Spaces:
Running
Running
| import jwt from "jsonwebtoken"; | |
| import mongoose from "mongoose"; | |
| import express from "express"; | |
| import request from "supertest"; | |
| import { MongoMemoryServer } from "mongodb-memory-server"; | |
| import User from "../models/userModel.js"; | |
| const JWT_KEY = "test-jwt-secret-key-for-testing"; | |
| const buildAppWithRoute = async () => { | |
| const { default: router } = await import(`../routes/farmerDetailsRoute.js?test=${Date.now()}`); | |
| const app = express(); | |
| app.use(express.json()); | |
| app.use("/api/farmer-details", router); | |
| return app; | |
| }; | |
| describe("Language preference route", () => { | |
| let mongoServer; | |
| let app; | |
| let user; | |
| beforeAll(async () => { | |
| process.env.JWT_KEY = JWT_KEY; | |
| mongoServer = await MongoMemoryServer.create(); | |
| await mongoose.connect(mongoServer.getUri("language_preference_tests")); | |
| app = await buildAppWithRoute(); | |
| }); | |
| afterAll(async () => { | |
| await mongoose.disconnect(); | |
| await mongoServer.stop(); | |
| }); | |
| beforeEach(async () => { | |
| await User.deleteMany({}); | |
| user = await User.create({ | |
| name: "Language User", | |
| email: "language@example.com", | |
| }); | |
| }); | |
| const makeToken = (id) => jwt.sign({ id, role: "farmer" }, JWT_KEY, { expiresIn: "1h" }); | |
| it("updates language for authenticated user", async () => { | |
| const token = makeToken(user._id.toString()); | |
| const response = await request(app) | |
| .post("/api/farmer-details/user/preferences/language") | |
| .set("Authorization", `Bearer ${token}`) | |
| .send({ language: "hi" }); | |
| expect(response.status).toBe(200); | |
| expect(response.body).toEqual({ success: true, language: "hi" }); | |
| const updated = await User.findById(user._id); | |
| expect(updated.language).toBe("hi"); | |
| }); | |
| it("returns 400 for unsupported language", async () => { | |
| const token = makeToken(user._id.toString()); | |
| const response = await request(app) | |
| .post("/api/farmer-details/user/preferences/language") | |
| .set("Authorization", `Bearer ${token}`) | |
| .send({ language: "xx" }); | |
| expect(response.status).toBe(400); | |
| expect(response.body).toEqual({ message: "Invalid language" }); | |
| }); | |
| it("returns 404 when user is not found", async () => { | |
| const missingUserId = new mongoose.Types.ObjectId().toString(); | |
| const token = makeToken(missingUserId); | |
| const response = await request(app) | |
| .post("/api/farmer-details/user/preferences/language") | |
| .set("Authorization", `Bearer ${token}`) | |
| .send({ language: "en" }); | |
| expect(response.status).toBe(404); | |
| expect(response.body).toEqual({ message: "User not found" }); | |
| }); | |
| it("returns 401 when token is missing", async () => { | |
| const response = await request(app) | |
| .post("/api/farmer-details/user/preferences/language") | |
| .send({ language: "en" }); | |
| expect(response.status).toBe(401); | |
| expect(response.body).toEqual({ message: "Access Denied, token missing" }); | |
| }); | |
| }); | |