Skip to content

Commit 3f9d618

Browse files
committed
fix(predict): address confirmation hook review
1 parent 1f2109f commit 3f9d618

4 files changed

Lines changed: 47 additions & 120 deletions

File tree

app/components/UI/Predict/controllers/PredictController.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2732,7 +2732,7 @@ export class PredictController extends BaseController<
27322732

27332733
public async publish(_request: {
27342734
transactionMeta: TransactionMeta;
2735-
}): Promise<{ transactionHash?: string; isIntentComplete?: boolean }> {
2735+
}): Promise<{ transactionHash?: string }> {
27362736
return { transactionHash: undefined };
27372737
}
27382738

app/core/Engine/controllers/transaction-controller/transaction-controller-init.test.ts

Lines changed: 26 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -122,22 +122,43 @@ function buildInitRequestMock(
122122
TransactionControllerInitMessenger
123123
>
124124
> {
125+
const {
126+
predictControllerMock: providedPredictControllerMock,
127+
...requestOverrides
128+
} = initRequestProperties;
129+
const predictControllerMock =
130+
(providedPredictControllerMock as ControllerMock | undefined) ??
131+
buildControllerMock();
125132
const initMessenger = new ExtendedMessenger<MockAnyNamespace>({
126133
namespace: MOCK_ANY_NAMESPACE,
127134
});
128135
const baseControllerMessenger = new ExtendedMessenger<MockAnyNamespace>({
129136
namespace: MOCK_ANY_NAMESPACE,
130137
});
138+
(initMessenger as unknown as { call: jest.Mock }).call = jest.fn(
139+
(actionType: string, params: unknown) => {
140+
if (actionType === 'PredictController:beforePublish') {
141+
return predictControllerMock.beforePublish(params);
142+
}
143+
144+
if (actionType === 'PredictController:publish') {
145+
return predictControllerMock.publish(params);
146+
}
147+
148+
throw new Error(`Unexpected init messenger action: ${actionType}`);
149+
},
150+
);
151+
131152
const requestMock = {
132153
...buildMessengerClientInitRequestMock(baseControllerMessenger),
133154
initMessenger:
134155
initMessenger as unknown as TransactionControllerInitMessenger,
135156
controllerMessenger:
136157
baseControllerMessenger as unknown as TransactionControllerMessenger,
137-
...initRequestProperties,
158+
...requestOverrides,
138159
};
139160

140-
if (!initRequestProperties.getMessengerClient) {
161+
if (!requestOverrides.getMessengerClient) {
141162
requestMock.getMessengerClient.mockReturnValue(buildControllerMock());
142163
}
143164

@@ -339,11 +360,7 @@ describe('Transaction Controller Init', () => {
339360
'hooks',
340361
{},
341362
{
342-
getMessengerClient: jest.fn((controllerName: string) =>
343-
controllerName === 'PredictController'
344-
? predictControllerMock
345-
: buildControllerMock(),
346-
),
363+
predictControllerMock,
347364
},
348365
);
349366

@@ -388,11 +405,7 @@ describe('Transaction Controller Init', () => {
388405
'hooks',
389406
{},
390407
{
391-
getMessengerClient: jest.fn((controllerName: string) =>
392-
controllerName === 'PredictController'
393-
? predictControllerMock
394-
: buildControllerMock(),
395-
),
408+
predictControllerMock,
396409
},
397410
);
398411

@@ -422,11 +435,7 @@ describe('Transaction Controller Init', () => {
422435
'hooks',
423436
{},
424437
{
425-
getMessengerClient: jest.fn((controllerName: string) =>
426-
controllerName === 'PredictController'
427-
? predictControllerMock
428-
: buildControllerMock(),
429-
),
438+
predictControllerMock,
430439
},
431440
);
432441

@@ -437,52 +446,6 @@ describe('Transaction Controller Init', () => {
437446
expect(submitSmartTransactionHookMock).not.toHaveBeenCalled();
438447
});
439448

440-
it('marks the latest transaction intent complete when Predict publish completes an intent', async () => {
441-
const predictControllerMock = buildControllerMock({
442-
publish: jest.fn().mockResolvedValue({
443-
transactionHash: '0xpredict',
444-
isIntentComplete: true,
445-
}),
446-
} as unknown as Partial<NetworkController>);
447-
const getTransactionByIdMock = jest.requireMock(
448-
'../../../../util/transactions',
449-
).getTransactionById;
450-
getTransactionByIdMock.mockReturnValue({ ...MOCK_TRANSACTION_META });
451-
const hooks = testConstructorOption(
452-
'hooks',
453-
{},
454-
{
455-
getMessengerClient: jest.fn((controllerName: string) =>
456-
controllerName === 'PredictController'
457-
? predictControllerMock
458-
: buildControllerMock(),
459-
),
460-
},
461-
);
462-
463-
const result = await hooks?.publish?.(MOCK_TRANSACTION_META);
464-
465-
const transactionControllerInstance = transactionControllerClassMock.mock
466-
.instances[0] as unknown as {
467-
updateTransaction: jest.Mock;
468-
};
469-
470-
expect(result).toEqual({ transactionHash: '0xpredict' });
471-
expect(getTransactionByIdMock).toHaveBeenCalledWith(
472-
MOCK_TRANSACTION_META.id,
473-
transactionControllerInstance,
474-
);
475-
expect(
476-
transactionControllerInstance.updateTransaction,
477-
).toHaveBeenCalledWith(
478-
expect.objectContaining({
479-
id: MOCK_TRANSACTION_META.id,
480-
isIntentComplete: true,
481-
}),
482-
'Predict claim relayer intent complete',
483-
);
484-
});
485-
486449
it('passes isSmartTransaction returning false to pay hook when stxDisabled is true', async () => {
487450
selectMetaMaskPayFlagsMock.mockReturnValue({
488451
attemptsMax: 2,

app/core/Engine/controllers/transaction-controller/transaction-controller-init.ts

Lines changed: 11 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,6 @@ export const TransactionControllerInit: MessengerClientInitFunction<
125125
transactionController,
126126
smartTransactionsController,
127127
initMessenger,
128-
request,
129128
signedTransactionInHex,
130129
}),
131130
publishBatch: async (_request: PublishBatchHookRequest) =>
@@ -138,7 +137,7 @@ export const TransactionControllerInit: MessengerClientInitFunction<
138137
_request.transactions as PublishBatchHookTransaction[],
139138
}),
140139
beforePublish: (transactionMeta: TransactionMeta) =>
141-
beforePublish(transactionMeta, request),
140+
beforePublish(transactionMeta, initMessenger),
142141
beforeSign: (_request: { transactionMeta: TransactionMeta }) =>
143142
beforeSign(_request, request),
144143
},
@@ -219,7 +218,6 @@ async function publishHook({
219218
transactionController,
220219
smartTransactionsController,
221220
initMessenger,
222-
request,
223221
signedTransactionInHex,
224222
}: {
225223
transactionMeta: TransactionMeta;
@@ -228,20 +226,15 @@ async function publishHook({
228226
transactionController: TransactionController;
229227
smartTransactionsController: SmartTransactionsController;
230228
initMessenger: TransactionControllerInitMessenger;
231-
request: MessengerClientInitRequest<
232-
TransactionControllerMessenger,
233-
TransactionControllerInitMessenger
234-
>;
235229
signedTransactionInHex: Hex;
236230
}): Promise<{ transactionHash?: string }> {
237-
const predictResult = await publishPredict({
238-
transactionMeta,
239-
transactionController,
240-
request,
241-
});
231+
const { transactionHash: predictTransactionHash } = await initMessenger.call(
232+
'PredictController:publish',
233+
{ transactionMeta },
234+
);
242235

243-
if (predictResult.transactionHash) {
244-
return { transactionHash: predictResult.transactionHash };
236+
if (predictTransactionHash) {
237+
return { transactionHash: predictTransactionHash };
245238
}
246239

247240
const state = getState();
@@ -344,41 +337,6 @@ async function publishHook({
344337
return { transactionHash: undefined };
345338
}
346339

347-
async function publishPredict({
348-
transactionMeta,
349-
transactionController,
350-
request,
351-
}: {
352-
transactionMeta: TransactionMeta;
353-
transactionController: TransactionController;
354-
request: MessengerClientInitRequest<
355-
TransactionControllerMessenger,
356-
TransactionControllerInitMessenger
357-
>;
358-
}): Promise<{ transactionHash?: string; isIntentComplete?: boolean }> {
359-
const predictController = request.getMessengerClient('PredictController');
360-
const result = await predictController.publish({ transactionMeta });
361-
362-
if (result.transactionHash && result.isIntentComplete) {
363-
const latestMeta = getTransactionById(
364-
transactionMeta.id,
365-
transactionController,
366-
);
367-
368-
if (latestMeta) {
369-
transactionController.updateTransaction(
370-
{
371-
...latestMeta,
372-
isIntentComplete: true,
373-
},
374-
'Predict claim relayer intent complete',
375-
);
376-
}
377-
}
378-
379-
return result;
380-
}
381-
382340
function getSmartTransactionCommonParams(state: RootState, chainId: Hex) {
383341
const shouldUseSmartTransaction = selectShouldUseSmartTransaction(
384342
state,
@@ -496,13 +454,11 @@ function getControllers(
496454

497455
function beforePublish(
498456
transactionMeta: TransactionMeta,
499-
request: MessengerClientInitRequest<
500-
TransactionControllerMessenger,
501-
TransactionControllerInitMessenger
502-
>,
457+
initMessenger: TransactionControllerInitMessenger,
503458
) {
504-
const predictController = request.getMessengerClient('PredictController');
505-
return predictController.beforePublish({ transactionMeta });
459+
return initMessenger.call('PredictController:beforePublish', {
460+
transactionMeta,
461+
});
506462
}
507463

508464
function beforeSign(

app/core/Engine/messengers/transaction-controller-messenger/transaction-controller-messenger.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@ import {
5555
MessengerActions,
5656
MessengerEvents,
5757
} from '@metamask/messenger';
58+
import type {
59+
PredictControllerBeforePublishAction,
60+
PredictControllerPublishAction,
61+
} from '../../../../components/UI/Predict/controllers/PredictController-method-action-types';
5862

5963
export function getTransactionControllerMessenger(
6064
rootMessenger: RootMessenger,
@@ -114,7 +118,9 @@ type InitMessengerActions =
114118
| TransactionPayControllerGetDelegationTransactionAction
115119
| TransactionPayControllerGetStateAction
116120
| TransactionPayControllerGetStrategyAction
117-
| AnalyticsControllerActions;
121+
| AnalyticsControllerActions
122+
| PredictControllerBeforePublishAction
123+
| PredictControllerPublishAction;
118124

119125
type InitMessengerEvents =
120126
| BridgeStatusControllerEvents
@@ -173,6 +179,8 @@ export function getTransactionControllerInitMessenger(
173179
'TransactionPayController:getState',
174180
'TransactionPayController:getStrategy',
175181
'AnalyticsController:trackEvent',
182+
'PredictController:beforePublish',
183+
'PredictController:publish',
176184
],
177185
events: [
178186
'BridgeStatusController:stateChange',

0 commit comments

Comments
 (0)