88import io .github .hectorvent .floci .services .scheduler .model .Target ;
99import io .github .hectorvent .floci .services .sns .SnsService ;
1010import io .github .hectorvent .floci .services .sqs .SqsService ;
11+ import io .github .hectorvent .floci .services .sqs .model .MessageAttributeValue ;
1112import org .junit .jupiter .api .BeforeEach ;
1213import org .junit .jupiter .api .Test ;
1314
14- import static org .mockito .ArgumentMatchers .any ;
15- import static org .mockito .ArgumentMatchers .anyInt ;
16- import static org .mockito .ArgumentMatchers .anyString ;
17- import static org .mockito .ArgumentMatchers .eq ;
18- import static org .mockito .ArgumentMatchers .isNull ;
19- import static org .mockito .Mockito .mock ;
20- import static org .mockito .Mockito .never ;
21- import static org .mockito .Mockito .verify ;
22- import static org .mockito .Mockito .when ;
15+ import java .util .Map ;
16+
17+ import static org .mockito .ArgumentMatchers .*;
18+ import static org .mockito .Mockito .*;
2319
2420class ScheduleInvokerTest {
2521
@@ -43,6 +39,45 @@ void setUp() {
4339 eventBridgeService , new ObjectMapper (), config );
4440 }
4541
42+ @ Test
43+ void universalSnsPublishForwardsMessageAttributes () {
44+ Target target = new Target ();
45+ target .setArn ("arn:aws:scheduler:::aws-sdk:sns:publish" );
46+ target .setRoleArn ("arn:aws:iam::000000000000:role/x" );
47+ target .setInput ("{\" TopicArn\" :\" " + TOPIC_ARN + "\" ,"
48+ + "\" Message\" :\" {}\" ,"
49+ + "\" Subject\" :\" my-subject\" ,"
50+ + "\" MessageAttributes\" :{"
51+ + "\" EventName\" :{\" DataType\" :\" String\" ,\" StringValue\" :\" my-subject\" }"
52+ + "}}" );
53+
54+ invoker .invoke (target , "us-east-1" );
55+
56+ verify (snsService ).publish (
57+ eq (TOPIC_ARN ), isNull (), isNull (),
58+ eq ("{}" ), eq ("my-subject" ),
59+ argThat ((Map <String , MessageAttributeValue > attrs ) ->
60+ attrs != null
61+ && attrs .containsKey ("EventName" )
62+ && "my-subject" .equals (attrs .get ("EventName" ).getStringValue ())
63+ && "String" .equals (attrs .get ("EventName" ).getDataType ())),
64+ isNull (), isNull (), eq ("us-east-1" ));
65+ }
66+
67+ @ Test
68+ void universalSnsPublishWithNoMessageAttributesPassesNull () {
69+ Target target = new Target ();
70+ target .setArn ("arn:aws:scheduler:::aws-sdk:sns:publish" );
71+ target .setRoleArn ("arn:aws:iam::000000000000:role/x" );
72+ target .setInput ("{\" TopicArn\" :\" " + TOPIC_ARN + "\" ,\" Message\" :\" hello\" }" );
73+
74+ invoker .invoke (target , "us-east-1" );
75+
76+ verify (snsService ).publish (eq (TOPIC_ARN ), isNull (), isNull (),
77+ eq ("hello" ), isNull (), isNull (),
78+ isNull (), isNull (), eq ("us-east-1" ));
79+ }
80+
4681 @ Test
4782 void universalSnsPublishReadsTopicArnAndMessageFromInput () {
4883 Target target = new Target ();
0 commit comments