diff --git a/ecs/crm-datafetch/tests/aws/test_s3.py b/ecs/crm-datafetch/tests/aws/test_s3.py index 1daab1e7..943b1e56 100644 --- a/ecs/crm-datafetch/tests/aws/test_s3.py +++ b/ecs/crm-datafetch/tests/aws/test_s3.py @@ -35,6 +35,22 @@ class TestS3Resource: # Assert assert actual == 'aaaaaaaaaaaaaaa' + def test_raise_get_object(self, s3_test, s3_client, bucket_name): + """ + Cases: + - オブジェクトのキーが存在しない場合エラーになること + Arranges: + - S3をモック化する + Expects: + - オブジェクト取得時にエラーになること + """ + # Arrange + # Act + sut = S3Resource(bucket_name) + with pytest.raises(Exception): + # Assert + sut.get_object('hogehoge/test.txt') + def test_put_object(self, s3_test, s3_client, bucket_name): """ Cases: @@ -52,6 +68,23 @@ class TestS3Resource: assert actual['Body'].read().decode('utf-8') == 'aaaaaaaaaaaaaaa' + def test_raise_put_object(self, s3_client, bucket_name): + """ + Cases: + - バケットが存在しない場合エラーになること + Arranges: + - S3をモック化する + - バケットを作成しない + Expects: + - オブジェクト登録時にエラーになること + """ + # Arrange + # Act + sut = S3Resource(bucket_name) + with pytest.raises(Exception): + # Assert + sut.put_object('hogehoge/test.txt', 'aaaaaaaaaaaaaaa') + def test_copy(self, s3_test, s3_client, bucket_name): """ Cases: @@ -74,7 +107,23 @@ class TestS3Resource: actual = s3_client.get_object(Bucket=for_copy_bucket, Key='test.txt') assert actual['Body'].read() == b'aaaaaaaaaaaaaaa' - def test_init_raise_no_provide_bucket_name(self): + def test_raise_copy(self, s3_client, s3_test, bucket_name): + """ + Cases: + - コピー対象のキーが存在しない場合エラーになること + Arranges: + - S3をモック化する + Expects: + - オブジェクト登録時にエラーになること + """ + # Arrange + # Act + sut = S3Resource(bucket_name) + with pytest.raises(Exception): + # Assert + sut.copy(bucket_name, 'hogehoge/test.txt', 'for_copy_bucket', 'test.txt') + + def test_raise_init_no_provide_bucket_name(self): """ Cases: - バケット名を指定しない場合、例外となること @@ -95,6 +144,7 @@ class TestConfigBucket: Cases: - オブジェクト情報ファイルが取得できること Arranges: + - 環境変数を置き換える - オブジェクト情報ファイルを配置する Expects: - オブジェクト情報ファイルが文字列として取得でき、期待値と一致する @@ -109,6 +159,24 @@ class TestConfigBucket: assert actual == 'aaaaaaaaaaaaaaa' + def test_raise_get_object_info_file(self, s3_test, s3_client, bucket_name, monkeypatch): + """ + Cases: + - オブジェクト情報ファイルが存在しない場合、エラーになること + Arranges: + - s3_testフィクスチャを引数に指定しない + - 環境変数を置き換える + Expects: + - オブジェクト情報ファイルが取得できず、例外が発生する + """ + monkeypatch.setattr('src.aws.s3.CRM_CONFIG_BUCKET', bucket_name) + monkeypatch.setattr('src.aws.s3.OBJECT_INFO_FOLDER', 'crm') + monkeypatch.setattr('src.aws.s3.OBJECT_INFO_FILENAME', 'objects.json') + + sut = ConfigBucket() + with pytest.raises(Exception): + sut.get_object_info_file() + def test_get_last_fetch_datetime_file(self, s3_test, s3_client, bucket_name, monkeypatch): """ Cases: @@ -128,6 +196,23 @@ class TestConfigBucket: assert actual == 'aaaaaaaaaaaaaaa' + def test_raise_get_last_fetch_datetime_file(self, s3_test, s3_client, bucket_name, monkeypatch): + """ + Cases: + - オブジェクト最終更新日時ファイルが存在しない場合、エラーになること + Arranges: + - s3_testフィクスチャを引数に指定しない + - 環境変数を置き換える + Expects: + - オブジェクト最終更新日時ファイルが取得できず、例外が発生する + """ + monkeypatch.setattr('src.aws.s3.CRM_CONFIG_BUCKET', bucket_name) + monkeypatch.setattr('src.aws.s3.LAST_FETCH_DATE_FOLDER', 'crm') + + sut = ConfigBucket() + with pytest.raises(Exception): + sut.get_last_fetch_datetime_file('Object.json') + def test_put_last_fetch_datetime_file(self, s3_test, s3_client, bucket_name, monkeypatch): """ Cases: @@ -147,6 +232,23 @@ class TestConfigBucket: actual = s3_client.get_object(Bucket=bucket_name, Key=f'crm/Object.json') assert actual['Body'].read().decode('utf-8') == 'aaaaaaaaaaaaaaa' + def test_raise_put_last_fetch_datetime_file(self, s3_client, bucket_name, monkeypatch): + """ + Cases: + - オブジェクト最終更新日時ファイルをPUTできない場合、エラーになること + Arranges: + - s3_testフィクスチャを引数に指定しない + - 環境変数を置き換える + Expects: + - オブジェクト最終更新日時ファイルをPUTできず、例外が発生する + """ + monkeypatch.setattr('src.aws.s3.CRM_CONFIG_BUCKET', bucket_name) + monkeypatch.setattr('src.aws.s3.LAST_FETCH_DATE_FOLDER', 'crm') + + sut = ConfigBucket() + with pytest.raises(Exception): + sut.put_last_fetch_datetime_file('Object.json', 'aaaaaaaaaaaaaaa') + def test_config_bucket_str(self, s3_test, s3_client, bucket_name, monkeypatch): """ Cases: @@ -184,6 +286,23 @@ class TestDataBucket: actual = s3_client.get_object(Bucket=bucket_name, Key=f'crm/target/test.csv') assert actual['Body'].read().decode('utf-8') == 'test,test,test' + def test_raise_put_csv(self, s3_client, bucket_name, monkeypatch): + """ + Cases: + - CSVファイルをPUTできず、エラーになること + Arranges: + - s3_testフィクスチャを引数に指定しない + - 環境変数を置き換える + Expects: + - CSVファイルをPUTできず、例外が発生する + """ + monkeypatch.setattr('src.aws.s3.IMPORT_DATA_BUCKET', bucket_name) + monkeypatch.setattr('src.aws.s3.CRM_IMPORT_DATA_FOLDER', 'crm/target') + + sut = DataBucket() + with pytest.raises(Exception): + sut.put_csv('test.csv', 'test,test,test') + def test_put_csv_from(self, s3_test, s3_client, bucket_name, monkeypatch): """ Cases: @@ -209,6 +328,23 @@ class TestDataBucket: assert actual['Body'].read().decode('utf-8') == 'test,test,test' + def test_raise_put_csv_from(self, s3_client, bucket_name, monkeypatch): + """ + Cases: + - 他のバケットからCSVファイルをコピーできず、エラーになること + Arranges: + - s3_testフィクスチャを引数に指定しない + - 環境変数を置き換える + Expects: + - コピーできず、例外が発生する + """ + monkeypatch.setattr('src.aws.s3.IMPORT_DATA_BUCKET', 'for_copy_bucket') + monkeypatch.setattr('src.aws.s3.CRM_IMPORT_DATA_FOLDER', 'crm/target') + + sut = DataBucket() + with pytest.raises(Exception): + sut.put_csv_from(bucket_name, 'hogehoge/test.csv') + def test_data_bucket_str(self, s3_test, s3_client, bucket_name, monkeypatch): """ Cases: @@ -246,6 +382,23 @@ class TestBackupBucket: actual = s3_client.get_object(Bucket=bucket_name, Key=f'data_import/test.csv') assert actual['Body'].read().decode('utf-8') == 'test,test,test' + def test_raise_put_csv_from(self, s3_client, bucket_name, monkeypatch): + """ + Cases: + - CSVファイルをPUTできず、エラーになること + Arranges: + - s3_testフィクスチャを引数に指定しない + - 環境変数を置き換える + Expects: + - CSVファイルがPUTできず、例外が発生する + """ + monkeypatch.setattr('src.aws.s3.IMPORT_DATA_BUCKET', bucket_name) + monkeypatch.setattr('src.aws.s3.CRM_IMPORT_DATA_FOLDER', 'crm/target') + + sut = BackupBucket() + with pytest.raises(Exception): + sut.put_csv('test.csv', 'test,test,test') + def test_put_response_json(self, s3_test, s3_client, bucket_name, monkeypatch): """ Cases: @@ -265,10 +418,27 @@ class TestBackupBucket: actual = s3_client.get_object(Bucket=bucket_name, Key=f'response_json/test.json') assert actual['Body'].read().decode('utf-8') == '{"test": "test"}' + def test_raise_response_json(self, s3_client, bucket_name, monkeypatch): + """ + Cases: + - JSONファイルをPUTできず、エラーになること + Arranges: + - s3_testフィクスチャを引数に指定しない + - 環境変数を置き換える + Expects: + - JSONファイルをPUTできず、例外が発生する + """ + monkeypatch.setattr('src.aws.s3.CRM_BACKUP_BUCKET', bucket_name) + monkeypatch.setattr('src.aws.s3.RESPONSE_JSON_BACKUP_FOLDER', 'response_json') + + sut = BackupBucket() + with pytest.raises(Exception): + sut.put_response_json('test.json', {"test": "test"}) + def test_put_result_json(self, s3_test, s3_client, bucket_name, monkeypatch): """ Cases: - - JSONファイルをPUTできること + - 結果のJSONファイルをPUTできること Arranges: - S3をモック化する - 環境変数をテスト用の値に置き換える @@ -284,6 +454,23 @@ class TestBackupBucket: actual = s3_client.get_object(Bucket=bucket_name, Key=f'data_import/result.json') assert actual['Body'].read().decode('utf-8') == '{"test": "test"}' + def test_raise_result_json(self, s3_client, bucket_name, monkeypatch): + """ + Cases: + - 結果のJSONファイルをPUTできず、エラーになること + Arranges: + - s3_testフィクスチャを引数に指定しない + - 環境変数を置き換える + Expects: + - 結果のJSONファイルをPUTできず、例外が発生する + """ + monkeypatch.setattr('src.aws.s3.CRM_BACKUP_BUCKET', bucket_name) + monkeypatch.setattr('src.aws.s3.PROCESS_RESULT_FOLDER', 'data_import') + + sut = BackupBucket() + with pytest.raises(Exception): + sut.put_result_json('result.json', {"test": "test"}) + def test_backup_bucket_str(self, s3_test, s3_client, bucket_name, monkeypatch): """ Cases: