Skip to content

Commit 9d9285d

Browse files
committed
Add tests for hasConfiguredRules
1 parent d08c492 commit 9d9285d

1 file changed

Lines changed: 192 additions & 0 deletions

File tree

tests/unit/PolicyUtilsTest.ts

Lines changed: 192 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import {
2626
getTagListByOrderWeight,
2727
getUberConnectionErrorDirectlyFromPolicy,
2828
getUnitRateValue,
29+
hasConfiguredRules,
2930
hasDependentTags,
3031
hasDynamicExternalWorkflow,
3132
hasIndependentTags,
@@ -2449,4 +2450,195 @@ describe('PolicyUtils', () => {
24492450
expect(hasIndependentTags(policy, undefined)).toBe(false);
24502451
});
24512452
});
2453+
2454+
describe('hasConfiguredRules', () => {
2455+
it('returns false when policy is undefined', () => {
2456+
expect(hasConfiguredRules(undefined)).toBe(false);
2457+
});
2458+
2459+
it('returns false when policy has no rules configured', () => {
2460+
expect(hasConfiguredRules({} as Policy)).toBe(false);
2461+
});
2462+
2463+
describe('customRules', () => {
2464+
it('returns true when customRules is non-empty', () => {
2465+
expect(hasConfiguredRules({customRules: 'some rule'} as Policy)).toBe(true);
2466+
});
2467+
2468+
it('returns false when customRules is an empty string', () => {
2469+
expect(hasConfiguredRules({customRules: ''} as Policy)).toBe(false);
2470+
});
2471+
2472+
it('returns false when customRules is only whitespace', () => {
2473+
expect(hasConfiguredRules({customRules: ' '} as Policy)).toBe(false);
2474+
});
2475+
});
2476+
2477+
describe('rules.approvalRules', () => {
2478+
it('returns true when approvalRules has items', () => {
2479+
const policy = {rules: {approvalRules: [{id: '1', applyWhen: [], approver: 'approver@test.com'}]}} as unknown as Policy;
2480+
expect(hasConfiguredRules(policy)).toBe(true);
2481+
});
2482+
2483+
it('returns false when approvalRules is empty', () => {
2484+
expect(hasConfiguredRules({rules: {approvalRules: []}} as unknown as Policy)).toBe(false);
2485+
});
2486+
});
2487+
2488+
describe('rules.expenseRules', () => {
2489+
it('returns true when expenseRules has items', () => {
2490+
const policy = {
2491+
rules: {
2492+
expenseRules: [
2493+
{
2494+
id: '1',
2495+
applyWhen: [],
2496+
tax: {field_id_TAX: {externalID: 'TAX_US'}},
2497+
},
2498+
],
2499+
},
2500+
} as unknown as Policy;
2501+
expect(hasConfiguredRules(policy)).toBe(true);
2502+
});
2503+
2504+
it('returns false when expenseRules is empty', () => {
2505+
expect(hasConfiguredRules({rules: {expenseRules: []}} as unknown as Policy)).toBe(false);
2506+
});
2507+
});
2508+
2509+
describe('rules.codingRules', () => {
2510+
it('returns true when codingRules has entries', () => {
2511+
const policy = {
2512+
rules: {
2513+
codingRules: {
2514+
rule1: {
2515+
ruleID: 'rule1',
2516+
filters: {left: 'merchant', operator: CONST.SEARCH.SYNTAX_OPERATORS.EQUAL_TO, right: 'Starbucks'},
2517+
},
2518+
},
2519+
},
2520+
} as unknown as Policy;
2521+
expect(hasConfiguredRules(policy)).toBe(true);
2522+
});
2523+
2524+
it('returns false when codingRules is empty', () => {
2525+
expect(hasConfiguredRules({rules: {codingRules: {}}} as unknown as Policy)).toBe(false);
2526+
});
2527+
});
2528+
2529+
describe('maxExpenseAmount', () => {
2530+
it('returns true when maxExpenseAmount is set to a non-default value', () => {
2531+
expect(hasConfiguredRules({maxExpenseAmount: 500000} as Policy)).toBe(true);
2532+
});
2533+
2534+
it('returns false when maxExpenseAmount is the default value', () => {
2535+
expect(hasConfiguredRules({maxExpenseAmount: CONST.POLICY.DEFAULT_MAX_EXPENSE_AMOUNT} as Policy)).toBe(false);
2536+
});
2537+
2538+
it('returns false when maxExpenseAmount is the disabled value', () => {
2539+
expect(hasConfiguredRules({maxExpenseAmount: CONST.DISABLED_MAX_EXPENSE_VALUE} as Policy)).toBe(false);
2540+
});
2541+
});
2542+
2543+
describe('maxExpenseAge', () => {
2544+
it('returns true when maxExpenseAge is set to a non-default value', () => {
2545+
expect(hasConfiguredRules({maxExpenseAge: 30} as Policy)).toBe(true);
2546+
});
2547+
2548+
it('returns false when maxExpenseAge is the default value', () => {
2549+
expect(hasConfiguredRules({maxExpenseAge: CONST.POLICY.DEFAULT_MAX_EXPENSE_AGE} as Policy)).toBe(false);
2550+
});
2551+
2552+
it('returns false when maxExpenseAge is the disabled value', () => {
2553+
expect(hasConfiguredRules({maxExpenseAge: CONST.DISABLED_MAX_EXPENSE_VALUE} as Policy)).toBe(false);
2554+
});
2555+
});
2556+
2557+
describe('maxExpenseAmountNoReceipt', () => {
2558+
it('returns true when maxExpenseAmountNoReceipt is set to a non-default value', () => {
2559+
expect(hasConfiguredRules({maxExpenseAmountNoReceipt: 5000} as Policy)).toBe(true);
2560+
});
2561+
2562+
it('returns false when maxExpenseAmountNoReceipt is the default value', () => {
2563+
expect(hasConfiguredRules({maxExpenseAmountNoReceipt: CONST.POLICY.DEFAULT_MAX_AMOUNT_NO_RECEIPT} as Policy)).toBe(false);
2564+
});
2565+
2566+
it('returns false when maxExpenseAmountNoReceipt is the disabled value', () => {
2567+
expect(hasConfiguredRules({maxExpenseAmountNoReceipt: CONST.DISABLED_MAX_EXPENSE_VALUE} as Policy)).toBe(false);
2568+
});
2569+
});
2570+
2571+
describe('maxExpenseAmountNoItemizedReceipt', () => {
2572+
it('returns true when maxExpenseAmountNoItemizedReceipt is set to a non-default value', () => {
2573+
expect(hasConfiguredRules({maxExpenseAmountNoItemizedReceipt: 10000} as Policy)).toBe(true);
2574+
});
2575+
2576+
it('returns false when maxExpenseAmountNoItemizedReceipt is the default value', () => {
2577+
expect(hasConfiguredRules({maxExpenseAmountNoItemizedReceipt: CONST.POLICY.DEFAULT_MAX_AMOUNT_NO_ITEMIZED_RECEIPT} as Policy)).toBe(false);
2578+
});
2579+
2580+
it('returns false when maxExpenseAmountNoItemizedReceipt is the disabled value', () => {
2581+
expect(hasConfiguredRules({maxExpenseAmountNoItemizedReceipt: CONST.DISABLED_MAX_EXPENSE_VALUE} as Policy)).toBe(false);
2582+
});
2583+
});
2584+
2585+
describe('defaultBillable', () => {
2586+
it('returns true when defaultBillable is true', () => {
2587+
expect(hasConfiguredRules({defaultBillable: true} as Policy)).toBe(true);
2588+
});
2589+
2590+
it('returns false when defaultBillable is false', () => {
2591+
expect(hasConfiguredRules({defaultBillable: false} as Policy)).toBe(false);
2592+
});
2593+
});
2594+
2595+
describe('defaultReimbursable', () => {
2596+
it('returns true when defaultReimbursable is false', () => {
2597+
expect(hasConfiguredRules({defaultReimbursable: false} as Policy)).toBe(true);
2598+
});
2599+
2600+
it('returns false when defaultReimbursable is true', () => {
2601+
expect(hasConfiguredRules({defaultReimbursable: true} as Policy)).toBe(false);
2602+
});
2603+
});
2604+
2605+
describe('eReceipts', () => {
2606+
it('returns true when eReceipts is true', () => {
2607+
expect(hasConfiguredRules({eReceipts: true} as Policy)).toBe(true);
2608+
});
2609+
2610+
it('returns false when eReceipts is false', () => {
2611+
expect(hasConfiguredRules({eReceipts: false} as Policy)).toBe(false);
2612+
});
2613+
});
2614+
2615+
describe('requireCompanyCardsEnabled', () => {
2616+
it('returns true when requireCompanyCardsEnabled is true', () => {
2617+
expect(hasConfiguredRules({requireCompanyCardsEnabled: true} as Policy)).toBe(true);
2618+
});
2619+
2620+
it('returns false when requireCompanyCardsEnabled is false', () => {
2621+
expect(hasConfiguredRules({requireCompanyCardsEnabled: false} as Policy)).toBe(false);
2622+
});
2623+
});
2624+
2625+
describe('prohibitedExpenses', () => {
2626+
it('returns true when a prohibitedExpenses value differs from its default', () => {
2627+
// alcohol defaults to false — setting it to true triggers the rule
2628+
expect(hasConfiguredRules({prohibitedExpenses: {alcohol: true}} as Policy)).toBe(true);
2629+
});
2630+
2631+
it('returns true when gambling is disabled (differs from default true)', () => {
2632+
expect(hasConfiguredRules({prohibitedExpenses: {gambling: false}} as Policy)).toBe(true);
2633+
});
2634+
2635+
it('returns false when prohibitedExpenses matches all defaults', () => {
2636+
expect(hasConfiguredRules({prohibitedExpenses: {...CONST.POLICY.DEFAULT_PROHIBITED_EXPENSES}} as Policy)).toBe(false);
2637+
});
2638+
2639+
it('returns false when prohibitedExpenses is an empty object', () => {
2640+
expect(hasConfiguredRules({prohibitedExpenses: {}} as Policy)).toBe(false);
2641+
});
2642+
});
2643+
});
24522644
});

0 commit comments

Comments
 (0)