"""Integration tests.""" import json from constants.queries import get_project def generate_context(test_run_data, project=None): """Generate a context object.""" return { 'bucket': test_run_data.bucket, 'key': test_run_data.key, 'product': { 'status': None, 'display_artist_name': 'Cool Artist', 'upc': '231232563123', 'product_id': None, 'is_main_release': True, 'release_type': 'release', 'release_reference': 'R0', 'grid': 'A0145345234523453452', 'catalog_number': 'G0134523452345245', 'product_name': 'Test Artist', 'vendor_id': test_run_data.vendor_id, 'subaccount_id': test_run_data.subaccount_id, 'genres': [{ 'genre': 'ELECTRONICA-00', 'subgenre': 'Alternative' }], }, 'tracks': [{ 'tuid': None, 'release_reference': 'R1', 'resource_reference': 'A1', 'sequence_number': 1, 'release_type': 'TrackRelease', 'volume': 1, 'isrc': 'QZCDB2000001', 'track_name': 'This track' }], 'deals': None, 'message_id': '234524523', 'message_thread_id': 'G014523452345', 'party_id': 'PADPIDA2012041004F', 'update_indicator': 'OriginalMessage', 'project': project, 'participants': [ { 'name': 'Artist One', 'artist_id': '12345', 'label_participant_id': 'abc', 'label_participant_uuid': 'AAAAAA', } ] } def upload_file(test_run_data, source_file, target_key): """Upload file.""" target_s3_key = f'{test_run_data.key}{target_key}' test_run_data.s3_client.upload_file( Filename=f'{test_run_data.data_directory}/{source_file}', Bucket=test_run_data.bucket, Key=target_s3_key ) return target_s3_key def upload_obj(test_run_data, source_dict, target_key): """Upload file.""" target_s3_key = f'{test_run_data.key}{target_key}' test_run_data.s3_client.put_object( Bucket=test_run_data.bucket, Key=target_s3_key, Body=json.dumps(source_dict).encode() ) return target_s3_key def test_create_project(test_workspace_setup, lambda_name): """Test invoking the lambda to create a new project.""" test_run_data = test_workspace_setup test_project = { 'project_code': 'FAKE TEST CODE', 'name': 'FAKE TEST NAME', 'description': 'FAKE TEST DESCRIPTION', 'artist': { 'name': 'Artist One', 'spotify_uri': None, 'apple_id': None, 'sequence_number': 1 } } state_machine_context = generate_context(test_run_data) s3_context = generate_context(test_run_data, test_project) # Upload parsed_ddex.json upload_obj(test_run_data, s3_context, 'parsed_ddex.json') response = test_run_data.lambda_client.invoke( FunctionName=lambda_name, InvocationType='RequestResponse', Payload=json.dumps(state_machine_context).encode() ) response_context = json.loads(response.get('Payload').read()) assert response_context['project_id'] # Call graphql to get Project payload = { 'projectId': response_context['project_id'] } graphql_result = test_run_data.graphql_client.execute( get_project, payload )['data']['project'] assert graphql_result['projectName'] ==\ s3_context['project']['name'] assert str(graphql_result['vendorId']) == str( test_run_data.vendor_id) assert str(graphql_result['subaccountId']) == str( test_run_data.subaccount_id) def test_update_project(test_workspace_setup, project, lambda_name): """Test invoking the lambda to update a project.""" test_run_data = test_workspace_setup project_context = { 'project_code': project.payload['data']['projectCode'], 'name': 'UPDATED PROJECT NAME', 'artist': { 'name': 'Artist One', 'spotify_uri': None, 'apple_id': None, 'sequence_number': 1 } } state_machine_context = generate_context(test_run_data) s3_context = generate_context(test_run_data, project_context) # Upload parsed_ddex.json upload_obj(test_run_data, s3_context, 'parsed_ddex.json') response = test_run_data.lambda_client.invoke( FunctionName=lambda_name, InvocationType='RequestResponse', Payload=json.dumps(state_machine_context).encode() ) response_context = json.loads(response.get('Payload').read()) assert response_context['project_id'] # Call graphql to get Project payload = { 'projectId': response_context['project_id'] } graphql_result = test_run_data.graphql_client.execute( get_project, payload )['data']['project'] assert graphql_result['projectName'] == s3_context['project']['name'] assert graphql_result['projectCode'] == ( s3_context['project']['project_code']) assert str(graphql_result['vendorId']) == str(test_run_data.vendor_id) assert str(graphql_result['subaccountId']) == str( test_run_data.subaccount_id) assert str(response_context['project_id']) == str( project.result['projectId'])