Пример #1
0
def test_client_execute_query_transport_query_error(mocker):
    """Test that execute_query properly handles an error message from the server"""
    server_error_response = {
        "message": "No organization with the provided slug could be found.",
        "locations": [{
            "line": 2,
            "column": 3
        }],
        "path": ["findOrganizationBySlug"],
        "extensions": {
            "code": "INTERNAL_SERVER_ERROR"
        },
    }

    # Stop Client.__init__ from connecting to Tracker
    mocker.patch("tracker_client.client.get_auth_token")
    mocker.patch("tracker_client.client.create_client")
    test_client = Client()
    test_client.gql_client.execute = mocker.MagicMock(
        side_effect=TransportQueryError(
            str(server_error_response),
            errors=[server_error_response],
            data={"foo": None},
        ))

    result = test_client.execute_query(None)
    assert result == {
        "error": [{
            "message":
            "No organization with the provided slug could be found.",
            "path": ["findOrganizationBySlug"],
        }]
    }
Пример #2
0
def test_client_execute_query_success(mocker, client_all_domains_input):
    """Test that a successful response is passed on unchanged"""
    mocker.patch("tracker_client.client.get_auth_token")
    mocker.patch("tracker_client.client.create_client")
    test_client = Client()
    test_client.gql_client.execute = mocker.MagicMock(
        return_value=client_all_domains_input)

    result = test_client.execute_query(None)
    assert result == client_all_domains_input
Пример #3
0
def test_client_get_domain_error(mocker, error_message, capsys):
    """Test that Client.get_domains correctly handles error response"""
    mocker.patch("tracker_client.client.get_auth_token")
    mocker.patch("tracker_client.client.create_client")
    test_client = Client()
    test_client.execute_query = mocker.MagicMock(return_value=error_message)

    with pytest.raises(ValueError, match=r"Unable to get domain foo.bar"):
        test_client.get_domain("foo.bar")

    captured = capsys.readouterr()
    assert "Server error:" in captured.out
Пример #4
0
def test_client_execute_query_other_error(mocker, capsys):
    """Test that other exceptions are properly re-raised"""
    mocker.patch("tracker_client.client.get_auth_token")
    mocker.patch("tracker_client.client.create_client")
    test_client = Client()
    test_client.gql_client.execute = mocker.MagicMock(side_effect=ValueError)

    with pytest.raises(ValueError):
        test_client.execute_query(None)

    # Check that the warning for other errors was printed
    captured = capsys.readouterr()
    assert "Fatal error:" in captured.out
Пример #5
0
def test_client_execute_query_transport_server_error(mocker, capsys):
    """Test that TransportServerError is properly re-raised"""
    mocker.patch("tracker_client.client.get_auth_token")
    mocker.patch("tracker_client.client.create_client")
    test_client = Client()
    test_client.gql_client.execute = mocker.MagicMock(
        side_effect=TransportServerError)

    with pytest.raises(TransportServerError):
        test_client.execute_query(None)

    # Check that the warning for TransportServerError was printed
    captured = capsys.readouterr()
    assert "Server error:" in captured.out
Пример #6
0
def test_client_execute_query_graphql_error(mocker, capsys):
    """Test that GraphQLError is properly re-raised"""
    mocker.patch("tracker_client.client.get_auth_token")
    mocker.patch("tracker_client.client.create_client")
    test_client = Client()
    # GraphQLError requires a message
    test_client.gql_client.execute = mocker.MagicMock(
        side_effect=GraphQLError("test"))

    with pytest.raises(GraphQLError):
        test_client.execute_query(None)

    # Check that the warning for GraphQLError was printed
    captured = capsys.readouterr()
    assert "Query validation error, client may be out of date:" in captured.out
Пример #7
0
def test_client_get_domain(mocker, client_domain_input):
    """Test that Client.get_domain produces correct output"""
    mocker.patch("tracker_client.client.get_auth_token")
    mocker.patch("tracker_client.client.create_client")
    test_client = Client()
    test_client.execute_query = mocker.MagicMock(
        return_value=client_domain_input)

    domain = test_client.get_domain("foo.bar")

    test_client.execute_query.assert_called_once_with(queries.GET_DOMAIN,
                                                      {"domain": "foo.bar"})
    assert domain.domain_name == "foo.bar"
    assert domain.dmarc_phase == "not implemented"
    assert domain.last_ran == "2021-01-27 23:24:26.911236"
    assert domain.dkim_selectors == []
Пример #8
0
def test_client_get_organizations(mocker, client_all_orgs_input):
    """Test that Client.get_organizations produces correct output"""
    mocker.patch("tracker_client.client.get_auth_token")
    mocker.patch("tracker_client.client.create_client")
    test_client = Client()
    test_client.execute_query = mocker.MagicMock(
        return_value=client_all_orgs_input)

    org_list = test_client.get_organizations()

    test_client.execute_query.assert_called_once_with(queries.GET_ALL_ORGS, {
        "after": "abc",
        "search": ""
    })
    assert org_list[0].acronym == "FOO"
    assert org_list[1].name == "Fizz Bang"
    assert org_list[0].domain_count == 10
    assert org_list[1].verified
Пример #9
0
def test_client_get_domains_pagination(mocker, client_all_domains_input,
                                       client_all_domains_has_next_input):
    """Test that Client.get_domains correctly requests more domains if hasNextPage is true"""
    def mock_return(query, params):
        if params["after"] == "abc":
            return client_all_domains_input
        return client_all_domains_has_next_input

    mocker.patch("tracker_client.client.get_auth_token")
    mocker.patch("tracker_client.client.create_client")
    test_client = Client()
    test_client.execute_query = mock_return

    domain_list = test_client.get_domains()

    # If get_domains didn't try to paginate, len(domain_list) will be 3.
    # If it didn't stop trying to get more domains after hasNextPage became false
    # then the length will be greater than 6.
    assert len(domain_list) == 6
Пример #10
0
def test_client_get_domains(mocker, client_all_domains_input):
    """Test that Client.get_domains produces correct output"""
    mocker.patch("tracker_client.client.get_auth_token")
    mocker.patch("tracker_client.client.create_client")
    test_client = Client()
    test_client.execute_query = mocker.MagicMock(
        return_value=client_all_domains_input)

    domain_list = test_client.get_domains()

    test_client.execute_query.assert_called_once_with(queries.GET_ALL_DOMAINS,
                                                      {
                                                          "after": "abc",
                                                          "search": ""
                                                      })
    assert domain_list[0].domain_name == "foo.bar"
    assert domain_list[1].dmarc_phase == "not implemented"
    assert domain_list[2].last_ran == "2021-01-27 23:24:26.911236"
    assert domain_list[0].dkim_selectors == []
Пример #11
0
def test_client_get_organization(mocker, client_org_input):
    """Test that Client.get_organization produces correct output"""
    mocker.patch("tracker_client.client.get_auth_token")
    mocker.patch("tracker_client.client.create_client")
    test_client = Client()
    test_client.execute_query = mocker.MagicMock(return_value=client_org_input)

    org = test_client.get_organization("Foo Bar")

    test_client.execute_query.assert_called_once_with(queries.GET_ORG,
                                                      {"orgSlug": "foo-bar"})
    assert org.acronym == "FOO"
    assert org.name == "Foo Bar"
    assert org.zone == "FED"
    assert org.sector == "TBS"
    assert org.country == "Canada"
    assert org.province == "Ontario"
    assert org.city == "Ottawa"
    assert org.domain_count == 10
    assert org.verified