From 01d69d811bb2f5319005fa006c477279532ca592 Mon Sep 17 00:00:00 2001 From: ppedziwiatr Date: Wed, 27 Dec 2023 15:10:59 +0100 Subject: [PATCH] chore: a test for interactionType check --- src/__tests__/integration/basic/pst.test.ts | 14 ++++++++++++++ src/__tests__/integration/data/token-pst.js | 5 +++++ 2 files changed, 19 insertions(+) diff --git a/src/__tests__/integration/basic/pst.test.ts b/src/__tests__/integration/basic/pst.test.ts index 2121be0..98339aa 100644 --- a/src/__tests__/integration/basic/pst.test.ts +++ b/src/__tests__/integration/basic/pst.test.ts @@ -118,6 +118,20 @@ describe('Testing the Profit Sharing Token', () => { expect(resultVM.target).toEqual('uhE-QeYS8i4pmUtnxQyHD7dzXFNaJ9oMK-IM-QPNY6M'); }); + // note that this requires a check inside contract code! + it('should not eval interaction that calls view function', async () => { + const interaction = await pst.writeInteraction({ + function: 'balance' + }); + + await mineBlock(warp); + + const result = await pst.readState(); + + expect(result.cachedValue.validity[interaction.originalTxId]).toBeFalsy(); + expect(result.cachedValue.errorMessages[interaction.originalTxId]).toContain('Trying to call "view" function from a "write" action'); + }); + it('should properly dispatch an event', async () => { let handlerCalled = false; const interactionResult = await pst.writeInteraction({ diff --git a/src/__tests__/integration/data/token-pst.js b/src/__tests__/integration/data/token-pst.js index 89b4384..1074e0e 100644 --- a/src/__tests__/integration/data/token-pst.js +++ b/src/__tests__/integration/data/token-pst.js @@ -3,6 +3,7 @@ export async function handle(state, action) { const canEvolve = state.canEvolve; const input = action.input; const caller = action.caller; + const interactionType = action.interactionType; if (input.function === 'transfer') { const target = input.target; @@ -66,6 +67,10 @@ export async function handle(state, action) { } if (input.function === 'balance') { + if (interactionType !== 'view') { + throw new ContractError('Trying to call "view" function from a "write" action.'); + } + const target = input.target; const ticker = state.ticker;