|
6 | 6 | from aws_lambda_powertools.utilities.data_classes.appsync_resolver_event import ( |
7 | 7 | AppSyncIdentityCognito, |
8 | 8 | AppSyncIdentityIAM, |
| 9 | + AppSyncIdentityLambda, |
9 | 10 | AppSyncResolverEventInfo, |
10 | 11 | get_identity_object, |
11 | 12 | ) |
@@ -143,3 +144,37 @@ def test_appsync_resolver_event_empty(): |
143 | 144 |
|
144 | 145 | assert event.info.field_name is None |
145 | 146 | assert event.info.parent_type_name is None |
| 147 | + |
| 148 | + |
| 149 | +def test_get_identity_object_lambda_authorizer(): |
| 150 | + # GIVEN an AWS_LAMBDA authorization identity, whose only field is the authorizer's resolverContext |
| 151 | + identity = {"resolverContext": {"userId": "u-1", "tier": "gold"}} |
| 152 | + |
| 153 | + # WHEN dispatched to a type |
| 154 | + identity_object = get_identity_object(identity) |
| 155 | + |
| 156 | + # THEN it resolves to AppSyncIdentityLambda, exposing the authorizer context |
| 157 | + assert isinstance(identity_object, AppSyncIdentityLambda) |
| 158 | + assert identity_object.resolver_context == identity["resolverContext"] |
| 159 | + |
| 160 | + |
| 161 | +def test_get_identity_object_prefers_sub_over_resolver_context(): |
| 162 | + # GIVEN an identity carrying both `sub` and `resolverContext` (authorization modes are exclusive in practice) |
| 163 | + identity = {"sub": "string", "resolverContext": {"userId": "u-1"}} |
| 164 | + |
| 165 | + # THEN the existing Cognito dispatch wins, keeping the old behaviour |
| 166 | + assert isinstance(get_identity_object(identity), AppSyncIdentityCognito) |
| 167 | + |
| 168 | + |
| 169 | +def test_appsync_resolver_event_lambda_authorizer(): |
| 170 | + raw_event = load_event("appSyncLambdaAuthorizerResolverEvent.json") |
| 171 | + parsed_event = AppSyncResolverEvent(raw_event) |
| 172 | + |
| 173 | + assert parsed_event.type_name == raw_event["typeName"] |
| 174 | + assert parsed_event.field_name == raw_event["fieldName"] |
| 175 | + assert parsed_event.arguments == raw_event["arguments"] |
| 176 | + |
| 177 | + assert isinstance(parsed_event.identity, AppSyncIdentityLambda) |
| 178 | + identity: AppSyncIdentityLambda = parsed_event.identity |
| 179 | + assert identity.resolver_context == raw_event["identity"]["resolverContext"] |
| 180 | + assert identity.resolver_context["userId"] == "u-1" |
0 commit comments