agmission/Development/server/tests/integration/partner.integration.test.js
2026-04-29 09:40:51 -04:00

181 lines
5.3 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

'use strict';
/**
* Integration tests partner controller (controllers/partner.js)
*
* Covers: createPartner_post, getPartners_get, getPartners_post,
* getPartnerById_get, updatePartner_put, deletePartner
*
* Skipped: syncData_post, uploadJob_post, testPartnerAuth_post
* (require external partner service / RabbitMQ).
*/
const { connectDB, disconnectDB, clearCollection } = require('./jest.setup');
const { mockApplicator, mockReq, mockRes, newId } = require('./mock_data');
let Partner, Customer;
beforeAll(async () => {
await connectDB();
Customer = require('../../model/customer');
// Ensure partner discriminator is registered
const partnerModel = require('../../model/partner');
Partner = partnerModel.Partner || partnerModel;
});
afterAll(async () => {
await disconnectDB();
});
const partnerCtl = require('../../controllers/partner');
describe('partner controller data methods', () => {
let admin;
function makePartnerBody() {
return {
name: `Partner-${Date.now()}`,
username: `partner_${Date.now()}@test.com`,
password: 'Test@123',
active: true,
kind: '20',
partnerCode: `TESTCODE-${Date.now()}`,
};
}
beforeAll(async () => {
await clearCollection(Partner);
admin = await Customer.create(mockApplicator());
});
afterAll(async () => {
await clearCollection(Partner);
await Customer.deleteMany({ _id: admin._id });
});
const makeReq = (extra = {}) =>
mockReq({ uid: admin._id, puid: admin._id, ut: '1', ...extra });
// -------------------------------------------------------------------------
describe('createPartner_post', () => {
it('creates a partner and returns it', async () => {
const req = makeReq({ body: makePartnerBody() });
const res = mockRes();
await partnerCtl.createPartner_post(req, res);
expect(res.json).toHaveBeenCalled();
expect(res._data._id).toBeDefined();
expect(res._data.kind).toBe('20');
});
it('throws when body is missing', async () => {
const req = makeReq({ body: null });
const res = mockRes();
await expect(partnerCtl.createPartner_post(req, res)).rejects.toThrow();
});
});
// -------------------------------------------------------------------------
describe('getPartners_get', () => {
it('returns array of partners', async () => {
const req = makeReq({ query: {} });
const res = mockRes();
await partnerCtl.getPartners_get(req, res);
expect(res.json).toHaveBeenCalled();
expect(Array.isArray(res._data)).toBe(true);
});
});
// -------------------------------------------------------------------------
describe('getPartners_post', () => {
it('returns partners matching search criteria', async () => {
const req = makeReq({ body: { name: 'Partner' } });
const res = mockRes();
await partnerCtl.getPartners_post(req, res);
expect(res.json).toHaveBeenCalled();
expect(Array.isArray(res._data)).toBe(true);
});
});
// -------------------------------------------------------------------------
describe('getPartnerById_get', () => {
let partnerId;
beforeAll(async () => {
const req = makeReq({ body: makePartnerBody() });
const res = mockRes();
await partnerCtl.createPartner_post(req, res);
partnerId = String(res._data._id);
});
it('returns partner by id', async () => {
const req = makeReq({ params: { id: partnerId } });
const res = mockRes();
await partnerCtl.getPartnerById_get(req, res);
expect(res.json).toHaveBeenCalled();
expect(String(res._data._id)).toBe(partnerId);
});
it('throws when partner id is invalid', async () => {
const req = makeReq({ params: { id: 'invalid-id' } });
const res = mockRes();
await expect(partnerCtl.getPartnerById_get(req, res)).rejects.toThrow();
});
});
// -------------------------------------------------------------------------
describe('updatePartner_put', () => {
let partnerId;
beforeAll(async () => {
const req = makeReq({ body: makePartnerBody() });
const res = mockRes();
await partnerCtl.createPartner_post(req, res);
partnerId = String(res._data._id);
});
it('updates a partner field', async () => {
const req = makeReq({
params: { id: partnerId },
body: { name: 'Updated Partner Name', kind: '20' },
});
const res = mockRes();
await partnerCtl.updatePartner_put(req, res);
expect(res.json).toHaveBeenCalled();
expect(res._data.name).toBe('Updated Partner Name');
});
});
// -------------------------------------------------------------------------
describe('deletePartner', () => {
let partnerId;
beforeAll(async () => {
const req = makeReq({ body: makePartnerBody() });
const res = mockRes();
await partnerCtl.createPartner_post(req, res);
partnerId = String(res._data._id);
});
it('soft-deletes a partner', async () => {
const req = makeReq({ params: { id: partnerId } });
const res = mockRes();
await partnerCtl.deletePartner(req, res);
expect(res.json).toHaveBeenCalled();
const found = await Partner.findById(partnerId);
expect(!found || found.active === false).toBeTruthy();
});
});
});