Skip to content

Conversation

@mikewongblinx
Copy link

No description provided.

@mikewongblinx mikewongblinx force-pushed the feature/s3-jsonata-support branch from 7c2d194 to 4e5efd6 Compare September 26, 2025 08:51
@zirkelc
Copy link
Collaborator

zirkelc commented Sep 26, 2025

Hey @mikewongblinx please add a test case for this.
You can chnage/extend one of the existing tests for S3.
here is an example covering both JSONPath and JSONata:

describe('should give step functions permission to * whenever StateMachineArn.$ (JSONPath) or {% $arn %} (JSONata) is seen', () => {
it('jsonpath', () => {
const stateMachineArn = 'arn:aws:states:us-east-1:123456789:stateMachine:HelloStateMachine';
const genStateMachine = id => ({
id,
definition: {
StartAt: 'A',
States: {
A: {
Type: 'Task',
Resource: 'arn:aws:states:::states:startExecution',
Parameters: {
'StateMachineArn.$': '$.arn',
Input: {},
},
Next: 'B',
},
B: {
Type: 'Task',
Resource: 'arn:aws:states:::states:startExecution.sync',
Parameters: {
StateMachineArn: stateMachineArn,
Input: {},
},
Next: 'C',
},
C: {
Type: 'Task',
Resource: 'arn:aws:states:::states:startExecution.waitForTaskToken',
Parameters: {
StateMachineArn: stateMachineArn,
Input: {},
},
End: true,
},
},
},
});
serverless.service.stepFunctions = {
stateMachines: {
myStateMachine1: genStateMachine('StateMachine1'),
},
};
serverlessStepFunctions.compileIamRole();
const statements = serverlessStepFunctions.serverless.service
.provider.compiledCloudFormationTemplate.Resources.StateMachine1Role
.Properties.Policies[0].PolicyDocument.Statement;
const stateMachinePermissions = statements.filter(s => _.includes(s.Action, 'states:StartExecution'));
expect(stateMachinePermissions).to.have.lengthOf(1);
expect(stateMachinePermissions[0].Resource).to.equal('*');
});
it('jsonata', () => {
const stateMachineArn = 'arn:aws:states:us-east-1:123456789:stateMachine:HelloStateMachine';
const genStateMachine = id => ({
id,
definition: {
QueryLanguage: 'JSONata', // JSONPath is default
StartAt: 'A',
States: {
A: {
Type: 'Task',
Resource: 'arn:aws:states:::states:startExecution',
Arguments: {
StateMachineArn: '{% $arn %}',
Input: {},
},
Next: 'B',
},
B: {
Type: 'Task',
Resource: 'arn:aws:states:::states:startExecution.sync',
Arguments: {
StateMachineArn: stateMachineArn,
Input: {},
},
Next: 'C',
},
C: {
Type: 'Task',
Resource:
'arn:aws:states:::states:startExecution.waitForTaskToken',
Arguments: {
StateMachineArn: stateMachineArn,
Input: {},
},
End: true,
},
},
},
});
serverless.service.stepFunctions = {
stateMachines: {
myStateMachine1: genStateMachine('StateMachine1'),
},
};
serverlessStepFunctions.compileIamRole();
const statements = serverlessStepFunctions.serverless.service.provider
.compiledCloudFormationTemplate.Resources.StateMachine1Role
.Properties.Policies[0].PolicyDocument.Statement;
const stateMachinePermissions = statements.filter(s => _.includes(s.Action, 'states:StartExecution'));
expect(stateMachinePermissions).to.have.lengthOf(1);
expect(stateMachinePermissions[0].Resource).to.equal('*');
});
});

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

2 participants