Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-certbot-dns-digitalocean for openSUSE:Factory checked in at 2023-06-07 23:08:22 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-certbot-dns-digitalocean (Old) and /work/SRC/openSUSE:Factory/.python-certbot-dns-digitalocean.new.15902 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-certbot-dns-digitalocean" Wed Jun 7 23:08:22 2023 rev:37 rq:1091323 version:2.6.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-certbot-dns-digitalocean/python-certbot-dns-digitalocean.changes 2022-10-27 13:55:14.796896295 +0200 +++ /work/SRC/openSUSE:Factory/.python-certbot-dns-digitalocean.new.15902/python-certbot-dns-digitalocean.changes 2023-06-07 23:08:57.599879196 +0200 @@ -1,0 +2,10 @@ +Wed Jun 7 16:05:11 UTC 2023 - Markéta Machová <mmach...@suse.com> + +- update to version 2.6.0 + * Support for Python 3.11 was added to Certbot and all of its components. + * All Certbot components now require pytest to run tests. + * Packaged tests for all Certbot components besides josepy were moved inside the _internal/tests module. + * There is now a new Other annotated challenge object to allow plugins to support entirely novel challenges. + * Certbot no longer depends on zope. + +------------------------------------------------------------------- Old: ---- certbot-dns-digitalocean-1.31.0.tar.gz New: ---- certbot-dns-digitalocean-2.6.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-certbot-dns-digitalocean.spec ++++++ --- /var/tmp/diff_new_pack.N9mLu8/_old 2023-06-07 23:08:58.123882239 +0200 +++ /var/tmp/diff_new_pack.N9mLu8/_new 2023-06-07 23:08:58.123882239 +0200 @@ -1,7 +1,7 @@ # # spec file for package python-certbot-dns-digitalocean # -# Copyright (c) 2022 SUSE LLC +# Copyright (c) 2023 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -19,7 +19,7 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} %define skip_python2 1 Name: python-certbot-dns-digitalocean -Version: 1.31.0 +Version: 2.6.0 Release: 0 Summary: DigitalOcean Authenticator plugin for Certbot License: Apache-2.0 @@ -34,8 +34,6 @@ Requires: python-acme >= %{version} Requires: python-certbot >= %{version} Requires: python-digitalocean >= 1.11 -Requires: python-six -Requires: python-zope.interface BuildArch: noarch %python_subpackages ++++++ certbot-dns-digitalocean-1.31.0.tar.gz -> certbot-dns-digitalocean-2.6.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot-dns-digitalocean-1.31.0/MANIFEST.in new/certbot-dns-digitalocean-2.6.0/MANIFEST.in --- old/certbot-dns-digitalocean-1.31.0/MANIFEST.in 2022-10-04 16:40:41.000000000 +0200 +++ new/certbot-dns-digitalocean-2.6.0/MANIFEST.in 2023-05-09 21:44:36.000000000 +0200 @@ -1,7 +1,6 @@ include LICENSE.txt include README.rst recursive-include docs * -recursive-include tests * include certbot_dns_digitalocean/py.typed global-exclude __pycache__ global-exclude *.py[cod] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot-dns-digitalocean-1.31.0/PKG-INFO new/certbot-dns-digitalocean-2.6.0/PKG-INFO --- old/certbot-dns-digitalocean-1.31.0/PKG-INFO 2022-10-04 16:41:01.283488500 +0200 +++ new/certbot-dns-digitalocean-2.6.0/PKG-INFO 2023-05-09 21:44:47.242066000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: certbot-dns-digitalocean -Version: 1.31.0 +Version: 2.6.0 Summary: DigitalOcean DNS Authenticator plugin for Certbot Home-page: https://github.com/certbot/certbot Author: Certbot Project @@ -17,6 +17,7 @@ Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 Classifier: Topic :: Internet :: WWW/HTTP Classifier: Topic :: Security Classifier: Topic :: System :: Installation/Setup @@ -25,4 +26,5 @@ Classifier: Topic :: Utilities Requires-Python: >=3.7 Provides-Extra: docs +Provides-Extra: test License-File: LICENSE.txt diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot-dns-digitalocean-1.31.0/certbot_dns_digitalocean/_internal/dns_digitalocean.py new/certbot-dns-digitalocean-2.6.0/certbot_dns_digitalocean/_internal/dns_digitalocean.py --- old/certbot-dns-digitalocean-1.31.0/certbot_dns_digitalocean/_internal/dns_digitalocean.py 2022-10-04 16:40:41.000000000 +0200 +++ new/certbot-dns-digitalocean-2.6.0/certbot_dns_digitalocean/_internal/dns_digitalocean.py 2023-05-09 21:44:36.000000000 +0200 @@ -2,6 +2,7 @@ import logging from typing import Any from typing import Callable +from typing import cast from typing import Optional import digitalocean @@ -56,7 +57,7 @@ def _get_digitalocean_client(self) -> "_DigitalOceanClient": if not self.credentials: # pragma: no cover raise errors.Error("Plugin has not been prepared.") - return _DigitalOceanClient(self.credentials.conf('token')) + return _DigitalOceanClient(cast(str, self.credentials.conf('token'))) class _DigitalOceanClient: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot-dns-digitalocean-1.31.0/certbot_dns_digitalocean/_internal/tests/__init__.py new/certbot-dns-digitalocean-2.6.0/certbot_dns_digitalocean/_internal/tests/__init__.py --- old/certbot-dns-digitalocean-1.31.0/certbot_dns_digitalocean/_internal/tests/__init__.py 1970-01-01 01:00:00.000000000 +0100 +++ new/certbot-dns-digitalocean-2.6.0/certbot_dns_digitalocean/_internal/tests/__init__.py 2023-05-09 21:44:36.000000000 +0200 @@ -0,0 +1 @@ +"""certbot-dns-digitalocean tests""" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot-dns-digitalocean-1.31.0/certbot_dns_digitalocean/_internal/tests/dns_digitalocean_test.py new/certbot-dns-digitalocean-2.6.0/certbot_dns_digitalocean/_internal/tests/dns_digitalocean_test.py --- old/certbot-dns-digitalocean-1.31.0/certbot_dns_digitalocean/_internal/tests/dns_digitalocean_test.py 1970-01-01 01:00:00.000000000 +0100 +++ new/certbot-dns-digitalocean-2.6.0/certbot_dns_digitalocean/_internal/tests/dns_digitalocean_test.py 2023-05-09 21:44:36.000000000 +0200 @@ -0,0 +1,174 @@ +"""Tests for certbot_dns_digitalocean._internal.dns_digitalocean.""" + +import sys +import unittest +from unittest import mock + +import digitalocean +import pytest + +from certbot import errors +from certbot.compat import os +from certbot.plugins import dns_test_common +from certbot.plugins.dns_test_common import DOMAIN +from certbot.tests import util as test_util + +API_ERROR = digitalocean.DataReadError() +TOKEN = 'a-token' + + +class AuthenticatorTest(test_util.TempDirTestCase, dns_test_common.BaseAuthenticatorTest): + + def setUp(self): + from certbot_dns_digitalocean._internal.dns_digitalocean import Authenticator + + super().setUp() + + path = os.path.join(self.tempdir, 'file.ini') + dns_test_common.write({"digitalocean_token": TOKEN}, path) + + self.config = mock.MagicMock(digitalocean_credentials=path, + digitalocean_propagation_seconds=0) # don't wait during tests + + self.auth = Authenticator(self.config, "digitalocean") + + self.mock_client = mock.MagicMock() + # _get_digitalocean_client | pylint: disable=protected-access + self.auth._get_digitalocean_client = mock.MagicMock(return_value=self.mock_client) + + @test_util.patch_display_util() + def test_perform(self, unused_mock_get_utility): + self.auth.perform([self.achall]) + + expected = [mock.call.add_txt_record(DOMAIN, '_acme-challenge.'+DOMAIN, mock.ANY, 30)] + assert expected == self.mock_client.mock_calls + + def test_cleanup(self): + # _attempt_cleanup | pylint: disable=protected-access + self.auth._attempt_cleanup = True + self.auth.cleanup([self.achall]) + + expected = [mock.call.del_txt_record(DOMAIN, '_acme-challenge.'+DOMAIN, mock.ANY)] + assert expected == self.mock_client.mock_calls + + +class DigitalOceanClientTest(unittest.TestCase): + + id_num = 1 + record_prefix = "_acme-challenge" + record_name = record_prefix + "." + DOMAIN + record_content = "bar" + record_ttl = 60 + + def setUp(self): + from certbot_dns_digitalocean._internal.dns_digitalocean import _DigitalOceanClient + + self.digitalocean_client = _DigitalOceanClient(TOKEN) + + self.manager = mock.MagicMock() + self.digitalocean_client.manager = self.manager + + def test_add_txt_record(self): + wrong_domain_mock = mock.MagicMock() + wrong_domain_mock.name = "other.invalid" + wrong_domain_mock.create_new_domain_record.side_effect = AssertionError('Wrong Domain') + + domain_mock = mock.MagicMock() + domain_mock.name = DOMAIN + domain_mock.create_new_domain_record.return_value = {'domain_record': {'id': self.id_num}} + + self.manager.get_all_domains.return_value = [wrong_domain_mock, domain_mock] + + self.digitalocean_client.add_txt_record(DOMAIN, self.record_name, self.record_content, + self.record_ttl) + + domain_mock.create_new_domain_record.assert_called_with(type='TXT', + name=self.record_prefix, + data=self.record_content, + ttl=self.record_ttl) + + def test_add_txt_record_fail_to_find_domain(self): + self.manager.get_all_domains.return_value = [] + + with pytest.raises(errors.PluginError): + self.digitalocean_client.add_txt_record(DOMAIN, self.record_name, self.record_content, self.record_ttl) + + def test_add_txt_record_error_finding_domain(self): + self.manager.get_all_domains.side_effect = API_ERROR + + with pytest.raises(errors.PluginError): + self.digitalocean_client.add_txt_record(DOMAIN, self.record_name, self.record_content, self.record_ttl) + + def test_add_txt_record_error_creating_record(self): + domain_mock = mock.MagicMock() + domain_mock.name = DOMAIN + domain_mock.create_new_domain_record.side_effect = API_ERROR + + self.manager.get_all_domains.return_value = [domain_mock] + + with pytest.raises(errors.PluginError): + self.digitalocean_client.add_txt_record(DOMAIN, self.record_name, self.record_content, self.record_ttl) + + def test_del_txt_record(self): + first_record_mock = mock.MagicMock() + first_record_mock.type = 'TXT' + first_record_mock.name = "DIFFERENT" + first_record_mock.data = self.record_content + + correct_record_mock = mock.MagicMock() + correct_record_mock.type = 'TXT' + correct_record_mock.name = self.record_prefix + correct_record_mock.data = self.record_content + + last_record_mock = mock.MagicMock() + last_record_mock.type = 'TXT' + last_record_mock.name = self.record_prefix + last_record_mock.data = "DIFFERENT" + + domain_mock = mock.MagicMock() + domain_mock.name = DOMAIN + domain_mock.get_records.return_value = [first_record_mock, + correct_record_mock, + last_record_mock] + + self.manager.get_all_domains.return_value = [domain_mock] + + self.digitalocean_client.del_txt_record(DOMAIN, self.record_name, self.record_content) + + assert correct_record_mock.destroy.called + + assert not first_record_mock.destroy.call_args_list + assert not last_record_mock.destroy.call_args_list + + def test_del_txt_record_error_finding_domain(self): + self.manager.get_all_domains.side_effect = API_ERROR + + self.digitalocean_client.del_txt_record(DOMAIN, self.record_name, self.record_content) + + def test_del_txt_record_error_finding_record(self): + domain_mock = mock.MagicMock() + domain_mock.name = DOMAIN + domain_mock.get_records.side_effect = API_ERROR + + self.manager.get_all_domains.return_value = [domain_mock] + + self.digitalocean_client.del_txt_record(DOMAIN, self.record_name, self.record_content) + + def test_del_txt_record_error_deleting_record(self): + record_mock = mock.MagicMock() + record_mock.type = 'TXT' + record_mock.name = self.record_prefix + record_mock.data = self.record_content + record_mock.destroy.side_effect = API_ERROR + + domain_mock = mock.MagicMock() + domain_mock.name = DOMAIN + domain_mock.get_records.return_value = [record_mock] + + self.manager.get_all_domains.return_value = [domain_mock] + + self.digitalocean_client.del_txt_record(DOMAIN, self.record_name, self.record_content) + + +if __name__ == "__main__": + sys.exit(pytest.main(sys.argv[1:] + [__file__])) # pragma: no cover diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot-dns-digitalocean-1.31.0/certbot_dns_digitalocean.egg-info/PKG-INFO new/certbot-dns-digitalocean-2.6.0/certbot_dns_digitalocean.egg-info/PKG-INFO --- old/certbot-dns-digitalocean-1.31.0/certbot_dns_digitalocean.egg-info/PKG-INFO 2022-10-04 16:41:01.000000000 +0200 +++ new/certbot-dns-digitalocean-2.6.0/certbot_dns_digitalocean.egg-info/PKG-INFO 2023-05-09 21:44:47.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: certbot-dns-digitalocean -Version: 1.31.0 +Version: 2.6.0 Summary: DigitalOcean DNS Authenticator plugin for Certbot Home-page: https://github.com/certbot/certbot Author: Certbot Project @@ -17,6 +17,7 @@ Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 Classifier: Topic :: Internet :: WWW/HTTP Classifier: Topic :: Security Classifier: Topic :: System :: Installation/Setup @@ -25,4 +26,5 @@ Classifier: Topic :: Utilities Requires-Python: >=3.7 Provides-Extra: docs +Provides-Extra: test License-File: LICENSE.txt diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot-dns-digitalocean-1.31.0/certbot_dns_digitalocean.egg-info/SOURCES.txt new/certbot-dns-digitalocean-2.6.0/certbot_dns_digitalocean.egg-info/SOURCES.txt --- old/certbot-dns-digitalocean-1.31.0/certbot_dns_digitalocean.egg-info/SOURCES.txt 2022-10-04 16:41:01.000000000 +0200 +++ new/certbot-dns-digitalocean-2.6.0/certbot_dns_digitalocean.egg-info/SOURCES.txt 2023-05-09 21:44:47.000000000 +0200 @@ -12,10 +12,11 @@ certbot_dns_digitalocean.egg-info/top_level.txt certbot_dns_digitalocean/_internal/__init__.py certbot_dns_digitalocean/_internal/dns_digitalocean.py +certbot_dns_digitalocean/_internal/tests/__init__.py +certbot_dns_digitalocean/_internal/tests/dns_digitalocean_test.py docs/.gitignore docs/Makefile docs/api.rst docs/conf.py docs/index.rst -docs/make.bat -tests/dns_digitalocean_test.py \ No newline at end of file +docs/make.bat \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot-dns-digitalocean-1.31.0/certbot_dns_digitalocean.egg-info/requires.txt new/certbot-dns-digitalocean-2.6.0/certbot_dns_digitalocean.egg-info/requires.txt --- old/certbot-dns-digitalocean-1.31.0/certbot_dns_digitalocean.egg-info/requires.txt 2022-10-04 16:41:01.000000000 +0200 +++ new/certbot-dns-digitalocean-2.6.0/certbot_dns_digitalocean.egg-info/requires.txt 2023-05-09 21:44:47.000000000 +0200 @@ -1,8 +1,11 @@ python-digitalocean>=1.11 setuptools>=41.6.0 -acme>=1.31.0 -certbot>=1.31.0 +acme>=2.6.0 +certbot>=2.6.0 [docs] Sphinx>=1.0 sphinx_rtd_theme + +[test] +pytest diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot-dns-digitalocean-1.31.0/setup.py new/certbot-dns-digitalocean-2.6.0/setup.py --- old/certbot-dns-digitalocean-1.31.0/setup.py 2022-10-04 16:40:42.000000000 +0200 +++ new/certbot-dns-digitalocean-2.6.0/setup.py 2023-05-09 21:44:37.000000000 +0200 @@ -4,7 +4,7 @@ from setuptools import find_packages from setuptools import setup -version = '1.31.0' +version = '2.6.0' install_requires = [ 'python-digitalocean>=1.11', # 1.15.0 or newer is recommended for TTL support @@ -30,6 +30,10 @@ 'sphinx_rtd_theme', ] +test_extras = [ + 'pytest', +] + setup( name='certbot-dns-digitalocean', version=version, @@ -51,6 +55,7 @@ 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', + 'Programming Language :: Python :: 3.11', 'Topic :: Internet :: WWW/HTTP', 'Topic :: Security', 'Topic :: System :: Installation/Setup', @@ -64,6 +69,7 @@ install_requires=install_requires, extras_require={ 'docs': docs_extras, + 'test': test_extras, }, entry_points={ 'certbot.plugins': [ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certbot-dns-digitalocean-1.31.0/tests/dns_digitalocean_test.py new/certbot-dns-digitalocean-2.6.0/tests/dns_digitalocean_test.py --- old/certbot-dns-digitalocean-1.31.0/tests/dns_digitalocean_test.py 2022-10-04 16:40:41.000000000 +0200 +++ new/certbot-dns-digitalocean-2.6.0/tests/dns_digitalocean_test.py 1970-01-01 01:00:00.000000000 +0100 @@ -1,178 +0,0 @@ -"""Tests for certbot_dns_digitalocean._internal.dns_digitalocean.""" - -import unittest - -import digitalocean -try: - import mock -except ImportError: # pragma: no cover - from unittest import mock # type: ignore - -from certbot import errors -from certbot.compat import os -from certbot.plugins import dns_test_common -from certbot.plugins.dns_test_common import DOMAIN -from certbot.tests import util as test_util - -API_ERROR = digitalocean.DataReadError() -TOKEN = 'a-token' - - -class AuthenticatorTest(test_util.TempDirTestCase, dns_test_common.BaseAuthenticatorTest): - - def setUp(self): - from certbot_dns_digitalocean._internal.dns_digitalocean import Authenticator - - super().setUp() - - path = os.path.join(self.tempdir, 'file.ini') - dns_test_common.write({"digitalocean_token": TOKEN}, path) - - self.config = mock.MagicMock(digitalocean_credentials=path, - digitalocean_propagation_seconds=0) # don't wait during tests - - self.auth = Authenticator(self.config, "digitalocean") - - self.mock_client = mock.MagicMock() - # _get_digitalocean_client | pylint: disable=protected-access - self.auth._get_digitalocean_client = mock.MagicMock(return_value=self.mock_client) - - @test_util.patch_display_util() - def test_perform(self, unused_mock_get_utility): - self.auth.perform([self.achall]) - - expected = [mock.call.add_txt_record(DOMAIN, '_acme-challenge.'+DOMAIN, mock.ANY, 30)] - self.assertEqual(expected, self.mock_client.mock_calls) - - def test_cleanup(self): - # _attempt_cleanup | pylint: disable=protected-access - self.auth._attempt_cleanup = True - self.auth.cleanup([self.achall]) - - expected = [mock.call.del_txt_record(DOMAIN, '_acme-challenge.'+DOMAIN, mock.ANY)] - self.assertEqual(expected, self.mock_client.mock_calls) - - -class DigitalOceanClientTest(unittest.TestCase): - - id_num = 1 - record_prefix = "_acme-challenge" - record_name = record_prefix + "." + DOMAIN - record_content = "bar" - record_ttl = 60 - - def setUp(self): - from certbot_dns_digitalocean._internal.dns_digitalocean import _DigitalOceanClient - - self.digitalocean_client = _DigitalOceanClient(TOKEN) - - self.manager = mock.MagicMock() - self.digitalocean_client.manager = self.manager - - def test_add_txt_record(self): - wrong_domain_mock = mock.MagicMock() - wrong_domain_mock.name = "other.invalid" - wrong_domain_mock.create_new_domain_record.side_effect = AssertionError('Wrong Domain') - - domain_mock = mock.MagicMock() - domain_mock.name = DOMAIN - domain_mock.create_new_domain_record.return_value = {'domain_record': {'id': self.id_num}} - - self.manager.get_all_domains.return_value = [wrong_domain_mock, domain_mock] - - self.digitalocean_client.add_txt_record(DOMAIN, self.record_name, self.record_content, - self.record_ttl) - - domain_mock.create_new_domain_record.assert_called_with(type='TXT', - name=self.record_prefix, - data=self.record_content, - ttl=self.record_ttl) - - def test_add_txt_record_fail_to_find_domain(self): - self.manager.get_all_domains.return_value = [] - - self.assertRaises(errors.PluginError, - self.digitalocean_client.add_txt_record, - DOMAIN, self.record_name, self.record_content, self.record_ttl) - - def test_add_txt_record_error_finding_domain(self): - self.manager.get_all_domains.side_effect = API_ERROR - - self.assertRaises(errors.PluginError, - self.digitalocean_client.add_txt_record, - DOMAIN, self.record_name, self.record_content, self.record_ttl) - - def test_add_txt_record_error_creating_record(self): - domain_mock = mock.MagicMock() - domain_mock.name = DOMAIN - domain_mock.create_new_domain_record.side_effect = API_ERROR - - self.manager.get_all_domains.return_value = [domain_mock] - - self.assertRaises(errors.PluginError, - self.digitalocean_client.add_txt_record, - DOMAIN, self.record_name, self.record_content, self.record_ttl) - - def test_del_txt_record(self): - first_record_mock = mock.MagicMock() - first_record_mock.type = 'TXT' - first_record_mock.name = "DIFFERENT" - first_record_mock.data = self.record_content - - correct_record_mock = mock.MagicMock() - correct_record_mock.type = 'TXT' - correct_record_mock.name = self.record_prefix - correct_record_mock.data = self.record_content - - last_record_mock = mock.MagicMock() - last_record_mock.type = 'TXT' - last_record_mock.name = self.record_prefix - last_record_mock.data = "DIFFERENT" - - domain_mock = mock.MagicMock() - domain_mock.name = DOMAIN - domain_mock.get_records.return_value = [first_record_mock, - correct_record_mock, - last_record_mock] - - self.manager.get_all_domains.return_value = [domain_mock] - - self.digitalocean_client.del_txt_record(DOMAIN, self.record_name, self.record_content) - - self.assertTrue(correct_record_mock.destroy.called) - - self.assertFalse(first_record_mock.destroy.call_args_list) - self.assertFalse(last_record_mock.destroy.call_args_list) - - def test_del_txt_record_error_finding_domain(self): - self.manager.get_all_domains.side_effect = API_ERROR - - self.digitalocean_client.del_txt_record(DOMAIN, self.record_name, self.record_content) - - def test_del_txt_record_error_finding_record(self): - domain_mock = mock.MagicMock() - domain_mock.name = DOMAIN - domain_mock.get_records.side_effect = API_ERROR - - self.manager.get_all_domains.return_value = [domain_mock] - - self.digitalocean_client.del_txt_record(DOMAIN, self.record_name, self.record_content) - - def test_del_txt_record_error_deleting_record(self): - record_mock = mock.MagicMock() - record_mock.type = 'TXT' - record_mock.name = self.record_prefix - record_mock.data = self.record_content - record_mock.destroy.side_effect = API_ERROR - - domain_mock = mock.MagicMock() - domain_mock.name = DOMAIN - domain_mock.get_records.return_value = [record_mock] - - self.manager.get_all_domains.return_value = [domain_mock] - - self.digitalocean_client.del_txt_record(DOMAIN, self.record_name, self.record_content) - - -if __name__ == "__main__": - unittest.main() # pragma: no cover