def test__transform_constraints_raises_error(self): """Test that method raises error when specified. The ``_transform_constraints`` method is expected to raise ``MissingConstraintColumnError`` if the constraint transform raises one and ``on_missing_column`` is set to error. Input: - Table data Side Effects: - MissingConstraintColumnError """ # Setup data = pd.DataFrame({ 'item 0': [0, 1, 2], 'item 1': [3, 4, 5] }, index=[0, 1, 2]) constraint_mock = Mock() constraint_mock.transform.side_effect = MissingConstraintColumnError table_mock = Mock() table_mock._constraints = [constraint_mock] # Run/Assert with pytest.raises(MissingConstraintColumnError): Table._transform_constraints(table_mock, data, 'error')
def test__transform_constraints_is_condition_false_returns_data(self): """Test that method returns data unchanged when necessary. The ``_transform_constraints`` method is expected to return data unchanged when the constraint transform raises a ``MissingConstraintColumnError`` and the ``is_condition`` flag is False. Input: - Table data Output: - Table with dropped columns """ # Setup data = pd.DataFrame({ 'item 0': [0, 1, 2], 'item 1': [3, 4, 5] }, index=[0, 1, 2]) constraint_mock = Mock() constraint_mock.transform.side_effect = MissingConstraintColumnError(missing_columns=[]) constraint_mock.constraint_columns = ['item 0'] table_instance = Table() table_instance._constraints = [constraint_mock] table_instance._constraints_to_reverse = [constraint_mock] # Run result = table_instance._transform_constraints(data, False) # Assert expected_result = pd.DataFrame({ 'item 0': [0, 1, 2], 'item 1': [3, 4, 5] }, index=[0, 1, 2]) assert result.equals(expected_result) assert table_instance._constraints_to_reverse == []
def test__transform_constraints_is_condition_drops_columns(self): """Test that method drops columns when necessary. The ``_transform_constraints`` method is expected to drop columns associated with a constraint when its transform raises a ``MissingConstraintColumnError`` and the ``is_condition`` flag is True. Input: - Table data - ``is_condition`` set to True Output: - Table with dropped columns """ # Setup data = pd.DataFrame({ 'item 0': [0, 1, 2], 'item 1': [3, 4, 5] }, index=[0, 1, 2]) constraint_mock = Mock() constraint_mock.transform.side_effect = MissingConstraintColumnError(missing_columns=[]) constraint_mock.constraint_columns = ['item 0'] table_mock = Mock() table_mock._constraints = [constraint_mock] # Run result = Table._transform_constraints(table_mock, data, True) # Assert expected_result = pd.DataFrame({ 'item 1': [3, 4, 5] }, index=[0, 1, 2]) assert result.equals(expected_result)
def test__transform_constraints_drops_columns(self): """Test that method drops columns when specified. The ``_transform_constraints`` method is expected to drop columns associated with a constraint its transform raises a MissingConstraintColumnError and ``on_missing_column`` is set to drop. Input: - Table data Output: - Table with dropped columns """ # Setup data = pd.DataFrame({ 'item 0': [0, 1, 2], 'item 1': [3, 4, 5] }, index=[0, 1, 2]) constraint_mock = Mock() constraint_mock.transform.side_effect = MissingConstraintColumnError constraint_mock.constraint_columns = ['item 0'] table_mock = Mock() table_mock._constraints = [constraint_mock] # Run result = Table._transform_constraints(table_mock, data, 'drop') # Assert expected_result = pd.DataFrame({'item 1': [3, 4, 5]}, index=[0, 1, 2]) assert result.equals(expected_result)
def test__transform_constraints(self): """Test that method correctly transforms data based on constraints The ``_transform_constraints`` method is expected to loop through constraints and call each constraint's ``transform`` method on the data. Input: - Table data Output: - Transformed data """ # Setup data = pd.DataFrame({ 'item 0': [0, 1, 2], 'item 1': [3, 4, 5] }, index=[0, 1, 2]) transformed_data = pd.DataFrame( { 'item 0': [0, 0.5, 1], 'item 1': [6, 8, 10] }, index=[0, 1, 2]) first_constraint_mock = Mock() second_constraint_mock = Mock() first_constraint_mock.transform.return_value = transformed_data second_constraint_mock.return_value = transformed_data table_mock = Mock() table_mock._constraints = [ first_constraint_mock, second_constraint_mock ] # Run result = Table._transform_constraints(table_mock, data) # Assert assert result.equals(transformed_data) first_constraint_mock.transform.assert_called_once_with(data) second_constraint_mock.transform.assert_called_once_with( transformed_data)