def should_log_missing_argument_warning(self, validate_schema_mock: MagicMock) -> None:
        # given
        metadata_url = any_s3_url()
        error_message = any_error_message()
        validate_schema_mock.side_effect = ValidationError(error_message)

        payload = {HTTP_METHOD_KEY: "POST", BODY_KEY: {METADATA_URL_KEY: metadata_url}}

        expected_log = dumps({ERROR_KEY: error_message})

        with patch.object(self.logger, "warning") as logger_mock:
            # when
            create_dataset_version(payload)

            # then
            logger_mock.assert_any_call(expected_log)
    def should_log_warning_if_dataset_does_not_exist(self, datasets_model_mock: MagicMock) -> None:
        # given
        dataset_id = any_dataset_id()
        metadata_url = any_s3_url()
        error_message = any_error_message()
        datasets_model_mock.return_value.get.side_effect = DoesNotExist(error_message)

        payload = {METADATA_URL_KEY: metadata_url, DATASET_ID_SHORT_KEY: dataset_id}

        expected_log = dumps({ERROR_KEY: error_message})

        with patch.object(self.logger, "warning") as logger_mock:
            # when
            create_dataset_version(payload)

            # then
            logger_mock.assert_any_call(expected_log)
    def should_log_step_function_state_machine_response(
        self, start_execution_mock: MagicMock
    ) -> None:
        # Given
        start_execution_mock.return_value = step_function_response = {
            "executionArn": "Some Response"
        }

        expected_execution_log = dumps({"response": step_function_response})

        with Dataset() as dataset, patch.object(self.logger, "debug") as logger_mock:
            event = {METADATA_URL_KEY: any_s3_url(), DATASET_ID_SHORT_KEY: dataset.dataset_id}

            # When
            create_dataset_version(event)

            # Then
            logger_mock.assert_any_call(expected_execution_log)
    def should_log_payload(self) -> None:
        # Given
        with patch(
            "backend.dataset_versions.create.STEP_FUNCTIONS_CLIENT.start_execution"
        ), Dataset() as dataset, patch.object(self.logger, "debug") as logger_mock:
            event = {
                HTTP_METHOD_KEY: "POST",
                BODY_KEY: {
                    METADATA_URL_KEY: any_s3_url(),
                    DATASET_ID_SHORT_KEY: dataset.dataset_id,
                },
            }
            expected_payload_log = dumps({"event": event})

            # When
            create_dataset_version(event)

            # Then
            logger_mock.assert_any_call(expected_payload_log)
def should_return_success_if_dataset_exists(subtests: SubTests) -> None:
    # Given a dataset instance
    now = datetime(2001, 2, 3, hour=4, minute=5, second=6, microsecond=789876, tzinfo=timezone.utc)

    with patch(
        "backend.dataset_versions.create.STEP_FUNCTIONS_CLIENT.start_execution"
    ), Dataset() as dataset:
        body = {
            DATASET_ID_SHORT_KEY: dataset.dataset_id,
            METADATA_URL_KEY: any_s3_url(),
            NOW_KEY: now.isoformat(),
        }

        # When requesting the dataset by ID and type
        response = create_dataset_version(body)
    logger.info("Response: %s", response)

    # Then we should get the dataset in return
    with subtests.test(msg="Status code"):
        assert response[STATUS_CODE_KEY] == HTTPStatus.CREATED

    with subtests.test(msg="ID"):
        assert response[BODY_KEY][VERSION_ID_KEY].startswith("2001-02-03T04-05-06-789Z_")