Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-resultsdb_api for openSUSE:Factory checked in at 2022-11-07 13:51:47 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-resultsdb_api (Old) and /work/SRC/openSUSE:Factory/.python-resultsdb_api.new.1597 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-resultsdb_api" Mon Nov 7 13:51:47 2022 rev:3 rq:1034087 version:2.1.5 Changes: -------- --- /work/SRC/openSUSE:Factory/python-resultsdb_api/python-resultsdb_api.changes 2020-03-17 13:08:55.317742604 +0100 +++ /work/SRC/openSUSE:Factory/.python-resultsdb_api.new.1597/python-resultsdb_api.changes 2022-11-07 13:51:52.935865905 +0100 @@ -1,0 +2,7 @@ +Sat Nov 5 12:39:55 UTC 2022 - John Vandenberg <jay...@gmail.com> + +- Activate test suite +- Update to v2.1.5 + * No changelog available + +------------------------------------------------------------------- Old: ---- resultsdb_api-2.1.3.tar.gz New: ---- resultsdb_api-2.1.5.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-resultsdb_api.spec ++++++ --- /var/tmp/diff_new_pack.NkOfZA/_old 2022-11-07 13:51:53.875871189 +0100 +++ /var/tmp/diff_new_pack.NkOfZA/_new 2022-11-07 13:51:53.883871233 +0100 @@ -1,7 +1,7 @@ # # spec file for package python-resultsdb_api # -# Copyright (c) 2020 SUSE LLC +# Copyright (c) 2022 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -18,7 +18,7 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} Name: python-resultsdb_api -Version: 2.1.3 +Version: 2.1.5 Release: 0 Summary: Library for simplifying the communication with ResultsDB License: GPL-2.0-or-later @@ -54,13 +54,12 @@ %python_expand %fdupes %{buildroot}%{$python_sitelib} %check -# https://pagure.io/taskotron/resultsdb_api/issue/1 -# It has tests but they don't work... -#%%pytest +%pytest --functional testing/ %files %{python_files} %doc README.md %license LICENSE -%{python_sitelib}/* +%{python_sitelib}/resultsdb_api* +%pycache_only %{python_sitelib}/__pycache__/ %changelog ++++++ resultsdb_api-2.1.3.tar.gz -> resultsdb_api-2.1.5.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/resultsdb_api-2.1.3/.gitignore new/resultsdb_api-2.1.5/.gitignore --- old/resultsdb_api-2.1.3/.gitignore 2018-03-28 15:14:06.000000000 +0200 +++ new/resultsdb_api-2.1.5/.gitignore 2021-11-14 10:41:38.000000000 +0100 @@ -12,3 +12,6 @@ htmlcov/ test_env/ .cache +coverage.xml +pep8.out +.tox/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/resultsdb_api-2.1.3/MANIFEST new/resultsdb_api-2.1.5/MANIFEST --- old/resultsdb_api-2.1.3/MANIFEST 2018-03-27 17:28:16.000000000 +0200 +++ new/resultsdb_api-2.1.5/MANIFEST 1970-01-01 01:00:00.000000000 +0100 @@ -1,3 +0,0 @@ -README.md -resultsdb_api.py -setup.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/resultsdb_api-2.1.3/MANIFEST.in new/resultsdb_api-2.1.5/MANIFEST.in --- old/resultsdb_api-2.1.3/MANIFEST.in 1970-01-01 01:00:00.000000000 +0100 +++ new/resultsdb_api-2.1.5/MANIFEST.in 2021-11-14 10:41:38.000000000 +0100 @@ -0,0 +1,2 @@ +include *.requires +include README.md diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/resultsdb_api-2.1.3/Makefile new/resultsdb_api-2.1.5/Makefile --- old/resultsdb_api-2.1.3/Makefile 2019-05-28 15:07:04.000000000 +0200 +++ new/resultsdb_api-2.1.5/Makefile 2021-11-14 10:41:38.000000000 +0100 @@ -81,7 +81,6 @@ .PHONY: mockbuild mockbuild: mocksrpm mock -r $(BUILDTARGET) --no-clean --rebuild $(NVR).$(TARGETDIST).src.rpm - cp /var/lib/mock/$(BUILDTARGET)/result/python2-resultsdb_api-$(VERSION)-$(RELEASE).$(TARGETDIST).noarch.rpm . cp /var/lib/mock/$(BUILDTARGET)/result/python3-resultsdb_api-$(VERSION)-$(RELEASE).$(TARGETDIST).noarch.rpm . #.PHONY: kojibuild @@ -102,5 +101,5 @@ .PHONY: $(VENV) $(VENV): virtualenv $(VENV) - sh -c "set -e; . $(VENV)/bin/activate; pip install -r requirements.txt; \ + sh -c "set -e; . $(VENV)/bin/activate; pip install -r install.requires -r tests.requires; \ deactivate" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/resultsdb_api-2.1.3/PKG-INFO new/resultsdb_api-2.1.5/PKG-INFO --- old/resultsdb_api-2.1.3/PKG-INFO 2020-03-05 17:30:04.431725300 +0100 +++ new/resultsdb_api-2.1.5/PKG-INFO 2021-11-14 10:46:06.048796400 +0100 @@ -1,12 +1,11 @@ -Metadata-Version: 1.1 +Metadata-Version: 2.1 Name: resultsdb_api -Version: 2.1.3 +Version: 2.1.5 Summary: Library for simplifying the communication with ResultsDB Home-page: https://pagure.io/taskotron/resultsdb_api Author: Josef Skladanka Author-email: jskla...@redhat.com License: UNKNOWN -Description: UNKNOWN Platform: UNKNOWN Classifier: Development Status :: 2 - Pre-Alpha Classifier: Intended Audience :: Developers @@ -19,3 +18,7 @@ Classifier: Topic :: Internet Classifier: Topic :: Scientific/Engineering :: Interface Engine/Protocol Translator Classifier: Topic :: Software Development :: Libraries :: Python Modules +License-File: LICENSE + +UNKNOWN + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/resultsdb_api-2.1.3/install.requires new/resultsdb_api-2.1.5/install.requires --- old/resultsdb_api-2.1.3/install.requires 1970-01-01 01:00:00.000000000 +0100 +++ new/resultsdb_api-2.1.5/install.requires 2021-11-14 10:41:38.000000000 +0100 @@ -0,0 +1,2 @@ +requests >= 2.2.1 +simplejson >= 3.5.3 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/resultsdb_api-2.1.3/python-resultsdb_api.spec new/resultsdb_api-2.1.5/python-resultsdb_api.spec --- old/resultsdb_api-2.1.3/python-resultsdb_api.spec 2019-05-28 15:33:03.000000000 +0200 +++ new/resultsdb_api-2.1.5/python-resultsdb_api.spec 2021-11-14 10:41:38.000000000 +0100 @@ -1,22 +1,18 @@ Name: python-resultsdb_api # NOTE: if you update version, *make sure* to also update `setup.py` -Version: 2.1.3 +Version: 2.1.5 Release: 1%{?dist} Summary: Interface api to ResultsDB License: GPLv2+ URL: https://pagure.io/taskotron/resultsdb_api -Source0: https://qa.fedoraproject.org/releases/resultsdb_api/python-resultsdb_api-%{version}.tar.gz +Source0: https://qa.fedoraproject.org/releases/resultsdb_api/resultsdb_api-%{version}.tar.gz BuildArch: noarch -BuildRequires: git - -%global _description\ +%description Interface api to ResultsDB -%description %_description - %package -n python3-resultsdb_api Summary: %summary Requires: python3-simplejson @@ -30,15 +26,11 @@ BuildRequires: python3-requests BuildRequires: python3-virtualenv -%description -n python3-resultsdb_api %_description +%description -n python3-resultsdb_api +Python3 interface to resultsdb. %prep -%setup -q -n python-resultsdb_api-%{version} - -%check -## FIXME: fix the test suite -## https://pagure.io/taskotron/resultsdb_api/issue/1 -# make test +%autosetup -p1 -n resultsdb_api-%{version} %build %py3_build @@ -46,14 +38,67 @@ %install %py3_install +%check +%pytest + %files -n python3-resultsdb_api %doc README.md %license LICENSE %{python3_sitelib}/resultsdb_api.* %{python3_sitelib}/__pycache__/resultsdb_api.* -%{python3_sitelib}/*.egg-info +%{python3_sitelib}/resultsdb_api-%{version}*.egg-info %changelog +* Sun Nov 14 2021 Frantisek Zatloukal <fzatl...@redhat.com> - 2.1.5-1 +- Drop use of deprecated Retry parameter +- Drop unnecessary `_KEEP` and just `None` instead +- Make tox work (just runs pytest for now) +- Port tests to unittest.mock and ResultsDB API v2 (#1) +- Simplify update_testcase +- update_testcase: fix variable name +- ResultsDBAuth: it's `@staticmethod`, not `@static_method` +- Drop Python 2 string type blob +- Enable tests during the rpm build + +* Sun Nov 14 2021 Frantisek Zatloukal <fzatl...@redhat.com> - 2.1.4-3 +- Revert backported patch for auth code + +* Thu Nov 11 2021 Adam Williamson <awill...@redhat.com> - 2.1.4-2 +- Backport patch to fix critical error in auth code + +* Mon Nov 08 2021 Frantisek Zatloukal <fzatl...@redhat.com> - 2.1.4-1 +- add auth class with basic http auth support + +* Fri Jul 23 2021 Fedora Release Engineering <rel...@fedoraproject.org> - 2.1.3-11 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Fri Jun 04 2021 Python Maint <python-ma...@redhat.com> - 2.1.3-10 +- Rebuilt for Python 3.10 + +* Wed Jan 27 2021 Fedora Release Engineering <rel...@fedoraproject.org> - 2.1.3-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Mon Nov 09 2020 Frantisek Zatloukal <fzatl...@redhat.com> - 2.1.3-8 +- Drop BR: git + +* Wed Jul 29 2020 Fedora Release Engineering <rel...@fedoraproject.org> - 2.1.3-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Tue May 26 2020 Miro Hron??ok <mhron...@redhat.com> - 2.1.3-6 +- Rebuilt for Python 3.9 + +* Thu Jan 30 2020 Fedora Release Engineering <rel...@fedoraproject.org> - 2.1.3-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Thu Oct 03 2019 Miro Hron??ok <mhron...@redhat.com> - 2.1.3-4 +- Rebuilt for Python 3.8.0rc1 (#1748018) + +* Mon Aug 19 2019 Miro Hron??ok <mhron...@redhat.com> - 2.1.3-3 +- Rebuilt for Python 3.8 + +* Fri Jul 26 2019 Fedora Release Engineering <rel...@fedoraproject.org> - 2.1.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + * Tue May 28 2019 Frantisek Zatloukal <fzatl...@redhat.com> - 2.1.3-1 - Fix 'RetryError' object has no attribute 'message' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/resultsdb_api-2.1.3/requirements.txt new/resultsdb_api-2.1.5/requirements.txt --- old/resultsdb_api-2.1.3/requirements.txt 2018-06-11 14:50:12.000000000 +0200 +++ new/resultsdb_api-2.1.5/requirements.txt 1970-01-01 01:00:00.000000000 +0100 @@ -1,16 +0,0 @@ -# This is a list of pypi packages to be installed into virtualenv. Alternatively, -# you can install these as RPMs instead of pypi packages. See the dependecies -# with: -# $ rpmspec -q --requires python-resultsdb_api.spec -# $ rpmspec -q --buildrequires python-resultsdb_api.spec - -# A note for maintainers: Please keep this list in sync and in the same order -# as the spec file. - -requests >= 2.2.1 -simplejson >= 3.5.3 - -# Test suite dependencies -dingus >= 0.3.4 -pytest >= 2.4.2 -pytest-cov >= 1.6 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/resultsdb_api-2.1.3/resultsdb_api.egg-info/PKG-INFO new/resultsdb_api-2.1.5/resultsdb_api.egg-info/PKG-INFO --- old/resultsdb_api-2.1.3/resultsdb_api.egg-info/PKG-INFO 2020-03-05 17:30:04.000000000 +0100 +++ new/resultsdb_api-2.1.5/resultsdb_api.egg-info/PKG-INFO 2021-11-14 10:46:05.000000000 +0100 @@ -1,12 +1,11 @@ -Metadata-Version: 1.1 +Metadata-Version: 2.1 Name: resultsdb-api -Version: 2.1.3 +Version: 2.1.5 Summary: Library for simplifying the communication with ResultsDB Home-page: https://pagure.io/taskotron/resultsdb_api Author: Josef Skladanka Author-email: jskla...@redhat.com License: UNKNOWN -Description: UNKNOWN Platform: UNKNOWN Classifier: Development Status :: 2 - Pre-Alpha Classifier: Intended Audience :: Developers @@ -19,3 +18,7 @@ Classifier: Topic :: Internet Classifier: Topic :: Scientific/Engineering :: Interface Engine/Protocol Translator Classifier: Topic :: Software Development :: Libraries :: Python Modules +License-File: LICENSE + +UNKNOWN + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/resultsdb_api-2.1.3/resultsdb_api.egg-info/SOURCES.txt new/resultsdb_api-2.1.5/resultsdb_api.egg-info/SOURCES.txt --- old/resultsdb_api-2.1.3/resultsdb_api.egg-info/SOURCES.txt 2020-03-05 17:30:04.000000000 +0100 +++ new/resultsdb_api-2.1.5/resultsdb_api.egg-info/SOURCES.txt 2021-11-14 10:46:05.000000000 +0100 @@ -2,14 +2,15 @@ .arclint .gitignore LICENSE -MANIFEST +MANIFEST.in Makefile README.md +install.requires pytest.ini python-resultsdb_api.spec -requirements.txt resultsdb_api.py setup.py +tests.requires tokengetter.py tox.ini resultsdb_api.egg-info/PKG-INFO diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/resultsdb_api-2.1.3/resultsdb_api.egg-info/requires.txt new/resultsdb_api-2.1.5/resultsdb_api.egg-info/requires.txt --- old/resultsdb_api-2.1.3/resultsdb_api.egg-info/requires.txt 2020-03-05 17:30:04.000000000 +0100 +++ new/resultsdb_api-2.1.5/resultsdb_api.egg-info/requires.txt 2021-11-14 10:46:05.000000000 +0100 @@ -1,2 +1,2 @@ -requests -simplejson +requests>=2.2.1 +simplejson>=3.5.3 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/resultsdb_api-2.1.3/resultsdb_api.py new/resultsdb_api-2.1.5/resultsdb_api.py --- old/resultsdb_api-2.1.3/resultsdb_api.py 2019-05-28 15:33:03.000000000 +0200 +++ new/resultsdb_api-2.1.5/resultsdb_api.py 2021-11-14 10:41:38.000000000 +0100 @@ -24,18 +24,9 @@ import simplejson import logging -try: - # make strings unicode on Python 2 - str = unicode -except NameError: - # except on Python 3 they already are, name 'unicode' is not defined - pass - logger = logging.getLogger('resultsdb_api') logger.addHandler(logging.NullHandler()) -_KEEP = object() - def _fparams(expand_kwargs=True): """Gets the parameters of the function, from which _fparams is called and returns the list of params, minus `self`""" @@ -112,20 +103,37 @@ raise ResultsDBapiException('Maximum number of retries exceeded: %s' % message, None) return self.__resultsdb_raise_on_error(r) + +class ResultsDBAuth(object): + """ + Auth class to handle different + request level authentication types. + """ + + @staticmethod + def basic_auth(username, password): + """ + Return `requests.auth.HTTPBasicAuth`. + """ + return requests.auth.HTTPBasicAuth(username, password) + + class ResultsDBapi(object): - def __init__(self, api_url, auth_token=None, max_retries=3, backoff_factor=1.0): + def __init__(self, api_url, auth_token=None, max_retries=3, backoff_factor=1.0, request_auth=None): # remove trailing slash(es), so we don't generate # urls with a double slash which breaks werkzeug # https://github.com/mitsuhiko/werkzeug/issues/491 self.url = api_url.rstrip('/') self.auth_token = auth_token + self.request_auth = request_auth + allowed_methods = list(Retry.DEFAULT_ALLOWED_METHODS) + ["POST"] self._retry = Retry( total=max_retries, backoff_factor=backoff_factor, status_forcelist=(500, 502, 503, 504), - method_whitelist=False # Enables POST retries + allowed_methods=allowed_methods ) self._adapter = HTTPAdapter(max_retries=self._retry) self.session = _ResultsDBSession() @@ -162,15 +170,15 @@ headers = {'Content-type': 'application/json', 'Accept': 'text/plain'} data = _fparams() data['_auth_token'] = self.auth_token - r = self.session.post(url, data=json.dumps(data), headers=headers) + r = self.session.post(url, data=json.dumps(data), headers=headers, auth=self.request_auth) return r.json() - def update_group(self, uuid, ref_url=_KEEP, description=_KEEP): + def update_group(self, uuid, ref_url=None, description=None): data = {} - if ref_url is not _KEEP: + if ref_url is not None: data['ref_url'] = ref_url - if description is not _KEEP: + if description is not None: data['description'] = description if not data: return self.get_group(uuid) @@ -180,7 +188,7 @@ url = "%s/groups" % self.url headers = {'Content-type': 'application/json', 'Accept': 'text/plain'} - r = self.session.post(url, data=json.dumps(data), headers=headers) + r = self.session.post(url, data=json.dumps(data), headers=headers, auth=self.request_auth) return r.json() @@ -201,7 +209,7 @@ data = _fparams(expand_kwargs=False) data['_auth_token'] = self.auth_token headers = {'Content-type': 'application/json', 'Accept': 'text/plain'} - r = self.session.post(url, data=json.dumps(data), headers=headers) + r = self.session.post(url, data=json.dumps(data), headers=headers, auth=self.request_auth) return r.json() @@ -213,7 +221,7 @@ def get_results(self, page=None, limit=None, since=None, outcome=None, groups=None, testcases=None, testcases_like=None, raw_params=None, **kwargs): url = "%s/results" % self.url - r = self.session.get(url, params=self.__prepare_params(_fparams())) + r = self.session.get(url, params=self.__prepare_params(_fparams()), auth=self.request_auth) return r.json() @@ -222,25 +230,14 @@ data = _fparams() data['_auth_token'] = self.auth_token headers = {'Content-type': 'application/json', 'Accept': 'text/plain'} - r = self.session.post(url, data=json.dumps(data), headers=headers) + r = self.session.post(url, data=json.dumps(data), headers=headers, auth=self.request_auth) return r.json() - def update_testcase(self, name, url=_KEEP): - data = {} - if ref_url is not _KEEP: - data['ref_url'] = ref_url - if not data: + def update_testcase(self, name, url=None): + if not url: return self.get_testcase(name) - - data['name'] = name - data['_auth_token'] = self.auth_token - - url = "%s/testcases" % self.url - headers = {'Content-type': 'application/json', 'Accept': 'text/plain'} - r = self.session.post(url, data=json.dumps(data), headers=headers) - - return r.json() + return self.create_testcase(name, ref_url=url) def get_testcase(self, name): url = "%s/testcases/%s" % (self.url, name) @@ -250,6 +247,6 @@ def get_testcases(self, page=None, limit=None, name=None, name_like=None): url = "%s/testcases" % self.url - r = self.session.get(url, params=self.__prepare_params(_fparams())) + r = self.session.get(url, params=self.__prepare_params(_fparams()), auth=self.request_auth) return r.json() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/resultsdb_api-2.1.3/setup.py new/resultsdb_api-2.1.5/setup.py --- old/resultsdb_api-2.1.3/setup.py 2019-05-28 15:33:03.000000000 +0200 +++ new/resultsdb_api-2.1.5/setup.py 2021-11-14 10:41:38.000000000 +0100 @@ -21,12 +21,12 @@ setup( name = 'resultsdb_api', py_modules = ['resultsdb_api'], - version = '2.1.3', + version = '2.1.5', description = 'Library for simplifying the communication with ResultsDB', author = 'Josef Skladanka', author_email = 'jskla...@redhat.com', url = "https://pagure.io/taskotron/resultsdb_api", - install_requires = ['requests', 'simplejson'], + install_requires = open('install.requires').read().splitlines(), classifiers = [ "Development Status :: 2 - Pre-Alpha", "Intended Audience :: Developers", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/resultsdb_api-2.1.3/testing/test_api.py new/resultsdb_api-2.1.5/testing/test_api.py --- old/resultsdb_api-2.1.3/testing/test_api.py 2018-03-27 17:28:16.000000000 +0200 +++ new/resultsdb_api-2.1.5/testing/test_api.py 2021-11-14 10:41:38.000000000 +0100 @@ -23,7 +23,7 @@ import pytest import requests -from dingus import patch +from unittest.mock import patch class TestAPI(): @@ -41,176 +41,104 @@ self.helper = resultsdb_api.ResultsDBapi(self.rdb_url) - @patch('requests.post') - def test_create_testcase(self): - self.helper.create_testcase(self.ref_testcase_name, self.ref_testcase_url) - - post_calls = requests.post.calls() - - rdb_url = post_calls[0][1][0] - headers = post_calls[0][2]['headers'] - data = json.loads(post_calls[0][2]['data']) - - assert rdb_url == "%s/testcases" % self.rdb_url - assert headers['Content-type'] == self.ref_content_type - assert headers['Accept'] == self.ref_accept - assert data['url'] == self.ref_testcase_url - assert data['name'] == self.ref_testcase_name + @patch('requests.Session.send') + def test_create_testcase(self, mocksend): + auth = resultsdb_api.ResultsDBAuth.basic_auth("user", "pass") + authhelper = resultsdb_api.ResultsDBapi(self.rdb_url, request_auth=auth) + + # test twice to test authentication, once without, once with + for (helper, authed) in ((self.helper, False), (authhelper, True)): + mocksend.reset_mock() + helper.create_testcase(self.ref_testcase_name, self.ref_testcase_url) + mocksend.assert_called_once() + request = mocksend.mock_calls[0][1][0] + data = json.loads(request.body) + + assert request.url == "%s/testcases" % self.rdb_url + assert request.headers['Content-type'] == self.ref_content_type + assert request.headers['Accept'] == self.ref_accept + if authed: + assert request.headers['Authorization'] == "Basic dXNlcjpwYXNz" + else: + assert 'Authorization' not in request.headers + assert data['ref_url'] == self.ref_testcase_url + assert data['name'] == self.ref_testcase_name - @patch('requests.put') - def test_update_testcase(self): + @patch('requests.Session.send') + def test_update_testcase(self, mocksend): self.helper.update_testcase(self.ref_testcase_name, self.ref_testcase_url) - put_calls = requests.put.calls() - - rdb_url = put_calls[0][1][0] - headers = put_calls[0][2]['headers'] - data = json.loads(put_calls[0][2]['data']) - - assert rdb_url == "%s/testcases/%s" % (self.rdb_url, self.ref_testcase_name) - assert headers['Content-type'] == self.ref_content_type - assert headers['Accept'] == self.ref_accept - assert data['url'] == self.ref_testcase_url + mocksend.assert_called_once() + request = mocksend.mock_calls[0][1][0] + data = json.loads(request.body) + + assert request.url == "%s/testcases" % (self.rdb_url) + assert request.headers['Content-type'] == self.ref_content_type + assert request.headers['Accept'] == self.ref_accept + assert data['ref_url'] == self.ref_testcase_url + assert data['name'] == self.ref_testcase_name - @patch('requests.get') - def test_get_testcase(self): + @patch('requests.Session.send') + def test_get_testcase(self, mocksend): self.helper.get_testcase(self.ref_testcase_name) - get_calls = requests.get.calls() + mocksend.assert_called_once() + request = mocksend.mock_calls[0][1][0] - rdb_url = get_calls[0][1][0] + assert request.url == "%s/testcases/%s" % (self.rdb_url, self.ref_testcase_name) - assert rdb_url == "%s/testcases/%s" % (self.rdb_url, self.ref_testcase_name) - - @patch('requests.get') - def test_get_testcases(self): + @patch('requests.Session.send') + def test_get_testcases(self, mocksend): self.helper.get_testcases() - get_calls = requests.get.calls() - - rdb_url = get_calls[0][1][0] - - assert rdb_url == "%s/testcases" % self.rdb_url - - @patch('requests.post') - def test_create_job(self): - self.helper.create_job(self.ref_url) - - post_calls = requests.post.calls() - - rdb_url = post_calls[0][1][0] - headers = post_calls[0][2]['headers'] - data = json.loads(post_calls[0][2]['data']) - - assert rdb_url == "%s/jobs" % self.rdb_url - assert headers['Content-type'] == self.ref_content_type - assert headers['Accept'] == self.ref_accept - assert data['ref_url'] == self.ref_url - - @patch('requests.put') - def test_update_job(self): - self.helper.update_job(id=self.ref_job_id, status=self.ref_status) - - put_calls = requests.put.calls() - - rdb_url = put_calls[0][1][0] - headers = put_calls[0][2]['headers'] - data = json.loads(put_calls[0][2]['data']) - - assert rdb_url == "%s/jobs/%s" % (self.rdb_url, self.ref_job_id) - assert headers['Content-type'] == self.ref_content_type - assert headers['Accept'] == self.ref_accept - assert data['status'] == self.ref_status - - def test_update_job_invalid(self): - with pytest.raises(TypeError): - self.helper.update_job() - - @patch('requests.get') - def test_get_job(self): - self.helper.get_job(self.ref_job_id) - - get_calls = requests.get.calls() - - rdb_url = get_calls[0][1][0] + mocksend.assert_called_once() + request = mocksend.mock_calls[0][1][0] - assert rdb_url == "%s/jobs/%s" % (self.rdb_url, self.ref_job_id) + assert request.url == "%s/testcases" % self.rdb_url - def test_get_job_invalid(self): - with pytest.raises(TypeError): - self.helper.get_job() - - @patch('requests.get') - def test_get_jobs(self): - self.helper.get_jobs() - - get_calls = requests.get.calls() - - rdb_url = get_calls[0][1][0] - - assert rdb_url == "%s/jobs" % self.rdb_url - - @patch('requests.get') - def test_get_jobs_params(self): - self.helper.get_jobs(status=self.ref_status) - - get_calls = requests.get.calls() - - rdb_url = get_calls[0][1][0] - params = get_calls[0][2]['params'] - - assert rdb_url == "%s/jobs" % self.rdb_url - assert params['status'] == self.ref_status - - @patch('requests.post') - def test_create_result(self): - self.helper.create_result(self.ref_job_id, self.ref_testcase_name, self.ref_outcome) - - post_calls = requests.post.calls() - - rdb_url = post_calls[0][1][0] - headers = post_calls[0][2]['headers'] - data = json.loads(post_calls[0][2]['data']) - - assert rdb_url == "%s/results" % self.rdb_url - assert headers['Content-type'] == self.ref_content_type - assert headers['Accept'] == self.ref_accept - assert data['job_id'] == self.ref_job_id - assert data['testcase_name'] == self.ref_testcase_name + @patch('requests.Session.send') + def test_create_result(self, mocksend): + self.helper.create_result(self.ref_outcome, self.ref_testcase_name) + + mocksend.assert_called_once() + request = mocksend.mock_calls[0][1][0] + data = json.loads(request.body) + + assert request.url == "%s/results" % self.rdb_url + assert request.headers['Content-type'] == self.ref_content_type + assert request.headers['Accept'] == self.ref_accept + assert data['testcase'] == self.ref_testcase_name assert data['outcome'] == self.ref_outcome - @patch('requests.get') - def test_get_result(self): + @patch('requests.Session.send') + def test_get_result(self, mocksend): self.helper.get_result(self.ref_result_id) - get_calls = requests.get.calls() + mocksend.assert_called_once() + request = mocksend.mock_calls[0][1][0] - rdb_url = get_calls[0][1][0] - - assert rdb_url == "%s/results/%s" % (self.rdb_url, self.ref_job_id) + assert request.url == "%s/results/%s" % (self.rdb_url, self.ref_job_id) def test_get_result_invalid(self): with pytest.raises(TypeError): self.helper.get_result() - @patch('requests.get') - def test_get_results(self): + @patch('requests.Session.send') + def test_get_results(self, mocksend): self.helper.get_results() - get_calls = requests.get.calls() - - rdb_url = get_calls[0][1][0] + mocksend.assert_called_once() + request = mocksend.mock_calls[0][1][0] - assert rdb_url == "%s/results" % self.rdb_url + assert request.url == "%s/results" % self.rdb_url - @patch('requests.get') - def test_get_results_params(self): + @patch('requests.Session.request') + def test_get_results_params(self, mockreq): self.helper.get_results(testcase_name=self.ref_testcase_name, job_id=self.ref_job_id) - get_calls = requests.get.calls() - - rdb_url = get_calls[0][1][0] - params = get_calls[0][2]['params'] + mockreq.assert_called_once() + rdb_url = mockreq.mock_calls[0][1][1] + params = mockreq.mock_calls[0][2]['params'] assert rdb_url == "%s/results" % self.rdb_url assert params['testcase_name'] == self.ref_testcase_name diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/resultsdb_api-2.1.3/tests.requires new/resultsdb_api-2.1.5/tests.requires --- old/resultsdb_api-2.1.3/tests.requires 1970-01-01 01:00:00.000000000 +0100 +++ new/resultsdb_api-2.1.5/tests.requires 2021-11-14 10:41:38.000000000 +0100 @@ -0,0 +1,2 @@ +pytest >= 2.4.2 +pytest-cov >= 1.6 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/resultsdb_api-2.1.3/tox.ini new/resultsdb_api-2.1.5/tox.ini --- old/resultsdb_api-2.1.3/tox.ini 2018-03-28 15:14:06.000000000 +0200 +++ new/resultsdb_api-2.1.5/tox.ini 2021-11-14 10:41:38.000000000 +0100 @@ -1,5 +1,14 @@ -# This is a common file where different test suites/linters can be configured. -# Phabricator uses this file when running `arc unit` or `arc lint`. +[tox] +envlist = py37,py38,py39,py310 +skip_missing_interpreters = true + +[testenv] +deps = + -r{toxinidir}/install.requires + -r{toxinidir}/tests.requires + +commands= + pytest [flake8] max-line-length=99