Skip to content

Commit

Permalink
chore: add optimistic update test validation
Browse files Browse the repository at this point in the history
  • Loading branch information
brobro10000 committed Feb 25, 2025
1 parent 684f993 commit 7345ec6
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 4 deletions.
3 changes: 2 additions & 1 deletion src/components/app/routes/data/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -270,10 +270,10 @@ export async function ensureActiveEnterpriseCustomerUser({
}) {
let {
enterpriseCustomer,
activeEnterpriseCustomer,
allLinkedEnterpriseCustomerUsers,
} = enterpriseLearnerData;
const {
activeEnterpriseCustomer,
shouldUpdateActiveEnterpriseCustomerUser,
} = enterpriseLearnerData;
const matchedBFFQuery = resolveBFFQuery(requestUrl.pathname);
Expand Down Expand Up @@ -334,6 +334,7 @@ export async function ensureActiveEnterpriseCustomerUser({
}),
);
enterpriseCustomer = nextActiveEnterpriseCustomer;
activeEnterpriseCustomer = nextActiveEnterpriseCustomer;
allLinkedEnterpriseCustomerUsers = updatedLinkedEnterpriseCustomerUsers;
// Optimistically update the BFF layer (use helper)
if (matchedBFFQuery) {
Expand Down
37 changes: 34 additions & 3 deletions src/components/app/routes/data/utils.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -162,10 +162,17 @@ describe('ensureActiveEnterpriseCustomerUser', () => {
timesUpdateActiveEnterpriseCustomerCalled: 0,
expectedAllLinkedEnterpriseCustomers: mockAllLinkedEnterpriseCustomerUsers,
};

const {
expectedEnterpriseCustomer,
timesUpdateActiveEnterpriseCustomerCalled,
expectedAllLinkedEnterpriseCustomers,
} = updatedEnterpriseCustomerMetadata;

// If we need to update the active enterprise customer, set the inactive customer to the current enterprise customer
const updatedMockEnterpriseLearnerData = {
...mockEnterpriseLearnerData,
enterpriseCustomer: updatedEnterpriseCustomerMetadata.expectedEnterpriseCustomer,
enterpriseCustomer: expectedEnterpriseCustomer,
shouldUpdateActiveEnterpriseCustomerUser,
};

Expand All @@ -182,14 +189,38 @@ describe('ensureActiveEnterpriseCustomerUser', () => {
});

await waitFor(
// We should expect the active enterprise customer to be updated if
// the shouldUpdateActiveEnterpriseCustomerUser is true
() => {
expect(updateUserActiveEnterprise).toHaveBeenCalledTimes(
updatedEnterpriseCustomerMetadata.timesUpdateActiveEnterpriseCustomerCalled,
timesUpdateActiveEnterpriseCustomerCalled,
);
// We can assume a truthy shouldUpdateActiveEnterpriseCustomerUser resulted in a successful BFF call,
// therefore, we can validate that the query cache has been optimistically updated.

if (shouldUpdateActiveEnterpriseCustomerUser) {
expect(updateUserActiveEnterprise).toHaveBeenCalledWith({
enterpriseCustomer: updatedEnterpriseCustomerMetadata.expectedEnterpriseCustomer,
enterpriseCustomer: expectedEnterpriseCustomer,
});
if (isBFFData) {
expect(mockQueryClient.setQueryData).toHaveBeenCalledTimes(timesUpdateActiveEnterpriseCustomerCalled);
expect(mockQueryClient.setQueryData).toHaveBeenCalledWith(
{
queryFn: expect.any(Function),
queryKey: queryEnterpriseLearnerDashboardBFF(
{ enterpriseSlug: expectedEnterpriseCustomer.slug },
).queryKey,
},
{
...mockQueryClient.getQueryData(queryEnterpriseLearnerDashboardBFF(
{ enterpriseSlug: expectedEnterpriseCustomer.slug },
)),
enterpriseCustomer: expectedEnterpriseCustomer,
activeEnterpriseCustomer: expectedEnterpriseCustomer,
allLinkedEnterpriseCustomerUsers: expectedAllLinkedEnterpriseCustomers,
},
);
}
}
},
);
Expand Down

0 comments on commit 7345ec6

Please sign in to comment.