예제 #1
0
    def test__authenticate(self):
        failed_request = mock.Mock(
            **{
                "status_code": 401,
                "json.return_value": {
                    "TransactionResult": {
                        "SeverityText": "Warning",
                        "ResultID": "SC001",
                        "ResultText": "Invalid Credentials",
                        "ResultMessage": {
                            "ResultDescription": "Your user credentials are invalid. Please contact "
                            "your D&B Representative or your local Customer "
                            "Service Center."
                        },
                    },
                    "TransactionDetail": {
                        "ApplicationTransactionID": "",
                        "ServiceTransactionID": "Id-2aff06563f327800e6661f003aac2627",
                        "TransactionTimestamp": "2015-09-26T16:25:14.193",
                    },
                },
            }
        )

        success_request = mock.Mock(
            **{
                "status_code": 200,
                "json.return_value": {
                    "TransactionResult": {
                        "SeverityText": "Information",
                        "ResultID": "CM000",
                        "ResultText": "Success",
                        "ResultMessage": {"ResultDescription": "Success"},
                    },
                    "AuthenticationDetail": {"Token": self.auth_token},
                    "TransactionDetail": {
                        "ApplicationTransactionID": "",
                        "ServiceTransactionID": "Id-6e0007569042780011671f00ca2011db",
                        "TransactionTimestamp": "2015-09-26T16:30:38.160",
                    },
                },
            }
        )

        with mock.patch("dnb_direct.client.requests") as requests_mock:

            # Failed auth
            requests_mock.post.return_value = failed_request
            client = DirectClient("foo", "bar")
            self.assertRaises(DnbAuthenticationError, lambda: client._authenticate())

            # Successful auth
            requests_mock.post.return_value = success_request
            client = DirectClient("foo", "bar")
            self.assertEqual(client._authenticate(), self.auth_token)
            requests_mock.post.assert_called_with(
                "https://maxcvservices.dnb.com/Authentication/V2.0/", headers={"x-dnb-user": "******", "x-dnb-pwd": "bar"}
            )
예제 #2
0
    def test_call_api(self):

        failed_request = mock.Mock(
            **{
                "status_code": 200,
                "json.return_value": {
                    "ServiceError": {
                        "TransactionDetail": {
                            "ApplicationTransactionID": "REST",
                            "ServiceTransactionID": "Id-6e040756527b7800a2671f00e043d181",
                            "TransactionTimestamp": "2015-09-26T16:47:42",
                        },
                        "TransactionResult": {
                            "SeverityText": "Error",
                            "ResultID": "CM002",
                            "ResultText": "Invalid URL provided",
                        },
                    }
                },
            }
        )

        bad_endpoint_request = mock.Mock(**{"status_code": 200, "json.side_effect": ValueError})

        success_request = mock.Mock(
            **{
                "status_code": 200,
                "json.return_value": {
                    "MatchResponse": {
                        "TransactionDetail": {
                            "ServiceTransactionID": "Id-871d21a751de8134079b2d0c-1",
                            "TransactionTimestamp": "2013-07-11T05:56:05",
                        },
                        "TransactionResult": {
                            "SeverityText": "Information",
                            "ResultID": "CM000",
                            "ResultText": "Success",
                        },
                        "MatchResponseDetail": {
                            "MatchDataCriteriaText": {"$": "Name and Address Lookup"},
                            "CandidateMatchedQuantity": 24,
                            "MatchCandidate": [
                                {
                                    "DUNSNumber": "804735132",
                                    "OrganizationPrimaryName": {
                                        "OrganizationName": {"$": "GORMAN MANUFACTURING COMPANY, INC."}
                                    },
                                    "PrimaryAddress": {
                                        "StreetAddressLine": [{"LineText": "492 KOLLER STREET"}],
                                        "PrimaryTownName": "SAN FRANCISCO",
                                        "CountryISOAlpha2Code": "US",
                                        "PostalCode": "94110",
                                        "TerritoryAbbreviatedName": "CA",
                                        "UndeliverableIndicator": False,
                                    },
                                    "MailingAddress": {"CountryISOAlpha2Code": "US", "UndeliverableIndicator": False},
                                }
                            ],
                        },
                        "DisplaySequence": 24,
                    }
                },
            }
        )

        with mock.patch("dnb_direct.client.requests") as requests_mock:
            c = DirectClient("foo", "bar")
            c._authenticate = mock.Mock(return_value="somevalidtoken")

            # bad endpoint
            requests_mock.get.return_value = bad_endpoint_request
            self.assertRaises(DnbError, lambda: c.call_api("bad_endpoint"))

            # failed request
            requests_mock.get.return_value = failed_request
            response = c.call_api("organizations")
            self.assertEqual(response["ServiceError"]["TransactionResult"]["SeverityText"], "Error")

            # good request (GET)
            requests_mock.get.return_value = success_request
            params = {"SubjectName": "GORMAN MANUFACTURING", "match": "true"}
            c.call_api("organizations", "5.0", **params)
            requests_mock.get.assert_called_with(
                "https://maxcvservices.dnb.com/V5.0/organizations",
                headers={"Authorization": "somevalidtoken"},
                params=params,
            )