def test_download_document_error(boto3_client_mock, pg_connect_mock, db_config,
                                 event, caplog):
    s3_mock = MagicMock()
    s3_mock.download_file.side_effect = Exception("Download document error")
    boto3_client_mock.return_value = s3_mock
    lambda_handler(event, None)
    assert all_in(["ERROR", "Download document"], caplog.text)
def test_import_document_success(boto3_client_mock, os_remove_mock,
                                 put_partner_in_db_ids, success_event, rds,
                                 caplog):
    lambda_handler(success_event, None)
    assert all_not_in(["CRITICAL", "ERROR", "WARNING"], caplog.text)
    assert all_in(["INFO", "SUCCESS", "IMPORT_SUCCESS"], caplog.text)
    product_count = get_dummy_product_count(rds)
    assert product_count == 2
def test_non_existing_product_error(boto3_client_mock, os_remove_mock,
                                    put_partner_in_db_ids, success_event, rds,
                                    caplog):
    lambda_handler(success_event, None)
    assert all_in(["ERROR", "Put record in database", "IMPORT_FAILURE"],
                  caplog.text)
    infringement_count = get_dummy_infringement_count(rds)
    assert infringement_count == 0
def test_process_request_success(boto3_client_mock, pg_connect_mock,
                                 os_remove_mock, db_config, success_event,
                                 caplog):
    rds_mock = MagicMock()
    pg_connect_mock.return_value = rds_mock
    lambda_handler(success_event, None)
    assert all_in(["INFO", "SUCCESS", "IMPORT_SUCCESS"], caplog.text)
    rds_mock.commit.assert_called()
    rds_mock.close.assert_called_once()
def test_validate_record_error(
    boto3_client_mock,
    pg_connect_mock,
    os_remove_mock,
    db_config,
    invalid_records_above_threshold_event,
    caplog,
):
    lambda_handler(invalid_records_above_threshold_event, None)
    assert all_in(["ERROR", "Validate record"], caplog.text)
def test_put_record_in_db_error(boto3_client_mock, pg_connect_mock,
                                os_remove_mock, db_config, success_event,
                                caplog):
    rds_mock = MagicMock()
    pg_connect_mock.return_value = rds_mock
    rds_mock.cursor.side_effect = Exception("Put record in database error")
    lambda_handler(success_event, None)
    assert all_in(["ERROR", "Put record in database"], caplog.text)
    rds_mock.rollback.assert_called()
    rds_mock.close.assert_called_once()
def test_process_request_with_invalid_records_above_threshold_error(
    boto3_client_mock,
    pg_connect_mock,
    os_remove_mock,
    db_config,
    invalid_records_above_threshold_event,
    caplog,
):
    lambda_handler(invalid_records_above_threshold_event, None)
    assert all_in(["ERROR", "IMPORT_FAILURE"], caplog.text)
def test_parse_empty_document_error(
    boto3_client_mock,
    pg_connect_mock,
    os_remove_mock,
    db_config,
    empty_document_event,
    caplog,
):
    lambda_handler(empty_document_event, None)
    assert all_in(["WARNING", "Empty document", "EMPTY_DOCUMENT"], caplog.text)
def test_process_request_with_invalid_records_below_threshold_success(
    boto3_client_mock,
    pg_connect_mock,
    os_remove_mock,
    db_config,
    invalid_records_below_threshold_event,
    caplog,
):
    lambda_handler(invalid_records_below_threshold_event, None)
    assert all_in(["WARNING", "SUCCESS", "FAILED_RECORDS_BELOW_THRESHOLD"], caplog.text)
def test_move_document_to_processed_error(
    boto3_client_mock, pg_connect_mock, os_remove_mock, db_config, success_event, caplog
):
    s3_mock = MagicMock()
    boto3_client_mock.return_value = s3_mock
    s3_mock.copy_object.side_effect = Exception("Move document to processed error")
    lambda_handler(success_event, None)
    assert all_in(
        ["ERROR", "Move document to processed", "INFO", "SUCCESS", "IMPORT_SUCCESS"],
        caplog.text,
    )
def test_parse_non_existing_document_error(
    boto3_client_mock,
    pg_connect_mock,
    os_remove_mock,
    db_config,
    non_existing_document_event,
    caplog,
):
    lambda_handler(non_existing_document_event, None)
    assert all_in(["ERROR", "Parse document", "No such file or directory"],
                  caplog.text)
def test_import_document_error(
    boto3_client_mock,
    os_remove_mock,
    put_partner_in_db_ids,
    invalid_records_above_threshold_event,
    rds,
    caplog,
):
    lambda_handler(invalid_records_above_threshold_event, None)
    assert all_in(["ERROR", "IMPORT_FAILURE"], caplog.text)
    product_count = get_dummy_product_count(rds)
    assert product_count == 2
def test_parse_invalid_document_error(
    boto3_client_mock,
    pg_connect_mock,
    os_remove_mock,
    db_config,
    invalid_document_event,
    caplog,
):
    lambda_handler(invalid_document_event, None)
    assert all_in(
        ["ERROR", "Parse record", "Expecting value", "IMPORT_FAILURE"],
        caplog.text)
def test_import_document_success(
    boto3_client_mock,
    os_remove_mock,
    put_product_in_db_ids,
    put_pirate_source_in_db_ids,
    success_event,
    rds,
    post_delete_dummy_infringement,
    caplog,
):
    lambda_handler(success_event, None)
    assert all_not_in(["CRITICAL", "ERROR", "WARNING"], caplog.text)
    assert all_in(["INFO", "SUCCESS", "IMPORT_SUCCESS"], caplog.text)
    infringement_count = get_dummy_infringement_count(rds)
    assert infringement_count == 2
def test_create_s3_client_error(boto3_client_mock, db_config, event, caplog):
    lambda_handler(event, None)
    assert all_in(["CRITICAL", "Create S3 client"], caplog.text)
def test_validate_invalid_event_error(db_config, invalid_event, caplog):
    lambda_handler(invalid_event, None)
    assert all_in(["ERROR", "Validate request"], caplog.text)
def test_validate_empty_configuration_error(caplog):
    lambda_handler({}, None)
    assert all_in(["CRITICAL", "Validate configuration"], caplog.text)
def test_non_existing_partner_error(boto3_client_mock, os_remove_mock,
                                    non_existing_partner_event, caplog):
    lambda_handler(non_existing_partner_event, None)
    assert all_in(["ERROR", "Put record in database", "IMPORT_FAILURE"],
                  caplog.text)
def test_validate_empty_event_error(db_config, caplog):
    empty_event = {}
    lambda_handler(empty_event, None)
    assert all_in(["ERROR", "Validate request"], caplog.text)
def test_connect_to_rds_error(boto3_client_mock, pg_connect_mock, db_config,
                              event, caplog):
    lambda_handler(event, None)
    assert all_in(["CRITICAL", "Connect to RDS"], caplog.text)