test scipt issues rsplved related to dealer login from script for E2E flow

This commit is contained in:
laxmanhalaki 2026-04-26 23:20:08 +05:30
parent 71d9f9dbba
commit 5b501ede6c
4 changed files with 71 additions and 9 deletions

View File

@ -3,7 +3,7 @@ import bcrypt from 'bcryptjs';
import { Op } from 'sequelize';
import db from '../../database/models/index.js';
const { Role, Permission, RolePermission, User, DealerCode, AuditLog } = db;
import { AUDIT_ACTIONS } from '../../common/config/constants.js';
import { AUDIT_ACTIONS, ROLES } from '../../common/config/constants.js';
import { AuthRequest } from '../../types/express.types.js';
import { syncLocationManagers, syncRegionManager, syncZoneManager } from '../master/syncHierarchy.service.js';
import { resolveManagerCode } from '../../services/userRoleCode.service.js';
@ -208,7 +208,17 @@ export const getAllUsers = async (req: Request, res: Response) => {
whereClause.roleCode = { [Op.in]: finalRoleCodes };
}
const nationalRoles = ['NBH', 'DD Head', 'Super Admin'];
const nationalRoles = [
ROLES.NBH,
ROLES.DD_HEAD,
ROLES.DD_LEAD,
ROLES.DD_ADMIN,
ROLES.LEGAL_ADMIN,
ROLES.FINANCE,
ROLES.SUPER_ADMIN,
ROLES.CCO,
ROLES.CEO
];
const isNationalRole = finalRoleCodes.some(r => nationalRoles.includes(r));
if (!isNationalRole && locationId) {

View File

@ -1,7 +1,7 @@
import { Request, Response } from 'express';
import db from '../../database/models/index.js';
const { Application, Opportunity, ApplicationStatusHistory, ApplicationProgress, AuditLog, District, State, Region, Zone, SecurityDeposit, FddAssignment, FddReport, OnboardingDocument, Worknote, StageApprovalAction, DealerCode, Dealer, RequestParticipant, QuestionnaireResponse, QuestionnaireQuestion, QuestionnaireOption, Questionnaire, User } = db;
import { AUDIT_ACTIONS, APPLICATION_STAGES, APPLICATION_STATUS } from '../../common/config/constants.js';
import { AUDIT_ACTIONS, APPLICATION_STAGES, APPLICATION_STATUS, ROLES } from '../../common/config/constants.js';
import { v4 as uuidv4 } from 'uuid';
import { Op } from 'sequelize';
import { AuthRequest } from '../../types/express.types.js';
@ -211,7 +211,18 @@ export const getApplications = async (req: AuthRequest, res: Response) => {
const whereClause: any = {};
// Determine if user has national-level visibility
const nationalRoles = ['NBH', 'DD Head', 'DD Lead', 'Finance', 'Admin', 'Super Admin'];
const nationalRoles = [
ROLES.NBH,
ROLES.DD_HEAD,
ROLES.DD_LEAD,
ROLES.FINANCE,
ROLES.DD_ADMIN,
ROLES.LEGAL_ADMIN,
ROLES.SUPER_ADMIN,
ROLES.CCO,
ROLES.CEO,
'Admin' // Keep legacy support if any
];
const isNationalUser = nationalRoles.includes(req.user?.roleCode || '');
const isProspectiveDealer = req.user?.roleCode === 'Prospective Dealer';

View File

@ -468,7 +468,17 @@ export const getRequests = async (req: AuthRequest, res: Response) => {
const userRoleCode = req.user?.roleCode;
// National roles see all requests
const nationalRoles = ['NBH', 'DD Lead', 'DD Head', 'Legal Admin', 'Super Admin', 'DD Admin'];
const nationalRoles = [
ROLES.NBH,
ROLES.DD_LEAD,
ROLES.DD_HEAD,
ROLES.LEGAL_ADMIN,
ROLES.SUPER_ADMIN,
ROLES.DD_ADMIN,
ROLES.FINANCE,
ROLES.CCO,
ROLES.CEO
];
if (userRoleCode && nationalRoles.includes(userRoleCode)) {
return true;
}

View File

@ -103,11 +103,42 @@ async function resolveDealerOutlet(dealerToken) {
async function run() {
try {
console.log("--- STARTING RELOCATION E2E FLOW ---");
if (!EMAILS.DEALER) {
throw new Error("Missing --dealerEmail. This script requires an existing dealer user email.");
}
const adminToken = await login(EMAILS.DD_ADMIN);
const dealerToken = await login(EMAILS.DEALER, "Dealer@123");
// Discover dealer if email is not provided or if the default is stale
let dealerEmail = EMAILS.DEALER;
let dealerToken = null;
try {
console.log(`Attempting login for dealer: ${dealerEmail}...`);
dealerToken = await login(dealerEmail, "Dealer@123");
} catch (e) {
console.log(`Provided/Default dealer login failed. Searching for an onboarded dealer...`);
const appsRes = await apiRequest('/onboarding/applications', 'GET', null, adminToken);
const onboardedApps = appsRes.data.filter(a => (a.overallStatus || a.status || '').toLowerCase() === 'onboarded');
for (const app of onboardedApps) {
try {
process.stdout.write(`Testing login for ${app.email}... `);
const dealerData = await apiRequest('/auth/login', 'POST', {
email: app.email,
password: 'Dealer@123'
});
dealerToken = dealerData.token;
dealerEmail = app.email;
console.log('SUCCESS');
break;
} catch (err) {
console.log('FAILED');
}
}
}
if (!dealerToken) {
throw new Error("Could not find or login to any onboarded dealer account.");
}
EMAILS.DEALER = dealerEmail;
let requestId = args.requestId;
if (!requestId) {