Пример #1
0
    def test_validate_sobject__injection(self):
        ms = MappingStep(sf_object="Test__c", fields=["Name"], action="insert")

        assert ms._validate_sobject(
            CaseInsensitiveDict({"npsp__Test__c": {
                "createable": True
            }}),
            lambda obj: f"npsp__{obj}",
            DataOperationType.INSERT,
        )
        assert ms.sf_object == "npsp__Test__c"
Пример #2
0
    def test_validate_and_inject_namespace__fls(self, mock_field,
                                                mock_sobject):
        ms = MappingStep(sf_object="Test__c",
                         fields=["Field__c"],
                         action=DataOperationType.INSERT)

        org_config = mock.Mock()
        org_config.salesforce_client.describe.return_value = {
            "sobjects": [{
                "name": "Test__c",
                "createable": True
            }]
        }
        org_config.salesforce_client.Test__c.describe.return_value = {
            "fields": [{
                "name": "Field__c",
                "createable": True
            }]
        }
        assert ms.validate_and_inject_namespace(org_config, "ns",
                                                DataOperationType.INSERT)

        ms._validate_sobject.assert_called_once_with(
            CaseInsensitiveDict(
                {"Test__c": {
                    "name": "Test__c",
                    "createable": True
                }}),
            None,
            DataOperationType.INSERT,
        )

        ms._validate_field_dict.assert_has_calls([
            mock.call(
                {"Field__c": {
                    "name": "Field__c",
                    "createable": True
                }},
                {"Field__c": "Field__c"},
                None,
                False,
                DataOperationType.INSERT,
            ),
            mock.call(
                {"Field__c": {
                    "name": "Field__c",
                    "createable": True
                }},
                {},
                None,
                False,
                DataOperationType.INSERT,
            ),
        ])
Пример #3
0
    def test_validate_field_dict__fls_checks(self):
        ms = MappingStep(
            sf_object="Account",
            fields=["Id", "Name", "Website"],
            action=DataOperationType.INSERT,
        )

        assert ms._validate_field_dict(
            CaseInsensitiveDict({
                "Name": {
                    "createable": True
                },
                "Website": {
                    "createable": True
                }
            }),
            ms.fields_,
            None,
            False,
            DataOperationType.INSERT,
        )

        assert not ms._validate_field_dict(
            CaseInsensitiveDict({
                "Name": {
                    "createable": True
                },
                "Website": {
                    "createable": False
                }
            }),
            ms.fields_,
            None,
            False,
            DataOperationType.INSERT,
        )
Пример #4
0
    def test_validate_field_dict__drop_missing(self):
        ms = MappingStep(
            sf_object="Account",
            fields=["Id", "Name", "Website"],
            action=DataOperationType.INSERT,
        )

        assert ms._validate_field_dict(
            describe=CaseInsensitiveDict(
                {"Name": {"createable": True}, "Website": {"createable": False}}
            ),
            field_dict=ms.fields_,
            inject=None,
            strip=None,
            drop_missing=True,
            data_operation_type=DataOperationType.INSERT,
        )

        assert ms.fields_ == {"Id": "Id", "Name": "Name"}
Пример #5
0
    def test_validate_field_dict__injection(self):
        ms = MappingStep(
            sf_object="Account",
            fields=["Id", "Name", "Test__c"],
            action=DataOperationType.INSERT,
        )

        assert ms._validate_field_dict(
            describe=CaseInsensitiveDict(
                {"Name": {"createable": True}, "npsp__Test__c": {"createable": True}}
            ),
            field_dict=ms.fields_,
            inject=lambda field: f"npsp__{field}",
            strip=None,
            drop_missing=False,
            data_operation_type=DataOperationType.INSERT,
        )

        assert ms.fields_ == {"Id": "Id", "Name": "Name", "npsp__Test__c": "Test__c"}
Пример #6
0
    def test_validate_field_dict__drop_missing(self):
        ms = MappingStep(sf_object="Account",
                         fields=["Id", "Name", "Website"],
                         action="insert")

        assert ms._validate_field_dict(
            CaseInsensitiveDict({
                "Name": {
                    "createable": True
                },
                "Website": {
                    "createable": False
                }
            }),
            ms.fields_,
            None,
            True,
            DataOperationType.INSERT,
        )

        assert ms.fields_ == {"Id": "Id", "Name": "Name"}
Пример #7
0
    def test_validate_field_dict__injection_duplicate_fields(self):
        ms = MappingStep(sf_object="Account",
                         fields=["Id", "Name", "Test__c"],
                         action="insert")

        assert ms._validate_field_dict(
            CaseInsensitiveDict({
                "Name": {
                    "createable": True
                },
                "npsp__Test__c": {
                    "createable": True
                },
                "Test__c": {
                    "createable": True
                },
            }),
            ms.fields_,
            lambda field: f"npsp__{field}",
            False,
            DataOperationType.INSERT,
        )

        assert ms.fields_ == {"Id": "Id", "Name": "Name", "Test__c": "Test__c"}
Пример #8
0
    def test_validate_and_inject_namespace__injection_lookups(
        self, mock_field, mock_sobject
    ):
        ms = parse_from_yaml(
            StringIO(
                """Insert Accounts:
                  sf_object: Account
                  table: Account
                  fields:
                    - Name
                  lookups:
                    Lookup__c:
                        table: Stuff"""
            )
        )["Insert Accounts"]

        org_config = mock.Mock()
        org_config.salesforce_client.describe.return_value = {
            "sobjects": [{"name": "Account", "createable": True}]
        }
        org_config.salesforce_client.Account.describe.return_value = {
            "fields": [
                {"name": "Name", "createable": True},
                {"name": "ns__Lookup__c", "updateable": False, "createable": True},
            ]
        }

        assert ms.validate_and_inject_namespace(
            org_config, "ns", DataOperationType.INSERT, inject_namespaces=True
        )

        ms._validate_sobject.assert_called_once_with(
            CaseInsensitiveDict({"Account": {"name": "Account", "createable": True}}),
            mock.ANY,  # local function def
            DataOperationType.INSERT,
        )

        ms._validate_field_dict.assert_has_calls(
            [
                mock.call(
                    {
                        "Name": {"name": "Name", "createable": True},
                        "ns__Lookup__c": {
                            "name": "ns__Lookup__c",
                            "updateable": False,
                            "createable": True,
                        },
                    },
                    ms.fields,
                    mock.ANY,  # local function def.
                    mock.ANY,  # local function def.
                    False,
                    DataOperationType.INSERT,
                ),
                mock.call(
                    {
                        "Name": {"name": "Name", "createable": True},
                        "ns__Lookup__c": {
                            "name": "ns__Lookup__c",
                            "updateable": False,
                            "createable": True,
                        },
                    },
                    ms.lookups,
                    mock.ANY,  # local function def.
                    mock.ANY,  # local function def.
                    False,
                    DataOperationType.INSERT,
                ),
            ]
        )