Repository: great-expectations/great_expectations

Issue:
Use cleaner solution for non-truncating division in python 2
Prefer `from __future__ import division` to `1.*x/y`


Discussion:
Done inline during improve_partitions push.

Resolving patch:
diff --git a/great_expectations/__init__.py b/great_expectations/__init__.py
--- a/great_expectations/__init__.py
+++ b/great_expectations/__init__.py
@@ -4,6 +4,7 @@
 __version__ = get_versions()["version"]  # isort:skip
 
 from great_expectations.data_context.migrator.cloud_migrator import CloudMigrator
+from great_expectations.expectations.registry import register_core_expectations
 
 del get_versions  # isort:skip
 
@@ -23,6 +24,8 @@
     validate,
 )
 
+register_core_expectations()
+
 # from great_expectations.expectations.core import *
 # from great_expectations.expectations.metrics import *
 
diff --git a/great_expectations/checkpoint/util.py b/great_expectations/checkpoint/util.py
--- a/great_expectations/checkpoint/util.py
+++ b/great_expectations/checkpoint/util.py
@@ -362,8 +362,14 @@ def substitute_runtime_config(source_config: dict, runtime_kwargs: dict) -> dict
         batch_request_from_runtime_kwargs = get_batch_request_as_dict(
             batch_request=batch_request_from_runtime_kwargs
         )
+
+        # If "batch_request" has Fluent Datasource form, "options" must be overwritten for DataAsset type compatibility.
+        updated_batch_request = copy.deepcopy(batch_request)
+        if batch_request_from_runtime_kwargs and "options" in updated_batch_request:
+            updated_batch_request["options"] = {}
+
         updated_batch_request = nested_update(
-            batch_request,
+            updated_batch_request,
             batch_request_from_runtime_kwargs,
             dedup=True,
         )


Test patch:
diff --git a/tests/checkpoint/conftest.py b/tests/checkpoint/conftest.py
--- a/tests/checkpoint/conftest.py
+++ b/tests/checkpoint/conftest.py
@@ -53,7 +53,38 @@ def titanic_data_context_with_fluent_pandas_datasources_stats_enabled_and_expect
     )
     suite.add_expectation(expectation, send_usage_event=False)
     context.update_expectation_suite(expectation_suite=suite)
+    # noinspection PyProtectedMember
+    context._save_project_config()
+
+    return context
+
+
+@pytest.fixture
+def titanic_data_context_with_fluent_pandas_and_spark_datasources_stats_enabled_and_expectation_suite_with_one_expectation(
+    titanic_data_context_with_fluent_pandas_and_spark_datasources_with_checkpoints_v1_with_empty_store_stats_enabled,
+):
+    context = titanic_data_context_with_fluent_pandas_and_spark_datasources_with_checkpoints_v1_with_empty_store_stats_enabled
+
+    datasource_name = "my_pandas_filesystem_datasource"
+    datasource = context.get_datasource(datasource_name=datasource_name)
+
+    batching_regex = r"^Titanic_1911\.csv"
+    glob_directive = "*.csv"
+    # noinspection PyUnusedLocal
+    data_asset = datasource.add_csv_asset(
+        name="Titanic_1911",
+        batching_regex=batching_regex,
+        glob_directive=glob_directive,
+    )
 
+    # create expectation suite
+    suite = context.add_expectation_suite("my_expectation_suite")
+    expectation = ExpectationConfiguration(
+        expectation_type="expect_column_values_to_be_between",
+        kwargs={"column": "col1", "min_value": 1, "max_value": 2},
+    )
+    suite.add_expectation(expectation, send_usage_event=False)
+    context.update_expectation_suite(expectation_suite=suite)
     # noinspection PyProtectedMember
     context._save_project_config()
 
diff --git a/tests/checkpoint/test_checkpoint.py b/tests/checkpoint/test_checkpoint.py
--- a/tests/checkpoint/test_checkpoint.py
+++ b/tests/checkpoint/test_checkpoint.py
@@ -1861,7 +1861,6 @@ def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_
     mock_emit,
     titanic_pandas_data_context_with_v013_datasource_with_checkpoints_v1_with_empty_store_stats_enabled,
     common_action_list,
-    sa,
 ):
     context: FileDataContext = titanic_pandas_data_context_with_v013_datasource_with_checkpoints_v1_with_empty_store_stats_enabled
     test_df: pd.DataFrame = pd.DataFrame(data={"col1": [1, 2], "col2": [3, 4]})
@@ -2347,7 +2346,6 @@ def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_
         }
     )
 
-    # add checkpoint config
     checkpoint: Checkpoint = Checkpoint(
         name="my_checkpoint",
         data_context=context,
@@ -2401,7 +2399,6 @@ def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_
         }
     )
 
-    # add checkpoint config
     checkpoint: Checkpoint = Checkpoint(
         name="my_checkpoint",
         data_context=context,
@@ -2432,7 +2429,6 @@ def test_newstyle_checkpoint_raise_error_when_run_when_missing_batch_request_and
     # create expectation suite
     context.add_expectation_suite("my_expectation_suite")
 
-    # add checkpoint config
     checkpoint: Checkpoint = Checkpoint(
         name="my_checkpoint",
         data_context=context,
@@ -2473,7 +2469,6 @@ def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_
         }
     )
 
-    # add checkpoint config
     checkpoint: Checkpoint = Checkpoint(
         name="my_checkpoint",
         data_context=context,
@@ -2491,7 +2486,7 @@ def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_
 
 
 @pytest.mark.integration
-def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_run_runtime_batch_request_batch_data_in_top_level_batch_request_pandas(
+def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_run_runtime_batch_request_batch_data_in_top_level_batch_request_pandasdf(
     data_context_with_datasource_pandas_engine,
     common_action_list,
 ):
@@ -2512,7 +2507,6 @@ def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_
         }
     )
 
-    # add checkpoint config
     checkpoint: Checkpoint = Checkpoint(
         name="my_checkpoint",
         data_context=context,
@@ -2529,7 +2523,7 @@ def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_
 
 
 @pytest.mark.integration
-def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_run_runtime_batch_request_batch_data_in_top_level_batch_request_spark(
+def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_run_runtime_batch_request_batch_data_in_top_level_batch_request_sparkdf(
     data_context_with_datasource_spark_engine,
     common_action_list,
     spark_session,
@@ -2552,7 +2546,6 @@ def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_
         }
     )
 
-    # add checkpoint config
     checkpoint: Checkpoint = Checkpoint(
         name="my_checkpoint",
         data_context=context,
@@ -2599,7 +2592,6 @@ def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_
         }
     )
 
-    # add checkpoint config
     checkpoint: Checkpoint = Checkpoint(
         name="my_checkpoint",
         data_context=context,
@@ -2647,7 +2639,6 @@ def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_
         }
     )
 
-    # add checkpoint config
     checkpoint: Checkpoint = Checkpoint(
         name="my_checkpoint",
         data_context=context,
@@ -3247,84 +3238,6 @@ def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_
         }
     )
 
