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
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants