def test__prepare_constraints_invalid_order_raises_exception( self, from_dict_mock): """Test the ``_prepare_constraints`` method validates the constraint order. If one constraint has ``rebuild_columns`` that are in a later constraint's ``constraint_columns``, an exception should be raised. Input: - List of constraints with some having ``rebuild_columns`` that are in a later constraint's ``constraint_columns``. Side Effect: - Exception should be raised. """ # Setup constraint1 = Constraint(handling_strategy='reject_sampling') constraint2 = Constraint(handling_strategy='reject_sampling') constraint3 = Constraint(handling_strategy='transform') constraint4 = Constraint(handling_strategy='transform') constraints = [constraint1, constraint2, constraint3, constraint4] constraint3.rebuild_columns = ['a', 'd'] constraint4.constraint_columns = ['a', 'b', 'c'] constraint4.rebuild_columns = ['a'] from_dict_mock.side_effect = [ constraint1, constraint2, constraint3, constraint4 ] # Run with pytest.raises(Exception): Table._prepare_constraints(constraints)
def test__prepare_constraints_validates_constraint_order( self, from_dict_mock): """Test the ``_prepare_constraints`` method validates the constraint order. If no constraint has ``rebuild_columns`` that are in a later constraint's ``constraint_columns``, no exception should be raised. Input: - List of constraints with none having ``rebuild_columns`` that are in a later constraint's ``constraint_columns``. Output: - Sorted list of constraints. """ # Setup constraint1 = Constraint(handling_strategy='reject_sampling') constraint2 = Constraint(handling_strategy='reject_sampling') constraint3 = Constraint(handling_strategy='transform') constraint4 = Constraint(handling_strategy='transform') constraints = [constraint1, constraint2, constraint3, constraint4] constraint3.rebuild_columns = ['e', 'd'] constraint4.constraint_columns = ['a', 'b', 'c'] constraint4.rebuild_columns = ['a'] from_dict_mock.side_effect = [ constraint1, constraint2, constraint3, constraint4 ] # Run sorted_constraints = Table._prepare_constraints(constraints) # Assert assert sorted_constraints == constraints
def test__prepare_constraints_sorts_constraints_none_rebuild_columns( self, from_dict_mock): """Test that ``_prepare_constraints`` method sorts constraints. The ``_prepare_constraints`` method should sort constraints with None as ``rebuild_columns`` before those that have them. Input: - list of constraints with some having None as ``rebuild_columns`` listed after those with ``rebuild_columns``. Output: - List of constraints sorted properly. """ # Setup constraint1 = Constraint(handling_strategy='transform') constraint2 = Constraint(handling_strategy='transform') constraint3 = Constraint(handling_strategy='reject_sampling') constraints = [constraint1, constraint2, constraint3] constraint1.rebuild_columns = ['a'] constraint2.rebuild_columns = ['b'] constraint3.rebuild_columns = None from_dict_mock.side_effect = [constraint1, constraint2, constraint3] # Run sorted_constraints = Table._prepare_constraints(constraints) # Asserts assert sorted_constraints == [constraint3, constraint1, constraint2]