-    # add checkpoint config
-    checkpoint: Checkpoint = Checkpoint(
-        name="my_checkpoint",
-        data_context=context,
-        config_version=1,
-        run_name_template="%Y-%M-foo-bar-template",
-        expectation_suite_name="my_expectation_suite",
-        action_list=common_action_list,
-    )
-
-    result = checkpoint.run(batch_request=runtime_batch_request)
-
-    assert len(context.validations_store.list_keys()) == 1
-    assert result["success"]
-
-
-@pytest.mark.integration
-def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_run_runtime_batch_request_batch_data_in_checkpoint_run_pandas(
-    data_context_with_datasource_pandas_engine,
-    common_action_list,
-):
-    context: FileDataContext = data_context_with_datasource_pandas_engine
-    test_df: pd.DataFrame = pd.DataFrame(data={"col1": [1, 2], "col2": [3, 4]})
-
-    # create expectation suite
-    context.add_expectation_suite("my_expectation_suite")
-
-    # RuntimeBatchRequest with a DataFrame
-    runtime_batch_request: RuntimeBatchRequest = RuntimeBatchRequest(
-        **{
-            "datasource_name": "my_datasource",
-            "data_connector_name": "default_runtime_data_connector_name",
-            "data_asset_name": "default_data_asset_name",
-            "batch_identifiers": {"default_identifier_name": "test_identifier"},
-            "runtime_parameters": {"batch_data": test_df},
-        }
-    )
-
-    # add checkpoint config
-    checkpoint: Checkpoint = Checkpoint(
-        name="my_checkpoint",
-        data_context=context,
-        config_version=1,
-        run_name_template="%Y-%M-foo-bar-template",
-        expectation_suite_name="my_expectation_suite",
-        action_list=common_action_list,
-    )
-
-    result = checkpoint.run(batch_request=runtime_batch_request)
-
-    assert len(context.validations_store.list_keys()) == 1
-    assert result["success"]
-
-
-@pytest.mark.integration
-def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_run_runtime_batch_request_batch_data_in_checkpoint_run_spark(
-    data_context_with_datasource_spark_engine,
-    common_action_list,
-):
-    context: FileDataContext = data_context_with_datasource_spark_engine
-    pandas_df: pd.DataFrame = pd.DataFrame(data={"col1": [1, 2], "col2": [3, 4]})
-    test_df = get_or_create_spark_application().createDataFrame(pandas_df)
-
-    # create expectation suite
-    context.add_expectation_suite("my_expectation_suite")
-
-    # RuntimeBatchRequest with a DataFrame
-    runtime_batch_request: RuntimeBatchRequest = RuntimeBatchRequest(
-        **{
-            "datasource_name": "my_datasource",
-            "data_connector_name": "default_runtime_data_connector_name",
-            "data_asset_name": "default_data_asset_name",
-            "batch_identifiers": {"default_identifier_name": "test_identifier"},
-            "runtime_parameters": {"batch_data": test_df},
-        }
-    )
-
-    # add checkpoint config
     checkpoint: Checkpoint = Checkpoint(
         name="my_checkpoint",
         data_context=context,
@@ -3364,84 +3277,6 @@ def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_
         }
     )
 
-    # add checkpoint config
-    checkpoint: Checkpoint = Checkpoint(
-        name="my_checkpoint",
-        data_context=context,
-        config_version=1,
-        run_name_template="%Y-%M-foo-bar-template",
-        expectation_suite_name="my_expectation_suite",
-        action_list=common_action_list,
-    )
-
-    result = checkpoint.run(validations=[{"batch_request": runtime_batch_request}])
-
-    assert len(context.validations_store.list_keys()) == 1
-    assert result["success"]
-
-
-@pytest.mark.integration
-def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_run_runtime_validations_batch_data_in_checkpoint_run_pandas(
-    data_context_with_datasource_pandas_engine,
-    common_action_list,
-):
-    context: FileDataContext = data_context_with_datasource_pandas_engine
-    test_df: pd.DataFrame = pd.DataFrame(data={"col1": [1, 2], "col2": [3, 4]})
-
-    # create expectation suite
-    context.add_expectation_suite("my_expectation_suite")
-
-    # RuntimeBatchRequest with a DataFrame
-    runtime_batch_request: RuntimeBatchRequest = RuntimeBatchRequest(
-        **{
-            "datasource_name": "my_datasource",
-            "data_connector_name": "default_runtime_data_connector_name",
-            "data_asset_name": "default_data_asset_name",
-            "batch_identifiers": {"default_identifier_name": "test_identifier"},
-            "runtime_parameters": {"batch_data": test_df},
-        }
-    )
-
-    # add checkpoint config
-    checkpoint: Checkpoint = Checkpoint(
-        name="my_checkpoint",
-        data_context=context,
-        config_version=1,
-        run_name_template="%Y-%M-foo-bar-template",
-        expectation_suite_name="my_expectation_suite",
-        action_list=common_action_list,
-    )
-
-    result = checkpoint.run(validations=[{"batch_request": runtime_batch_request}])
-
-    assert len(context.validations_store.list_keys()) == 1
-    assert result["success"]
-
-
-@pytest.mark.integration
-def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_run_runtime_validations_batch_data_in_checkpoint_run_spark(
-    data_context_with_datasource_spark_engine,
-    common_action_list,
-):
-    context: FileDataContext = data_context_with_datasource_spark_engine
-    pandas_df: pd.DataFrame = pd.DataFrame(data={"col1": [1, 2], "col2": [3, 4]})
-    test_df = get_or_create_spark_application().createDataFrame(pandas_df)
-
-    # create expectation suite
-    context.add_expectation_suite("my_expectation_suite")
-
-    # RuntimeBatchRequest with a DataFrame
-    runtime_batch_request: RuntimeBatchRequest = RuntimeBatchRequest(
-        **{
-            "datasource_name": "my_datasource",
-            "data_connector_name": "default_runtime_data_connector_name",
-            "data_asset_name": "default_data_asset_name",
-            "batch_identifiers": {"default_identifier_name": "test_identifier"},
-            "runtime_parameters": {"batch_data": test_df},
-        }
-    )
-
-    # add checkpoint config
     checkpoint: Checkpoint = Checkpoint(
         name="my_checkpoint",
         data_context=context,
@@ -3488,7 +3323,6 @@ def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_
         }
     )
 
-    # add checkpoint config
     checkpoint: Checkpoint = Checkpoint(
         name="my_checkpoint",
         data_context=context,
@@ -3535,7 +3369,6 @@ def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_
         }
     )
 
-    # add checkpoint config
     checkpoint: Checkpoint = Checkpoint(
         name="my_checkpoint",
         data_context=context,
@@ -3581,7 +3414,6 @@ def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_
         }
     )
 
-    # add checkpoint config
     checkpoint: Checkpoint = Checkpoint(
         name="my_checkpoint",
         data_context=context,
@@ -3628,7 +3460,6 @@ def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_
         }
     )
 
