Skip to content

Commit

Permalink
Merge pull request Expensify#50391 from mkzie2/mkzie2-issue-49127
Browse files Browse the repository at this point in the history
fix workflows default for workspaces
  • Loading branch information
MariaHCD authored Mar 3, 2025
2 parents a624dfb + adf5d40 commit a018b5f
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 3 deletions.
8 changes: 7 additions & 1 deletion src/libs/actions/Policy/Policy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1768,6 +1768,8 @@ function buildPolicyData(
const optimisticCategoriesData = buildOptimisticPolicyCategories(policyID, Object.values(CONST.POLICY.DEFAULT_CATEGORIES));
const optimisticMccGroupData = buildOptimisticMccGroup();

const shouldEnableWorkflowsByDefault =
!introSelected?.choice || introSelected.choice === CONST.ONBOARDING_CHOICES.MANAGE_TEAM || introSelected.choice === CONST.ONBOARDING_CHOICES.LOOKING_AROUND;
const shouldSetCreatedWorkspaceAsActivePolicy = !!activePolicyID && allPolicies?.[`${ONYXKEYS.COLLECTION.POLICY}${activePolicyID}`]?.type === CONST.POLICY.TYPE.PERSONAL;

const optimisticData: OnyxUpdate[] = [
Expand All @@ -1794,7 +1796,7 @@ function buildPolicyData(
areCategoriesEnabled: true,
areTagsEnabled: false,
areDistanceRatesEnabled: false,
areWorkflowsEnabled: false,
areWorkflowsEnabled: shouldEnableWorkflowsByDefault,
areReportFieldsEnabled: false,
areConnectionsEnabled: false,
employeeList: {
Expand Down Expand Up @@ -3145,6 +3147,7 @@ function enablePolicyWorkflows(policyID: string, enabled: boolean) {
? {
approvalMode: CONST.POLICY.APPROVAL_MODE.OPTIONAL,
autoReporting: false,
autoReportingFrequency: CONST.POLICY.AUTO_REPORTING_FREQUENCIES.INSTANT,
harvesting: {
enabled: false,
},
Expand All @@ -3157,6 +3160,7 @@ function enablePolicyWorkflows(policyID: string, enabled: boolean) {
? {
approvalMode: CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE,
autoReporting: CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE,
autoReportingFrequency: CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE,
harvesting: CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE,
reimbursementChoice: CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE,
}
Expand Down Expand Up @@ -3194,6 +3198,7 @@ function enablePolicyWorkflows(policyID: string, enabled: boolean) {
? {
approvalMode: policy?.approvalMode,
autoReporting: policy?.autoReporting,
autoReportingFrequency: policy?.autoReportingFrequency,
harvesting: policy?.harvesting,
reimbursementChoice: policy?.reimbursementChoice,
}
Expand All @@ -3204,6 +3209,7 @@ function enablePolicyWorkflows(policyID: string, enabled: boolean) {
? {
approvalMode: null,
autoReporting: null,
autoReportingFrequency: null,
harvesting: null,
reimbursementChoice: null,
}
Expand Down
67 changes: 67 additions & 0 deletions tests/actions/PolicyTest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,44 @@ describe('actions/Policy', () => {
expect(reportAction.pendingAction).toBeFalsy();
});
});

it('create a new workspace with enabled workflows if the onboarding choice is newDotManageTeam or newDotLookingAround', async () => {
Onyx.merge(`${ONYXKEYS.NVP_INTRO_SELECTED}`, {choice: CONST.ONBOARDING_CHOICES.MANAGE_TEAM});
await waitForBatchedUpdates();

const policyID = Policy.generatePolicyID();
// When a new workspace is created with introSelected set to MANAGE_TEAM
Policy.createWorkspace(ESH_EMAIL, true, WORKSPACE_NAME, policyID);
await waitForBatchedUpdates();

await TestHelper.getOnyxData({
key: `${ONYXKEYS.COLLECTION.POLICY}${policyID}`,
waitForCollectionCallback: false,
callback: (policy) => {
// Then the workflows feature is enabled
expect(policy?.areWorkflowsEnabled).toBeTruthy();
},
});
});

it('create a new workspace with disabled workflows if the onboarding choice is not newDotManageTeam or newDotLookingAround', async () => {
Onyx.merge(`${ONYXKEYS.NVP_INTRO_SELECTED}`, {choice: CONST.ONBOARDING_CHOICES.PERSONAL_SPEND});
await waitForBatchedUpdates();

const policyID = Policy.generatePolicyID();
// When a new workspace is created with introSelected set to PERSONAL_SPEND
Policy.createWorkspace(ESH_EMAIL, true, WORKSPACE_NAME, policyID);
await waitForBatchedUpdates();

await TestHelper.getOnyxData({
key: `${ONYXKEYS.COLLECTION.POLICY}${policyID}`,
waitForCollectionCallback: false,
callback: (policy) => {
// Then workflows are not enabled
expect(policy?.areWorkflowsEnabled).toBeFalsy();
},
});
});
});

describe('upgradeToCorporate', () => {
Expand Down Expand Up @@ -375,4 +413,33 @@ describe('actions/Policy', () => {
});
});
});

describe('enablePolicyWorkflows', () => {
it('should update delayed submission to instant when disabling the workflows feature', async () => {
(fetch as MockFetch)?.pause?.();
Onyx.set(ONYXKEYS.SESSION, {email: ESH_EMAIL, accountID: ESH_ACCOUNT_ID});
const fakePolicy: PolicyType = {
...createRandomPolicy(0, CONST.POLICY.TYPE.TEAM),
areWorkflowsEnabled: true,
autoReporting: true,
autoReportingFrequency: CONST.POLICY.AUTO_REPORTING_FREQUENCIES.IMMEDIATE,
};
Onyx.set(`${ONYXKEYS.COLLECTION.POLICY}${fakePolicy.id}`, fakePolicy);
await waitForBatchedUpdates();

// Disable the workflow feature
Policy.enablePolicyWorkflows(fakePolicy.id, false);
await waitForBatchedUpdates();

await TestHelper.getOnyxData({
key: `${ONYXKEYS.COLLECTION.POLICY}${fakePolicy.id}`,
waitForCollectionCallback: false,
callback: (policy) => {
// Check if the autoReportingFrequency is updated to instant
expect(policy?.areWorkflowsEnabled).toBeFalsy();
expect(policy?.autoReportingFrequency).toBe(CONST.POLICY.AUTO_REPORTING_FREQUENCIES.INSTANT);
},
});
});
});
});
3 changes: 1 addition & 2 deletions tests/utils/TestHelper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import {fireEvent, screen} from '@testing-library/react-native';
import {Str} from 'expensify-common';
import {Linking} from 'react-native';
import Onyx from 'react-native-onyx';
import type {ConnectOptions} from 'react-native-onyx/dist/types';
import type {ConnectOptions, OnyxKey} from 'react-native-onyx/dist/types';
import type {ApiCommand, ApiRequestCommandParameters} from '@libs/API/types';
import {translateLocal} from '@libs/Localize';
import Pusher from '@libs/Pusher';
Expand All @@ -13,7 +13,6 @@ import * as Session from '@src/libs/actions/Session';
import HttpUtils from '@src/libs/HttpUtils';
import * as NumberUtils from '@src/libs/NumberUtils';
import ONYXKEYS from '@src/ONYXKEYS';
import type {OnyxKey} from '@src/ONYXKEYS';
import appSetup from '@src/setup';
import type {Response as OnyxResponse, PersonalDetails, Report} from '@src/types/onyx';
import waitForBatchedUpdates from './waitForBatchedUpdates';
Expand Down

0 comments on commit a018b5f

Please sign in to comment.