"""Functional tests for the complete_multipart_upload endpoint.""" from flask.testing import FlaskClient from moto import mock_aws from assets import config from assets.connectors import s3 as s3_connector from assets.models import ( asset_status as asset_status_model, asset_upload as asset_upload_model, ) @mock_aws def test_complete_multipart_upload( db_fixture: None, fixture_client: FlaskClient ) -> None: """Test complete_multipart_upload success.""" filename = "filename" user_id = "alw:12345" s3client = s3_connector.get_s3_client() s3client.create_bucket(Bucket=config.RAW_ASSETS_BUCKET_NAME) create_multipart_upload_result = s3client.create_multipart_upload( Bucket=config.RAW_ASSETS_BUCKET_NAME, Key=filename ) upload_id = create_multipart_upload_result["UploadId"] upload_part_result = s3client.upload_part( Bucket=config.RAW_ASSETS_BUCKET_NAME, UploadId=upload_id, Key="filename", PartNumber=1, Body=b"part", ) part_1_etag = upload_part_result["ETag"] create_asset_upload_with_context_response = ( asset_upload_model.create_asset_upload_with_context( user_id=user_id, asset_upload_type_id=1, token=upload_id, filename=filename, product_id=123, upc=123456789012, track_unique_id=456, is_correction=False, original_filename="original_filename", ) ) asset_upload = create_asset_upload_with_context_response["asset_upload"] result = fixture_client.patch( f"/v2/assets/upload/{filename}", json={ "parts": [ { "part_number": 1, "etag": part_1_etag, } ] }, headers={ "Orchard-User-Id": user_id, "Grass-Account-Type": "vendor", "Grass-Account-Id": 234234, }, ) assert ( asset_status_model.get_last_asset_status(asset_upload["id"])["status"] == "upload_complete" ) assert result.status_code == 200