-    # add checkpoint config
     checkpoint: Checkpoint = Checkpoint(
         name="my_checkpoint",
         data_context=context,
@@ -3689,7 +3520,7 @@ def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_
 
 
 @pytest.mark.integration
-def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_run_runtime_batch_request_batch_data_in_context_run_checkpoint_pandas(
+def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_run_runtime_batch_request_batch_data_in_context_run_checkpoint_pandasdf(
     data_context_with_datasource_pandas_engine,
     common_action_list,
 ):
@@ -3731,7 +3562,7 @@ def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_
 
 
 @pytest.mark.integration
-def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_run_runtime_batch_request_batch_data_in_context_run_checkpoint_spark(
+def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_run_runtime_batch_request_batch_data_in_context_run_checkpoint_sparkdf(
     data_context_with_datasource_spark_engine,
     common_action_list,
 ):
@@ -3819,7 +3650,7 @@ def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_
 
 
 @pytest.mark.integration
-def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_run_runtime_validations_batch_data_in_context_run_checkpoint_pandas(
+def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_run_runtime_validations_batch_data_in_context_run_checkpoint_pandasdf(
     data_context_with_datasource_pandas_engine,
     common_action_list,
 ):
@@ -3862,7 +3693,7 @@ def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_
 
 
 @pytest.mark.integration
-def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_run_runtime_validations_batch_data_in_context_run_checkpoint_spark(
+def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_run_runtime_validations_batch_data_in_context_run_checkpoint_sparkdf(
     data_context_with_datasource_spark_engine,
     common_action_list,
 ):
@@ -4220,7 +4051,6 @@ def test_newstyle_checkpoint_instantiates_and_produces_a_runtime_parameters_erro
 def test_newstyle_checkpoint_instantiates_and_produces_a_correct_validation_result_batch_request_in_checkpoint_yml_and_checkpoint_run(
     titanic_pandas_data_context_stats_enabled_and_expectation_suite_with_one_expectation,
     common_action_list,
-    sa,
 ):
     context: FileDataContext = titanic_pandas_data_context_stats_enabled_and_expectation_suite_with_one_expectation
     test_df: pd.DataFrame = pd.DataFrame(data={"col1": [1, 2], "col2": [3, 4]})
@@ -4295,7 +4125,6 @@ def test_newstyle_checkpoint_instantiates_and_produces_a_correct_validation_resu
 def test_newstyle_checkpoint_instantiates_and_produces_a_correct_validation_result_validations_in_checkpoint_yml_and_checkpoint_run(
     titanic_pandas_data_context_stats_enabled_and_expectation_suite_with_one_expectation,
     common_action_list,
-    sa,
 ):
     context: FileDataContext = titanic_pandas_data_context_stats_enabled_and_expectation_suite_with_one_expectation
     test_df: pd.DataFrame = pd.DataFrame(data={"col1": [1, 2], "col2": [3, 4]})
@@ -4384,7 +4213,6 @@ def test_newstyle_checkpoint_instantiates_and_produces_a_correct_validation_resu
 def test_newstyle_checkpoint_instantiates_and_produces_a_correct_validation_result_batch_request_in_checkpoint_yml_and_context_run_checkpoint(
     titanic_pandas_data_context_stats_enabled_and_expectation_suite_with_one_expectation,
     common_action_list,
-    sa,
 ):
     context: FileDataContext = titanic_pandas_data_context_stats_enabled_and_expectation_suite_with_one_expectation
     test_df: pd.DataFrame = pd.DataFrame(data={"col1": [1, 2], "col2": [3, 4]})
@@ -4460,12 +4288,10 @@ def test_newstyle_checkpoint_instantiates_and_produces_a_correct_validation_resu
 def test_newstyle_checkpoint_instantiates_and_produces_a_correct_validation_result_validations_in_checkpoint_yml_and_context_run_checkpoint(
     titanic_pandas_data_context_stats_enabled_and_expectation_suite_with_one_expectation,
     common_action_list,
-    sa,
 ):
     context: FileDataContext = titanic_pandas_data_context_stats_enabled_and_expectation_suite_with_one_expectation
     test_df: pd.DataFrame = pd.DataFrame(data={"col1": [1, 2], "col2": [3, 4]})
 
-    # add checkpoint config
     batch_request: dict = {
         "datasource_name": "my_datasource",
         "data_connector_name": "my_basic_data_connector",
@@ -4632,7 +4458,6 @@ def test_newstyle_checkpoint_does_not_pass_dataframes_via_validations_into_check
 def test_newstyle_checkpoint_result_can_be_pickled(
     titanic_pandas_data_context_stats_enabled_and_expectation_suite_with_one_expectation,
     common_action_list,
-    sa,
 ):
     context: FileDataContext = titanic_pandas_data_context_stats_enabled_and_expectation_suite_with_one_expectation
 
@@ -4666,7 +4491,6 @@ def test_newstyle_checkpoint_result_can_be_pickled(
 def test_newstyle_checkpoint_result_validations_include_rendered_content(
     titanic_pandas_data_context_stats_enabled_and_expectation_suite_with_one_expectation,
     common_action_list,
-    sa,
 ):
     context: FileDataContext = titanic_pandas_data_context_stats_enabled_and_expectation_suite_with_one_expectation
 
@@ -4714,7 +4538,6 @@ def test_newstyle_checkpoint_result_validations_include_rendered_content(
 def test_newstyle_checkpoint_result_validations_include_rendered_content_data_context_variable(
     titanic_pandas_data_context_stats_enabled_and_expectation_suite_with_one_expectation,
     common_action_list,
-    sa,
 ):
     context: FileDataContext = titanic_pandas_data_context_stats_enabled_and_expectation_suite_with_one_expectation
 
@@ -4876,7 +4699,6 @@ def test_checkpoint_run_adds_validation_ids_to_expectation_suite_validation_resu
     common_action_list,
     checkpoint_config: CheckpointConfig,
     expected_validation_id: str,
-    sa,
 ) -> None:
     context: FileDataContext = titanic_pandas_data_context_stats_enabled_and_expectation_suite_with_one_expectation
 
diff --git a/tests/checkpoint/test_checkpoint_with_fluent_datasources.py b/tests/checkpoint/test_checkpoint_with_fluent_datasources.py
--- a/tests/checkpoint/test_checkpoint_with_fluent_datasources.py
+++ b/tests/checkpoint/test_checkpoint_with_fluent_datasources.py
@@ -1,3 +1,4 @@
+import copy
 import logging
 import pickle
 import unittest
@@ -7,10 +8,12 @@
 import pytest
 
 import great_expectations as gx
-import great_expectations.exceptions as gx_exceptions
 from great_expectations.checkpoint import Checkpoint
 from great_expectations.checkpoint.types.checkpoint_result import CheckpointResult
-from great_expectations.core import ExpectationSuiteValidationResult
+from great_expectations.core import (
+    ExpectationSuiteValidationResult,
+    ExpectationConfiguration,
+)
 from great_expectations.datasource.fluent.interfaces import (
     BatchRequest as FluentBatchRequest,
 )
@@ -51,6 +54,14 @@ def batch_request_as_dict() -> Dict[str, str]:
     }
 
 
+@pytest.fixture
+def fluent_batch_request(batch_request_as_dict: Dict[str, str]) -> FluentBatchRequest:
+    return FluentBatchRequest(
+        datasource_name=batch_request_as_dict["datasource_name"],
+        data_asset_name=batch_request_as_dict["data_asset_name"],
+    )
+
+
 @pytest.fixture
 def common_action_list() -> List[dict]:
     return [
@@ -514,15 +525,6 @@ def test_checkpoint_configuration_template_parsing_and_usage_test_yaml_config(
     data_context.add_checkpoint(**yaml.load(yaml_config))
     assert len(data_context.list_checkpoints()) == 1
 
-    with pytest.raises(
-        gx_exceptions.DataContextError,
-        match=r'Checkpoint "my_base_checkpoint" must be called with a validator or contain either a batch_request or validations.',
-    ):
-        # noinspection PyUnusedLocal
-        result: CheckpointResult = data_context.run_checkpoint(
-            checkpoint_name=checkpoint.name,
-        )
-
     data_context.add_expectation_suite(expectation_suite_name="users.delivery")
 
     result = data_context.run_checkpoint(
@@ -651,13 +653,6 @@ def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_
     )
     checkpoint: Checkpoint = data_context.get_checkpoint(checkpoint_config.name)
 
-    with pytest.raises(
-        gx_exceptions.DataContextError, match=r"expectation_suite .* not found"
-    ):
-        checkpoint.run()
-
-    assert len(data_context.validations_store.list_keys()) == 0
-
     data_context.add_expectation_suite("my_expectation_suite")
     result = checkpoint.run()
 
@@ -727,10 +722,10 @@ def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_with_
 def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_run_with_validator_specified_in_constructor(
     titanic_data_context_with_fluent_pandas_datasources_with_checkpoints_v1_with_empty_store_stats_enabled,
     common_action_list,
-    batch_request_as_dict,
+    fluent_batch_request,
 ):
     data_context: FileDataContext = titanic_data_context_with_fluent_pandas_datasources_with_checkpoints_v1_with_empty_store_stats_enabled
-    batch_request: FluentBatchRequest = FluentBatchRequest(**batch_request_as_dict)
+    batch_request: FluentBatchRequest = fluent_batch_request
     data_context.add_expectation_suite("my_expectation_suite")
     validator: Validator = data_context.get_validator(
         batch_request=batch_request,
@@ -756,10 +751,10 @@ def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_
 def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_run_with_validator_specified_in_run(
     titanic_data_context_with_fluent_pandas_datasources_with_checkpoints_v1_with_empty_store_stats_enabled,
     common_action_list,
-    batch_request_as_dict,
+    fluent_batch_request,
 ):
     data_context: FileDataContext = titanic_data_context_with_fluent_pandas_datasources_with_checkpoints_v1_with_empty_store_stats_enabled
-    batch_request: FluentBatchRequest = FluentBatchRequest(**batch_request_as_dict)
+    batch_request: FluentBatchRequest = fluent_batch_request
     data_context.add_expectation_suite("my_expectation_suite")
     validator: Validator = data_context.get_validator(
         batch_request=batch_request,
@@ -1037,3 +1032,1065 @@ def test_checkpoint_run_adds_validation_ids_to_expectation_suite_validation_resu
 
     actual_validation_id: Optional[str] = validation_result.meta["validation_id"]
     assert expected_validation_id == actual_validation_id
+
+
+@pytest.mark.integration
+def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_run_batch_request_pandasdf(
+    titanic_data_context_with_fluent_pandas_datasources_with_checkpoints_v1_with_empty_store_stats_enabled,
+    common_action_list,
+):
+    context: FileDataContext = titanic_data_context_with_fluent_pandas_datasources_with_checkpoints_v1_with_empty_store_stats_enabled
+
+    batch_request = FluentBatchRequest(
+        datasource_name="my_pandas_dataframes_datasource",
+        data_asset_name="my_dataframe_asset",
+    )
+    checkpoint: Checkpoint = Checkpoint(
+        name="my_checkpoint",
+        data_context=context,
+        config_version=1,
+        run_name_template="%Y-%M-foo-bar-template",
+        expectation_suite_name="my_expectation_suite",
+        action_list=common_action_list,
+    )
+
+    context.add_expectation_suite("my_expectation_suite")
+    result = checkpoint.run(validations=[{"batch_request": batch_request}])
+
+    assert len(context.validations_store.list_keys()) == 1
+    assert result["success"]
+
+
+@pytest.mark.integration
+def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_run_batch_request_sparkdf(
+    titanic_data_context_with_fluent_pandas_and_spark_datasources_with_checkpoints_v1_with_empty_store_stats_enabled,
+    common_action_list,
+):
+    context: FileDataContext = titanic_data_context_with_fluent_pandas_and_spark_datasources_with_checkpoints_v1_with_empty_store_stats_enabled
+
+    batch_request = FluentBatchRequest(
+        datasource_name="my_spark_dataframes_datasource",
+        data_asset_name="my_dataframe_asset",
+    )
+    checkpoint: Checkpoint = Checkpoint(
+        name="my_checkpoint",
+        data_context=context,
+        config_version=1,
+        run_name_template="%Y-%M-foo-bar-template",
+        expectation_suite_name="my_expectation_suite",
+        action_list=common_action_list,
+    )
+
+    context.add_expectation_suite("my_expectation_suite")
+    result = checkpoint.run(validations=[{"batch_request": batch_request}])
+
+    assert len(context.validations_store.list_keys()) == 1
+    assert result["success"]
+
+
+@pytest.mark.integration
+@mock.patch(
+    "great_expectations.core.usage_statistics.usage_statistics.UsageStatisticsHandler.emit"
+)
+@pytest.mark.slow  # 1.31s
+def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_run_batch_request_multi_validation(
+    mock_emit,
+    titanic_data_context_with_fluent_pandas_and_spark_datasources_with_checkpoints_v1_with_empty_store_stats_enabled,
+    common_action_list,
+    batch_request_as_dict,
+):
+    context: FileDataContext = titanic_data_context_with_fluent_pandas_and_spark_datasources_with_checkpoints_v1_with_empty_store_stats_enabled
+
+    batch_request_0: dict = copy.deepcopy(batch_request_as_dict)
+
+    batch_request_1: dict = {
+        "datasource_name": "my_pandas_dataframes_datasource",
+        "data_asset_name": "my_dataframe_asset",
+    }
+
+    batch_request_2: dict = {
+        "datasource_name": "my_spark_filesystem_datasource",
+        "data_asset_name": "users",
+    }
+
+    batch_request_3: dict = {
+        "datasource_name": "my_spark_dataframes_datasource",
+        "data_asset_name": "my_dataframe_asset",
+    }
+
+    checkpoint: Checkpoint = Checkpoint(
+        name="my_checkpoint",
+        data_context=context,
+        config_version=1,
+        run_name_template="%Y-%M-foo-bar-template",
+        expectation_suite_name="my_expectation_suite",
+        action_list=common_action_list,
+    )
+
+    context.add_expectation_suite("my_expectation_suite")
+    # noinspection PyUnusedLocal
+    result = checkpoint.run(
+        validations=[
+            {"batch_request": batch_request_0},
+            {"batch_request": batch_request_1},
+            {"batch_request": batch_request_2},
+            {"batch_request": batch_request_3},
+        ]
+    )
+
+    assert len(context.validations_store.list_keys()) == 4
+    assert result["success"]
+
+    assert mock_emit.call_count == 13
+
+    # noinspection PyUnresolvedReferences
+    actual_events: List[unittest.mock._Call] = mock_emit.call_args_list
+
+    # Since there are two validations, confirming there should be two "data_asset.validate" events
+    num_data_asset_validate_events = 0
+    for event in actual_events:
+        if event[0][0]["event"] == "data_asset.validate":
+            num_data_asset_validate_events += 1
+    assert num_data_asset_validate_events == 4
+
+
+@pytest.mark.integration
+def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_run_batch_request_batch_data_in_top_level_batch_request_pandasdf(
+    titanic_data_context_with_fluent_pandas_datasources_with_checkpoints_v1_with_empty_store_stats_enabled,
+    common_action_list,
+):
+    context: FileDataContext = titanic_data_context_with_fluent_pandas_datasources_with_checkpoints_v1_with_empty_store_stats_enabled
+
+    # create expectation suite
+    context.add_expectation_suite("my_expectation_suite")
+
+    batch_request: dict = {
+        "datasource_name": "my_pandas_dataframes_datasource",
+        "data_asset_name": "my_dataframe_asset",
+    }
+
+    checkpoint: Checkpoint = Checkpoint(
+        name="my_checkpoint",
+        data_context=context,
+        config_version=1,
+        run_name_template="%Y-%M-foo-bar-template",
+        expectation_suite_name="my_expectation_suite",
+        action_list=common_action_list,
+    )
+
+    result = checkpoint.run(batch_request=batch_request)
+
+    assert len(context.validations_store.list_keys()) == 1
+    assert result["success"]
+
+
+@pytest.mark.integration
+def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_run_batch_request_batch_data_in_top_level_batch_request_sparkdf(
+    titanic_data_context_with_fluent_pandas_and_spark_datasources_with_checkpoints_v1_with_empty_store_stats_enabled,
+    common_action_list,
+):
+    context: FileDataContext = titanic_data_context_with_fluent_pandas_and_spark_datasources_with_checkpoints_v1_with_empty_store_stats_enabled
+
+    # create expectation suite
+    context.add_expectation_suite("my_expectation_suite")
+
+    batch_request: dict = {
+        "datasource_name": "my_spark_dataframes_datasource",
+        "data_asset_name": "my_dataframe_asset",
+    }
+
+    checkpoint: Checkpoint = Checkpoint(
+        name="my_checkpoint",
+        data_context=context,
+        config_version=1,
+        run_name_template="%Y-%M-foo-bar-template",
+        expectation_suite_name="my_expectation_suite",
+        action_list=common_action_list,
+    )
+
+    result = checkpoint.run(batch_request=batch_request)
+
+    assert len(context.validations_store.list_keys()) == 1
+    assert result["success"]
+
+
+@pytest.mark.integration
+def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_run_batch_request_dataframe_asset_in_context_run_checkpoint_pandasdf(
+    titanic_data_context_with_fluent_pandas_datasources_with_checkpoints_v1_with_empty_store_stats_enabled,
+    common_action_list,
+):
+    context: FileDataContext = titanic_data_context_with_fluent_pandas_datasources_with_checkpoints_v1_with_empty_store_stats_enabled
+
+    # create expectation suite
+    context.add_expectation_suite("my_expectation_suite")
+
+    batch_request: dict = {
+        "datasource_name": "my_pandas_dataframes_datasource",
+        "data_asset_name": "my_dataframe_asset",
+    }
+
+    # add checkpoint config
+    checkpoint_config: dict = {
+        "class_name": "Checkpoint",
+        "name": "my_checkpoint",
+        "config_version": 1,
+        "run_name_template": "%Y-%M-foo-bar-template",
+        "expectation_suite_name": "my_expectation_suite",
+        "action_list": common_action_list,
+    }
+
+    context.add_checkpoint(**checkpoint_config)
+
+    result = context.run_checkpoint(
+        checkpoint_name="my_checkpoint", batch_request=batch_request
+    )
+
+    assert len(context.validations_store.list_keys()) == 1
+    assert result["success"]
+
+
+@pytest.mark.integration
+def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_run_batch_request_dataframe_asset_in_context_run_checkpoint_sparkdf(
+    titanic_data_context_with_fluent_pandas_and_spark_datasources_with_checkpoints_v1_with_empty_store_stats_enabled,
+    common_action_list,
+):
+    context: FileDataContext = titanic_data_context_with_fluent_pandas_and_spark_datasources_with_checkpoints_v1_with_empty_store_stats_enabled
+
+    # create expectation suite
+    context.add_expectation_suite("my_expectation_suite")
+
+    batch_request: dict = {
+        "datasource_name": "my_spark_dataframes_datasource",
+        "data_asset_name": "my_dataframe_asset",
+    }
+
+    # add checkpoint config
+    checkpoint_config: dict = {
+        "class_name": "Checkpoint",
+        "name": "my_checkpoint",
+        "config_version": 1,
+        "run_name_template": "%Y-%M-foo-bar-template",
+        "expectation_suite_name": "my_expectation_suite",
+        "action_list": common_action_list,
+    }
+
+    context.add_checkpoint(**checkpoint_config)
+
+    result = context.run_checkpoint(
+        checkpoint_name="my_checkpoint", batch_request=batch_request
+    )
+
+    assert len(context.validations_store.list_keys()) == 1
+    assert result["success"]
+
+
+@pytest.mark.integration
+def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_run_validations_batch_request_dataframe_in_context_run_checkpoint_pandasdf(
+    titanic_data_context_with_fluent_pandas_datasources_with_checkpoints_v1_with_empty_store_stats_enabled,
+    common_action_list,
+):
+    context: FileDataContext = titanic_data_context_with_fluent_pandas_datasources_with_checkpoints_v1_with_empty_store_stats_enabled
+
+    # create expectation suite
+    context.add_expectation_suite("my_expectation_suite")
+
+    batch_request: dict = {
+        "datasource_name": "my_pandas_dataframes_datasource",
+        "data_asset_name": "my_dataframe_asset",
+    }
+
+    # add checkpoint config
+    checkpoint_config: dict = {
+        "class_name": "Checkpoint",
+        "name": "my_checkpoint",
+        "config_version": 1,
+        "run_name_template": "%Y-%M-foo-bar-template",
+        "expectation_suite_name": "my_expectation_suite",
+        "action_list": common_action_list,
+    }
+
+    context.add_checkpoint(**checkpoint_config)
+
+    result = context.run_checkpoint(
+        checkpoint_name="my_checkpoint",
+        validations=[{"batch_request": batch_request}],
+    )
+
+    assert len(context.validations_store.list_keys()) == 1
+    assert result["success"]
+
+
+@pytest.mark.integration
+def test_newstyle_checkpoint_instantiates_and_produces_a_validation_result_when_run_validations_batch_request_dataframe_in_context_run_checkpoint_sparkdf(
+    titanic_data_context_with_fluent_pandas_and_spark_datasources_with_checkpoints_v1_with_empty_store_stats_enabled,
+    common_action_list,
+):
+    context: FileDataContext = titanic_data_context_with_fluent_pandas_and_spark_datasources_with_checkpoints_v1_with_empty_store_stats_enabled
+
+    # create expectation suite
+    context.add_expectation_suite("my_expectation_suite")
+
+    batch_request: dict = {
+        "datasource_name": "my_spark_dataframes_datasource",
+        "data_asset_name": "my_dataframe_asset",
+    }
+
+    # add checkpoint config
+    checkpoint_config: dict = {
+        "class_name": "Checkpoint",
+        "name": "my_checkpoint",
+        "config_version": 1,
+        "run_name_template": "%Y-%M-foo-bar-template",
+        "expectation_suite_name": "my_expectation_suite",
+        "action_list": common_action_list,
+    }
+
+    context.add_checkpoint(**checkpoint_config)
+
+    result = context.run_checkpoint(
+        checkpoint_name="my_checkpoint",
+        validations=[{"batch_request": batch_request}],
+    )
+
+    assert len(context.validations_store.list_keys()) == 1
+    assert result["success"]
+
+
+@pytest.mark.integration
+def test_newstyle_checkpoint_instantiates_and_produces_a_printable_validation_result_with_batch_request_dataframe_pandasdf(
+    titanic_data_context_with_fluent_pandas_datasources_with_checkpoints_v1_with_empty_store_stats_enabled,
+    common_action_list,
+):
+    context: FileDataContext = titanic_data_context_with_fluent_pandas_datasources_with_checkpoints_v1_with_empty_store_stats_enabled
+
+    # create expectation suite
+    context.add_expectation_suite("my_expectation_suite")
+
+    batch_request: dict = {
+        "datasource_name": "my_pandas_dataframes_datasource",
+        "data_asset_name": "my_dataframe_asset",
+    }
+
+    # add checkpoint config
+    checkpoint: Checkpoint = Checkpoint(
+        name="my_checkpoint",
+        data_context=context,
+        config_version=1,
+        run_name_template="%Y-%M-foo-bar-template",
+        expectation_suite_name="my_expectation_suite",
+        action_list=common_action_list,
+    )
+
+    result = checkpoint.run(batch_request=batch_request)
+
+    assert type(repr(result)) == str
+
+
+@pytest.mark.integration
+def test_newstyle_checkpoint_instantiates_and_produces_a_printable_validation_result_with_batch_request_dataframe_sparkdf(
+    titanic_data_context_with_fluent_pandas_and_spark_datasources_with_checkpoints_v1_with_empty_store_stats_enabled,
+    common_action_list,
+):
+    context: FileDataContext = titanic_data_context_with_fluent_pandas_and_spark_datasources_with_checkpoints_v1_with_empty_store_stats_enabled
+
+    # create expectation suite
+    context.add_expectation_suite("my_expectation_suite")
+
+    batch_request: dict = {
+        "datasource_name": "my_spark_dataframes_datasource",
+        "data_asset_name": "my_dataframe_asset",
+    }
+
+    # add checkpoint config
+    checkpoint: Checkpoint = Checkpoint(
+        name="my_checkpoint",
+        data_context=context,
+        config_version=1,
+        run_name_template="%Y-%M-foo-bar-template",
+        expectation_suite_name="my_expectation_suite",
+        action_list=common_action_list,
+    )
+
+    result = checkpoint.run(batch_request=batch_request)
+
+    assert type(repr(result)) == str
+
+
+@pytest.mark.slow  # 1.75s
+@pytest.mark.integration
+def test_newstyle_checkpoint_instantiates_and_produces_a_correct_validation_result_batch_request_in_checkpoint_yml_and_checkpoint_run_pandas(
+    titanic_data_context_with_fluent_pandas_datasources_stats_enabled_and_expectation_suite_with_one_expectation,
+    common_action_list,
+    batch_request_as_dict,
+):
+    context: FileDataContext = titanic_data_context_with_fluent_pandas_datasources_stats_enabled_and_expectation_suite_with_one_expectation
+
+    batch_request_0: dict = copy.deepcopy(batch_request_as_dict)
+    batch_request_0["options"] = {
+        "timestamp": "19120414",
+        "size": "1313",
+    }
+
+    batch_request_1: dict = {
+        "datasource_name": "my_pandas_dataframes_datasource",
+        "data_asset_name": "my_dataframe_asset",
+    }
+
+    # add checkpoint config
+    checkpoint_config: dict = {
+        "class_name": "Checkpoint",
+        "name": "my_checkpoint",
+        "config_version": 1,
+        "run_name_template": "%Y-%M-foo-bar-template",
+        "expectation_suite_name": "my_expectation_suite",
+        "action_list": common_action_list,
+        "batch_request": batch_request_0,
+    }
+
+    context.add_checkpoint(**checkpoint_config)
+    checkpoint: Checkpoint = context.get_checkpoint(name="my_checkpoint")
+
+    result = checkpoint.run()
+    assert not result["success"]
+    assert (
+        list(result.run_results.values())[0]["validation_result"]["statistics"][
+            "evaluated_expectations"
+        ]
+        == 1
+    )
+    assert (
+        list(result.run_results.values())[0]["validation_result"]["statistics"][
+            "successful_expectations"
+        ]
+        == 0
+    )
+
+    suite = context.add_expectation_suite("my_new_expectation_suite")
+    expectation = ExpectationConfiguration(
+        expectation_type="expect_column_values_to_be_between",
+        kwargs={"column": "Age", "min_value": 0, "max_value": 71},
+    )
+    suite.add_expectation(expectation, send_usage_event=False)
+    context.update_expectation_suite(expectation_suite=suite)
+
+    result = checkpoint.run(
+        expectation_suite_name="my_new_expectation_suite",
+        batch_request=batch_request_1,
+    )
+    assert result["success"]
+    assert (
+        list(result.run_results.values())[0]["validation_result"]["statistics"][
+            "evaluated_expectations"
+        ]
+        == 1
+    )
+    assert (
+        list(result.run_results.values())[0]["validation_result"]["statistics"][
+            "successful_expectations"
+        ]
+        == 1
+    )
+
+
+@pytest.mark.slow  # 1.75s
+@pytest.mark.integration
+def test_newstyle_checkpoint_instantiates_and_produces_a_correct_validation_result_batch_request_in_checkpoint_yml_and_checkpoint_run_spark(
+    titanic_data_context_with_fluent_pandas_and_spark_datasources_stats_enabled_and_expectation_suite_with_one_expectation,
+    common_action_list,
+    batch_request_as_dict,
+):
+    context: FileDataContext = titanic_data_context_with_fluent_pandas_and_spark_datasources_stats_enabled_and_expectation_suite_with_one_expectation
+
+    batch_request_0: dict = copy.deepcopy(batch_request_as_dict)
+    batch_request_0["options"] = {
+        "timestamp": "19120414",
+        "size": "1313",
+    }
+
+    batch_request_1: dict = {
+        "datasource_name": "my_spark_dataframes_datasource",
+        "data_asset_name": "my_dataframe_asset",
+    }
+
+    # add checkpoint config
+    checkpoint_config: dict = {
+        "class_name": "Checkpoint",
+        "name": "my_checkpoint",
+        "config_version": 1,
+        "run_name_template": "%Y-%M-foo-bar-template",
+        "expectation_suite_name": "my_expectation_suite",
+        "action_list": common_action_list,
+        "batch_request": batch_request_0,
+    }
+
+    context.add_checkpoint(**checkpoint_config)
+    checkpoint: Checkpoint = context.get_checkpoint(name="my_checkpoint")
+
+    result = checkpoint.run()
+    assert not result["success"]
+    assert (
+        list(result.run_results.values())[0]["validation_result"]["statistics"][
+            "evaluated_expectations"
+        ]
+        == 1
+    )
+    assert (
+        list(result.run_results.values())[0]["validation_result"]["statistics"][
+            "successful_expectations"
+        ]
+        == 0
+    )
+
+    suite = context.add_expectation_suite("my_new_expectation_suite")
+    expectation = ExpectationConfiguration(
+        expectation_type="expect_column_values_to_be_between",
+        kwargs={"column": "Age", "min_value": 0, "max_value": 71},
+    )
+    suite.add_expectation(expectation, send_usage_event=False)
+    context.update_expectation_suite(expectation_suite=suite)
+
+    result = checkpoint.run(
+        expectation_suite_name="my_new_expectation_suite",
+        batch_request=batch_request_1,
+    )
+    assert result["success"]
+    assert (
+        list(result.run_results.values())[0]["validation_result"]["statistics"][
+            "evaluated_expectations"
+        ]
+        == 1
+    )
+    assert (
+        list(result.run_results.values())[0]["validation_result"]["statistics"][
+            "successful_expectations"
+        ]
+        == 1
+    )
+
+
+@pytest.mark.slow  # 2.35s
+@pytest.mark.integration
+def test_newstyle_checkpoint_instantiates_and_produces_a_correct_validation_result_validations_in_checkpoint_yml_and_checkpoint_run_pandas(
+    titanic_data_context_with_fluent_pandas_datasources_stats_enabled_and_expectation_suite_with_one_expectation,
+    common_action_list,
+    batch_request_as_dict,
+):
+    context: FileDataContext = titanic_data_context_with_fluent_pandas_datasources_stats_enabled_and_expectation_suite_with_one_expectation
+
+    batch_request_0: dict = copy.deepcopy(batch_request_as_dict)
+    batch_request_0["options"] = {
+        "timestamp": "19120414",
+        "size": "1313",
+    }
+
+    batch_request_1: dict = {
+        "datasource_name": "my_pandas_dataframes_datasource",
+        "data_asset_name": "my_dataframe_asset",
+    }
+
+    # add checkpoint config
+    checkpoint_config: dict = {
+        "class_name": "Checkpoint",
+        "name": "my_checkpoint",
+        "config_version": 1,
+        "run_name_template": "%Y-%M-foo-bar-template",
+        "expectation_suite_name": "my_expectation_suite",
+        "action_list": common_action_list,
+        "validations": [{"batch_request": batch_request_0}],
+    }
+
+    context.add_checkpoint(**checkpoint_config)
+    checkpoint: Checkpoint = context.get_checkpoint(name="my_checkpoint")
+
+    result = checkpoint.run()
+    assert result["success"] is False
+    assert len(result.run_results.values()) == 1
+    assert (
+        list(result.run_results.values())[0]["validation_result"]["statistics"][
+            "evaluated_expectations"
+        ]
+        == 1
+    )
+    assert (
+        list(result.run_results.values())[0]["validation_result"]["statistics"][
+            "successful_expectations"
+        ]
+        == 0
+    )
+
+    suite = context.add_expectation_suite("my_new_expectation_suite")
+    expectation = ExpectationConfiguration(
+        expectation_type="expect_column_values_to_be_between",
+        kwargs={"column": "Age", "min_value": 0, "max_value": 71},
+    )
+    suite.add_expectation(expectation, send_usage_event=False)
+    context.update_expectation_suite(expectation_suite=suite)
+
+    result = checkpoint.run(
+        validations=[
+            {
+                "batch_request": batch_request_1,
+                "expectation_suite_name": "my_new_expectation_suite",
+            }
+        ],
+    )
+    assert result["success"] is False
+    assert len(result.run_results.values()) == 2
+    assert (
+        list(result.run_results.values())[0]["validation_result"]["statistics"][
+            "evaluated_expectations"
+        ]
+        == 1
+    )
+    assert (
+        list(result.run_results.values())[0]["validation_result"]["statistics"][
+            "successful_expectations"
+        ]
+        == 0
+    )
+    assert (
+        list(result.run_results.values())[1]["validation_result"]["statistics"][
+            "evaluated_expectations"
+        ]
+        == 1
+    )
+    assert (
+        list(result.run_results.values())[1]["validation_result"]["statistics"][
+            "successful_expectations"
+        ]
+        == 1
+    )
+
+
+@pytest.mark.slow  # 2.35s
+@pytest.mark.integration
+def test_newstyle_checkpoint_instantiates_and_produces_a_correct_validation_result_validations_in_checkpoint_yml_and_checkpoint_run_spark(
+    titanic_data_context_with_fluent_pandas_and_spark_datasources_stats_enabled_and_expectation_suite_with_one_expectation,
+    common_action_list,
+    batch_request_as_dict,
+):
+    context: FileDataContext = titanic_data_context_with_fluent_pandas_and_spark_datasources_stats_enabled_and_expectation_suite_with_one_expectation
+
+    batch_request_0: dict = copy.deepcopy(batch_request_as_dict)
+    batch_request_0["options"] = {
+        "timestamp": "19120414",
+        "size": "1313",
+    }
+
+    batch_request_1: dict = {
+        "datasource_name": "my_spark_dataframes_datasource",
+        "data_asset_name": "my_dataframe_asset",
+    }
+
+    # add checkpoint config
+    checkpoint_config: dict = {
+        "class_name": "Checkpoint",
+        "name": "my_checkpoint",
+        "config_version": 1,
+        "run_name_template": "%Y-%M-foo-bar-template",
+        "expectation_suite_name": "my_expectation_suite",
+        "action_list": common_action_list,
+        "validations": [{"batch_request": batch_request_0}],
+    }
+
+    context.add_checkpoint(**checkpoint_config)
+    checkpoint: Checkpoint = context.get_checkpoint(name="my_checkpoint")
+
+    result = checkpoint.run()
+    assert result["success"] is False
+    assert len(result.run_results.values()) == 1
+    assert (
+        list(result.run_results.values())[0]["validation_result"]["statistics"][
+            "evaluated_expectations"
+        ]
+        == 1
+    )
+    assert (
+        list(result.run_results.values())[0]["validation_result"]["statistics"][
+            "successful_expectations"
+        ]
+        == 0
+    )
+
+    suite = context.add_expectation_suite("my_new_expectation_suite")
+    expectation = ExpectationConfiguration(
+        expectation_type="expect_column_values_to_be_between",
+        kwargs={"column": "Age", "min_value": 0, "max_value": 71},
+    )
+    suite.add_expectation(expectation, send_usage_event=False)
+    context.update_expectation_suite(expectation_suite=suite)
+
+    result = checkpoint.run(
+        validations=[
+            {
+                "batch_request": batch_request_1,
+                "expectation_suite_name": "my_new_expectation_suite",
+            }
+        ],
+    )
+    assert result["success"] is False
+    assert len(result.run_results.values()) == 2
+    assert (
+        list(result.run_results.values())[0]["validation_result"]["statistics"][
+            "evaluated_expectations"
+        ]
+        == 1
+    )
+    assert (
+        list(result.run_results.values())[0]["validation_result"]["statistics"][
+            "successful_expectations"
+        ]
+        == 0
+    )
+    assert (
+        list(result.run_results.values())[1]["validation_result"]["statistics"][
+            "evaluated_expectations"
+        ]
+        == 1
+    )
+    assert (
+        list(result.run_results.values())[1]["validation_result"]["statistics"][
+            "successful_expectations"
+        ]
+        == 1
+    )
+
+
+@pytest.mark.slow  # 1.91s
+@pytest.mark.integration
+def test_newstyle_checkpoint_instantiates_and_produces_a_correct_validation_result_batch_request_in_checkpoint_yml_and_context_run_checkpoint_pandas(
+    titanic_data_context_with_fluent_pandas_datasources_stats_enabled_and_expectation_suite_with_one_expectation,
+    common_action_list,
+    batch_request_as_dict,
+):
+    context: FileDataContext = titanic_data_context_with_fluent_pandas_datasources_stats_enabled_and_expectation_suite_with_one_expectation
+
+    batch_request_0: dict = copy.deepcopy(batch_request_as_dict)
+    batch_request_0["options"] = {
+        "timestamp": "19120414",
+        "size": "1313",
+    }
+
+    batch_request_1: dict = {
+        "datasource_name": "my_pandas_dataframes_datasource",
+        "data_asset_name": "my_dataframe_asset",
+    }
+
+    # add checkpoint config
+    checkpoint_config: dict = {
+        "class_name": "Checkpoint",
+        "name": "my_checkpoint",
+        "config_version": 1,
+        "run_name_template": "%Y-%M-foo-bar-template",
+        "expectation_suite_name": "my_expectation_suite",
+        "action_list": common_action_list,
+        "batch_request": batch_request_0,
+    }
+
+    context.add_checkpoint(**checkpoint_config)
+
+    suite = context.add_expectation_suite("my_new_expectation_suite")
+    expectation = ExpectationConfiguration(
+        expectation_type="expect_column_values_to_be_between",
+        kwargs={"column": "Age", "min_value": 0, "max_value": 71},
+    )
+    suite.add_expectation(expectation, send_usage_event=False)
+    context.update_expectation_suite(expectation_suite=suite)
+
+    result = context.run_checkpoint(checkpoint_name="my_checkpoint")
+    assert result["success"] is False
+    assert (
+        list(result.run_results.values())[0]["validation_result"]["statistics"][
+            "evaluated_expectations"
+        ]
+        == 1
+    )
+    assert (
+        list(result.run_results.values())[0]["validation_result"]["statistics"][
+            "successful_expectations"
+        ]
+        == 0
+    )
+
+    result = context.run_checkpoint(
+        checkpoint_name="my_checkpoint",
+        batch_request=batch_request_1,
+        expectation_suite_name="my_new_expectation_suite",
+    )
+    assert result["success"]
+    assert (
+        list(result.run_results.values())[0]["validation_result"]["statistics"][
+            "evaluated_expectations"
+        ]
+        == 1
+    )
+    assert (
+        list(result.run_results.values())[0]["validation_result"]["statistics"][
+            "successful_expectations"
+        ]
+        == 1
+    )
+
+
+@pytest.mark.slow  # 1.91s
+@pytest.mark.integration
+def test_newstyle_checkpoint_instantiates_and_produces_a_correct_validation_result_batch_request_in_checkpoint_yml_and_context_run_checkpoint_spark(
+    titanic_data_context_with_fluent_pandas_and_spark_datasources_stats_enabled_and_expectation_suite_with_one_expectation,
+    common_action_list,
+    batch_request_as_dict,
+):
+    context: FileDataContext = titanic_data_context_with_fluent_pandas_and_spark_datasources_stats_enabled_and_expectation_suite_with_one_expectation
+
+    batch_request_0: dict = copy.deepcopy(batch_request_as_dict)
+    batch_request_0["options"] = {
+        "timestamp": "19120414",
+        "size": "1313",
+    }
+
+    batch_request_1: dict = {
+        "datasource_name": "my_spark_dataframes_datasource",
+        "data_asset_name": "my_dataframe_asset",
+    }
+
+    # add checkpoint config
+    checkpoint_config: dict = {
+        "class_name": "Checkpoint",
+        "name": "my_checkpoint",
+        "config_version": 1,
+        "run_name_template": "%Y-%M-foo-bar-template",
+        "expectation_suite_name": "my_expectation_suite",
+        "action_list": common_action_list,
+        "batch_request": batch_request_0,
+    }
+
+    context.add_checkpoint(**checkpoint_config)
+
+    suite = context.add_expectation_suite("my_new_expectation_suite")
+    expectation = ExpectationConfiguration(
+        expectation_type="expect_column_values_to_be_between",
+        kwargs={"column": "Age", "min_value": 0, "max_value": 71},
+    )
+    suite.add_expectation(expectation, send_usage_event=False)
+    context.update_expectation_suite(expectation_suite=suite)
+
+    result = context.run_checkpoint(checkpoint_name="my_checkpoint")
+    assert result["success"] is False
+    assert (
+        list(result.run_results.values())[0]["validation_result"]["statistics"][
+            "evaluated_expectations"
+        ]
+        == 1
+    )
+    assert (
+        list(result.run_results.values())[0]["validation_result"]["statistics"][
+            "successful_expectations"
+        ]
+        == 0
+    )
+
+    result = context.run_checkpoint(
+        checkpoint_name="my_checkpoint",
+        batch_request=batch_request_1,
+        expectation_suite_name="my_new_expectation_suite",
+    )
+    assert result["success"]
+    assert (
+        list(result.run_results.values())[0]["validation_result"]["statistics"][
+            "evaluated_expectations"
+        ]
+        == 1
+    )
+    assert (
+        list(result.run_results.values())[0]["validation_result"]["statistics"][
+            "successful_expectations"
+        ]
+        == 1
+    )
+
+
+@pytest.mark.slow  # 2.46s
+@pytest.mark.integration
+def test_newstyle_checkpoint_instantiates_and_produces_a_correct_validation_result_validations_in_checkpoint_yml_and_context_run_checkpoint_pandas(
+    titanic_data_context_with_fluent_pandas_datasources_stats_enabled_and_expectation_suite_with_one_expectation,
+    common_action_list,
+    batch_request_as_dict,
+):
+    context: FileDataContext = titanic_data_context_with_fluent_pandas_datasources_stats_enabled_and_expectation_suite_with_one_expectation
+
+    batch_request_0: dict = copy.deepcopy(batch_request_as_dict)
+    batch_request_0["options"] = {
+        "timestamp": "19120414",
+        "size": "1313",
+    }
+
+    batch_request_1: dict = {
+        "datasource_name": "my_pandas_dataframes_datasource",
+        "data_asset_name": "my_dataframe_asset",
+    }
+
+    # add checkpoint config
+    checkpoint_config: dict = {
+        "class_name": "Checkpoint",
+        "name": "my_checkpoint",
+        "config_version": 1,
+        "run_name_template": "%Y-%M-foo-bar-template",
+        "expectation_suite_name": "my_expectation_suite",
+        "action_list": common_action_list,
+        "validations": [{"batch_request": batch_request_0}],
+    }
+
+    context.add_checkpoint(**checkpoint_config)
+
+    result = context.run_checkpoint(checkpoint_name="my_checkpoint")
+    assert result["success"] is False
+    assert len(result.run_results.values()) == 1
+    assert (
+        list(result.run_results.values())[0]["validation_result"]["statistics"][
+            "evaluated_expectations"
+        ]
+        == 1
+    )
+    assert (
+        list(result.run_results.values())[0]["validation_result"]["statistics"][
+            "successful_expectations"
+        ]
+        == 0
+    )
+
+    suite = context.add_expectation_suite("my_new_expectation_suite")
+    expectation = ExpectationConfiguration(
+        expectation_type="expect_column_values_to_be_between",
+        kwargs={"column": "Age", "min_value": 0, "max_value": 71},
+    )
+    suite.add_expectation(expectation, send_usage_event=False)
+    context.update_expectation_suite(expectation_suite=suite)
+
+    result = context.run_checkpoint(
+        checkpoint_name="my_checkpoint",
+        validations=[
+            {
+                "batch_request": batch_request_1,
+                "expectation_suite_name": "my_new_expectation_suite",
+            }
+        ],
+    )
+    assert result["success"] is False
+    assert len(result.run_results.values()) == 2
+    assert (
+        list(result.run_results.values())[0]["validation_result"]["statistics"][
+            "evaluated_expectations"
+        ]
+        == 1
+    )
+    assert (
+        list(result.run_results.values())[0]["validation_result"]["statistics"][
+            "successful_expectations"
+        ]
+        == 0
+    )
+    assert (
+        list(result.run_results.values())[1]["validation_result"]["statistics"][
+            "evaluated_expectations"
+        ]
+        == 1
+    )
+    assert (
+        list(result.run_results.values())[1]["validation_result"]["statistics"][
+            "successful_expectations"
+        ]
+        == 1
+    )
+
+
+@pytest.mark.slow  # 2.46s
+@pytest.mark.integration
+def test_newstyle_checkpoint_instantiates_and_produces_a_correct_validation_result_validations_in_checkpoint_yml_and_context_run_checkpoint_spark(
+    titanic_data_context_with_fluent_pandas_and_spark_datasources_stats_enabled_and_expectation_suite_with_one_expectation,
+    common_action_list,
+    batch_request_as_dict,
+):
+    context: FileDataContext = titanic_data_context_with_fluent_pandas_and_spark_datasources_stats_enabled_and_expectation_suite_with_one_expectation
+
+    batch_request_0: dict = copy.deepcopy(batch_request_as_dict)
+    batch_request_0["options"] = {
+        "timestamp": "19120414",
+        "size": "1313",
+    }
+
+    batch_request_1: dict = {
+        "datasource_name": "my_spark_dataframes_datasource",
+        "data_asset_name": "my_dataframe_asset",
+    }
+
+    # add checkpoint config
+    checkpoint_config: dict = {
+        "class_name": "Checkpoint",
+        "name": "my_checkpoint",
+        "config_version": 1,
+        "run_name_template": "%Y-%M-foo-bar-template",
+        "expectation_suite_name": "my_expectation_suite",
+        "action_list": common_action_list,
+        "validations": [{"batch_request": batch_request_0}],
+    }
+
+    context.add_checkpoint(**checkpoint_config)
+
+    result = context.run_checkpoint(checkpoint_name="my_checkpoint")
+    assert result["success"] is False
+    assert len(result.run_results.values()) == 1
+    assert (
+        list(result.run_results.values())[0]["validation_result"]["statistics"][
+            "evaluated_expectations"
+        ]
+        == 1
+    )
+    assert (
+        list(result.run_results.values())[0]["validation_result"]["statistics"][
+            "successful_expectations"
+        ]
+        == 0
+    )
+
+    suite = context.add_expectation_suite("my_new_expectation_suite")
+    expectation = ExpectationConfiguration(
+        expectation_type="expect_column_values_to_be_between",
+        kwargs={"column": "Age", "min_value": 0, "max_value": 71},
+    )
+    suite.add_expectation(expectation, send_usage_event=False)
+    context.update_expectation_suite(expectation_suite=suite)
+
+    result = context.run_checkpoint(
+        checkpoint_name="my_checkpoint",
+        validations=[
+            {
+                "batch_request": batch_request_1,
+                "expectation_suite_name": "my_new_expectation_suite",
+            }
+        ],
+    )
+    assert result["success"] is False
+    assert len(result.run_results.values()) == 2
+    assert (
+        list(result.run_results.values())[0]["validation_result"]["statistics"][
+            "evaluated_expectations"
+        ]
+        == 1
+    )
+    assert (
+        list(result.run_results.values())[0]["validation_result"]["statistics"][
+            "successful_expectations"
+        ]
+        == 0
+    )
+    assert (
+        list(result.run_results.values())[1]["validation_result"]["statistics"][
+            "evaluated_expectations"
+        ]
+        == 1
+    )
+    assert (
+        list(result.run_results.values())[1]["validation_result"]["statistics"][
+            "successful_expectations"
+        ]
+        == 1
+    )
diff --git a/tests/conftest.py b/tests/conftest.py
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -1579,6 +1579,79 @@ def titanic_data_context_with_fluent_pandas_datasources_with_checkpoints_v1_with
         name="users", batching_regex=batching_regex, glob_directive=glob_directive
     )
 
+    datasource_name = "my_pandas_dataframes_datasource"
+    datasource = context.sources.add_pandas(name=datasource_name)
+
+    csv_source_path = pathlib.Path(
+        context_path,
+        "..",
+        "data",
+        "titanic",
+        "Titanic_1911.csv",
+    )
+    df = pd.read_csv(filepath_or_buffer=csv_source_path)
+
+    dataframe_asset_name = "my_dataframe_asset"
+    # noinspection PyUnusedLocal
+    datasource.add_dataframe_asset(name=dataframe_asset_name, dataframe=df)
+
+    # noinspection PyProtectedMember
+    context._save_project_config()
+
+    return context
+
+
+@pytest.fixture
+def titanic_data_context_with_fluent_pandas_and_spark_datasources_with_checkpoints_v1_with_empty_store_stats_enabled(
+    titanic_data_context_with_fluent_pandas_datasources_with_checkpoints_v1_with_empty_store_stats_enabled,
+    spark_df_from_pandas_df,
+    spark_session,
+):
+    context = titanic_data_context_with_fluent_pandas_datasources_with_checkpoints_v1_with_empty_store_stats_enabled
+    context_path: str = context.root_directory
+    path_to_folder_containing_csv_files = pathlib.Path(
+        context_path,
+        "..",
+        "data",
+        "titanic",
+    )
+
+    datasource_name = "my_spark_filesystem_datasource"
+    datasource = context.sources.add_spark_filesystem(
+        name=datasource_name, base_directory=path_to_folder_containing_csv_files
+    )
+
+    batching_regex = r"(?P<name>.+)\.csv"
+    glob_directive = "*.csv"
+    # noinspection PyUnusedLocal
+    datasource.add_csv_asset(
+        name="exploration", batching_regex=batching_regex, glob_directive=glob_directive
+    )
+
+    batching_regex = r"(.+)_(?P<timestamp>\d{8})_(?P<size>\d{4})\.csv"
+    glob_directive = "*.csv"
+    # noinspection PyUnusedLocal
+    datasource.add_csv_asset(
+        name="users", batching_regex=batching_regex, glob_directive=glob_directive
+    )
+
+    datasource_name = "my_spark_dataframes_datasource"
+    datasource = context.sources.add_spark(name=datasource_name)
+
+    csv_source_path = pathlib.Path(
+        context_path,
+        "..",
+        "data",
+        "titanic",
+        "Titanic_1911.csv",
+    )
+    pandas_df = pd.read_csv(filepath_or_buffer=csv_source_path)
+    spark_df = spark_df_from_pandas_df(spark_session, pandas_df)
+
+    dataframe_asset_name = "my_dataframe_asset"
+    # noinspection PyUnusedLocal
+    datasource.add_dataframe_asset(name=dataframe_asset_name, dataframe=spark_df)
+
     # noinspection PyProtectedMember
     context._save_project_config()