File: ro_api_test.py

package info (click to toggle)
python-bugzilla 3.3.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,116 kB
  • sloc: python: 6,160; makefile: 7
file content (101 lines) | stat: -rw-r--r-- 3,455 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# Ignoring pytest-related warnings:
# pylint: disable=redefined-outer-name,unused-argument
import pytest

from bugzilla import BugzillaError

from ..utils import open_bz
from . import TEST_URL, TEST_PRODUCTS, TEST_SUSE_COMPONENTS, TEST_OWNER


def test_rest_xmlrpc_detection(mocked_responses):
    # The default: use XMLRPC
    bz = open_bz(url=TEST_URL)
    assert bz.is_xmlrpc()
    assert "/xmlrpc.cgi" in bz.url

    # See /rest in the URL, so use REST
    bz = open_bz(url=TEST_URL + "/rest")
    assert bz.is_rest()
    with pytest.raises(BugzillaError) as e:
        dummy = bz._proxy  # pylint: disable=protected-access
    assert "raw XMLRPC access is not provided" in str(e)

    # See /xmlrpc.cgi in the URL, so use XMLRPC
    bz = open_bz(url=TEST_URL + "/xmlrpc.cgi")
    assert "/xmlrpc.cgi" in bz.url
    assert bz.is_xmlrpc()
    assert bz._proxy  # pylint: disable=protected-access


def test_apikey_error_scraping(mocked_responses):
    # Ensure the API key does not leak into any requests exceptions
    fakekey = "FOOBARMYKEY"
    with pytest.raises(Exception) as e:
        open_bz("https://httpstat.us/400&foo",
                force_xmlrpc=True, api_key=fakekey)
    assert "Client Error" in str(e.value)
    assert fakekey not in str(e.value)

    with pytest.raises(Exception) as e:
        open_bz("https://httpstat.us/400&foo",
                force_rest=True, api_key=fakekey)
    assert "Client Error" in str(e.value)
    assert fakekey not in str(e.value)


def test_xmlrpc_bad_url(mocked_responses):
    with pytest.raises(BugzillaError) as e:
        open_bz(url="https://example.com/#xmlrpc", force_xmlrpc=True)
    assert "URL may not be an XMLRPC URL" in str(e)


def test_get_products(mocked_responses, backends):
    bz = open_bz(url=TEST_URL, **backends)

    assert len(bz.products) == 3
    assert {p["name"] for p in bz.products} == TEST_PRODUCTS

    rhel = next(p for p in bz.products if p["id"] == 2)
    assert {v["name"] for v in rhel["versions"]} == {"9.0", "9.1", "unspecified"}


def test_get_components(mocked_responses, backends):
    bz = open_bz(url=TEST_URL, **backends)
    components = bz.getcomponents(product="SUSE Linux Enterprise Server 15 SP6")
    assert len(components) == 2
    assert set(components) == TEST_SUSE_COMPONENTS


def test_get_component_detail(mocked_responses, backends):
    bz = open_bz(url=TEST_URL, **backends)
    component = bz.getcomponentdetails(product="Red Hat Enterprise Linux 9",
                                       component="python-bugzilla")
    assert component["id"] == 2
    assert component["default_assigned_to"] == TEST_OWNER


def test_query(mocked_responses, backends):
    bz = open_bz(url=TEST_URL, **backends)
    query = bz.build_query(product="Red Hat Enterprise Linux 9", component="python-bugzilla")
    bugs = bz.query(query=query)

    assert len(bugs) == 1
    assert bugs[0].id == 2
    assert bugs[0].summary == "Expect the Spanish inquisition"

    bz = open_bz(url=TEST_URL, **backends)
    query = bz.build_query(product="SUSE Linux Enterprise Server 15 SP6")
    bugs = bz.query(query=query)

    assert len(bugs) == 1
    assert bugs[0].id == 1
    assert bugs[0].whiteboard == "AV:N/AC:L/PR:H/UI:N/S:U/C:L/I:N/A:L"


def test_get_bug_alias(mocked_responses, backends):
    bz = open_bz(url=TEST_URL, **backends)
    bug = bz.getbug("FOO-1")

    assert bug.id == 1
    assert bug.summary == "ZeroDivisionError in function foo_bar()"