import json import pprint from http import HTTPMethod, HTTPStatus from urllib.parse import urlencode from layercake.dynamodb import DynamoDBPersistenceLayer from ..conftest import HttpApiProxy, LambdaContext def test_token( app, seeds, dynamodb_persistence_layer: DynamoDBPersistenceLayer, http_api_proxy: HttpApiProxy, lambda_context: LambdaContext, ): client_id = 'd72d4005-1fa7-4430-9754-80d5e2487bb6' r = app.lambda_handler( http_api_proxy( raw_path='/token', method=HTTPMethod.POST, headers={ 'Content-Type': 'application/x-www-form-urlencoded', }, body=urlencode( { 'grant_type': 'authorization_code', 'redirect_uri': 'https://localhost/callback', 'code': 'kyqp3oSuRFTfuBaCmq3XOgGWg67l42Kt3D6xPEj7Yd3MLdi9', 'client_id': client_id, 'code_verifier': '9072df2d3709425993e733f38fb27a825b8860e699364ce9abafdf51077c0bdb4e456ddb741147a4bec4eeda782d92cc', } ), ), lambda_context, ) assert r['statusCode'] == HTTPStatus.OK data = json.loads(r['body']) # print(data) r = dynamodb_persistence_layer.query( key_cond_expr='#pk = :pk', expr_attr_name={ '#pk': 'id', }, expr_attr_values={ ':pk': 'OAUTH2#TOKEN', }, ) # pprint.pp(r['items']) r = app.lambda_handler( http_api_proxy( raw_path='/token', method=HTTPMethod.POST, headers={ 'Content-Type': 'application/x-www-form-urlencoded', }, body=urlencode( { 'grant_type': 'refresh_token', 'refresh_token': data['refresh_token'], 'client_id': client_id, } ), ), lambda_context, ) assert r['statusCode'] == HTTPStatus.OK # print(r['body'])