Skip to content

Commit

Permalink
Fix tests
Browse files Browse the repository at this point in the history
Increased the version of pytest to make it work with py 3.10 [0].
The GET calls no longer return list but the object itself, fixed the
tests and assertions to account for that. The tests did not account for
the later added `allow_user_remove_domain` setting. And there were
issues with missing and non-stopped patchers/mocks.

Now all tests are at least passing.

[0] pytest-dev/pytest#8540
  • Loading branch information
corubba authored and ymage committed Dec 19, 2022
1 parent 2ef2e37 commit 92ead6b
Show file tree
Hide file tree
Showing 10 changed files with 153 additions and 20 deletions.
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ Flask-SeaSurf==1.1.1
bravado-core==5.17.0
jsonschema[format]>=2.5.1,<4.0.0 # until https://github.com/Yelp/bravado-core/pull/385
lima==0.5
pytest==6.1.1
pytest==6.2.5
pytimeparse==1.1.8
PyYAML==5.4
Flask-SSLify==0.1.5
Expand Down
4 changes: 4 additions & 0 deletions tests/fixtures.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ def load_data(setting_name, *args, **kwargs):
return 10
if setting_name == 'allow_user_create_domain':
return True
if setting_name == 'allow_user_remove_domain':
return True


@pytest.fixture
Expand Down Expand Up @@ -131,13 +133,15 @@ def initial_apikey_data():
api_url_setting = Setting('pdns_api_url', pdns_api_url)
api_key_setting = Setting('pdns_api_key', os.environ['PDNS_API_KEY'])
allow_create_domain_setting = Setting('allow_user_create_domain', True)
allow_remove_domain_setting = Setting('allow_user_remove_domain', True)

try:
flask_migrate.upgrade()

db.session.add(api_url_setting)
db.session.add(api_key_setting)
db.session.add(allow_create_domain_setting)
db.session.add(allow_remove_domain_setting)

test_user_apikey = app.config.get('TEST_USER_APIKEY')
test_admin_apikey = app.config.get('TEST_ADMIN_APIKEY')
Expand Down
4 changes: 2 additions & 2 deletions tests/integration/api/apikey/test_admin_user.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ def test_create_apikey(self, client, initial_data, apikey_data, zone_data,
assert res.status_code == 201

apikey_url_format = "/api/v1/pdnsadmin/apikeys/{0}"
apikey_url = apikey_url_format.format(data[0]['id'])
apikey_url = apikey_url_format.format(data['id'])

res = client.delete(apikey_url, headers=basic_auth_admin_headers)

Expand Down Expand Up @@ -123,7 +123,7 @@ def test_delete_apikey(self, client, initial_data, apikey_data, zone_data,
assert res.status_code == 201

apikey_url_format = "/api/v1/pdnsadmin/apikeys/{0}"
apikey_url = apikey_url_format.format(data[0]['id'])
apikey_url = apikey_url_format.format(data['id'])
res = client.delete(apikey_url, headers=basic_auth_admin_headers)

assert res.status_code == 204
Expand Down
14 changes: 9 additions & 5 deletions tests/integration/api/management/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,10 @@ def get_account(self, account_name, status_code=200):
assert res.status_code == status_code
if res.status_code == 200:
data = res.get_json(force=True)
assert len(data) == 1
return data[0]
assert isinstance(data, dict)
assert len(data) == 7
assert data.get('id', None)
return data
return None

def check_account(self, cmpdata, data=None):
Expand All @@ -37,8 +39,10 @@ def get_user(self, username, status_code=200):
assert res.status_code == status_code
if status_code == 200:
data = res.get_json(force=True)
assert len(data) == 1
return data[0]
assert isinstance(data, dict)
assert len(data) == 7
assert data.get('id', None)
return data
return None

def check_user(self, cmpdata, data=None):
Expand All @@ -50,5 +54,5 @@ def check_user(self, cmpdata, data=None):
elif key == 'role':
assert data[key]['name'] == cmpdata['role_name']
else:
assert key in ("id",)
assert key in ("id","accounts",)
return data
17 changes: 11 additions & 6 deletions tests/integration/api/management/test_admin_user.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,8 +89,9 @@ def test_accounts(
)
data = res.get_json(force=True)
assert res.status_code == 200
assert len(data) == 1
data = data[0]
assert isinstance(data, dict)
assert len(data) == 7
assert data.get('id', None)
account_id = data["id"]
for key, value in account_data.items():
assert data[key] == value
Expand Down Expand Up @@ -142,10 +143,12 @@ def test_users(
)
data = res.get_json(force=True)
assert res.status_code == 201
assert len(data) == 1
assert isinstance(data, dict)
assert len(data) == 6
assert data.get('id', None)

# Check user
user1 = self.check_user(user1_data, data[0])
user1 = self.check_user(user1_data, data)
user1_id = user1["id"]

updated = user1_data.copy()
Expand Down Expand Up @@ -240,10 +243,12 @@ def test_account_users(
)
data = res.get_json(force=True)
assert res.status_code == 201
assert len(data) == 1
assert isinstance(data, dict)
assert len(data) == 6
assert data.get('id', None)

# Check user
user1 = self.check_user(user1_data, data[0])
user1 = self.check_user(user1_data, data)
user1_id = user1["id"]

# Assert test account has no users
Expand Down
16 changes: 10 additions & 6 deletions tests/integration/api/management/test_user.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@ def test_self_get(
headers=basic_auth_user_headers)
data = res.get_json(force=True)
assert res.status_code == 200
assert len(data) == 1, data
self.user = data
assert data
self.user = [data]

def test_accounts(
self, client, initial_data, # noqa: F811
Expand Down Expand Up @@ -118,10 +118,12 @@ def test_users(
)
data = res.get_json(force=True)
assert res.status_code == 201
assert len(data) == 1
assert isinstance(data, dict)
assert len(data) == 6
assert data.get('id', None)

# Check user
user1 = self.check_user(user1_data, data[0])
user1 = self.check_user(user1_data, data)
user1_id = user1["id"]

# Update to defaults (should fail)
Expand Down Expand Up @@ -181,10 +183,12 @@ def test_account_users(
)
data = res.get_json(force=True)
assert res.status_code == 201
assert len(data) == 1
assert isinstance(data, dict)
assert len(data) == 6
assert data.get('id', None)

# Check user
user1 = self.check_user(user1_data, data[0])
user1 = self.check_user(user1_data, data)
user1_id = user1["id"]

# Assert test account has no users
Expand Down
30 changes: 30 additions & 0 deletions tests/unit/zone/test_admin_apikey.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ def common_data_mock(self):
self.github_setting_patcher = patch(
'powerdnsadmin.services.github.Setting',
spec=powerdnsadmin.models.setting.Setting)
self.azure_setting_patcher = patch(
'powerdnsadmin.services.azure.Setting',
spec=powerdnsadmin.models.setting.Setting)
self.oidc_setting_patcher = patch(
'powerdnsadmin.services.oidc.Setting',
spec=powerdnsadmin.models.setting.Setting)
Expand Down Expand Up @@ -54,6 +57,9 @@ def common_data_mock(self):
self.mock_setting_patcher = patch(
'powerdnsadmin.routes.api.Setting',
spec=powerdnsadmin.models.setting.Setting)
self.mock_decorators_setting_patcher = patch(
'powerdnsadmin.decorators.Setting',
spec=powerdnsadmin.models.setting.Setting)

data = admin_apikey_data()
api_key = ApiKey(desc=data['description'],
Expand All @@ -63,6 +69,7 @@ def common_data_mock(self):

self.mock_google_setting = self.google_setting_patcher.start()
self.mock_github_setting = self.github_setting_patcher.start()
self.mock_azure_setting = self.azure_setting_patcher.start()
self.mock_oidc_setting = self.oidc_setting_patcher.start()
self.mock_helpers_setting = self.helpers_setting_patcher.start()
self.mock_models_setting = self.models_setting_patcher.start()
Expand All @@ -75,17 +82,40 @@ def common_data_mock(self):
self.mock_apikey = self.mock_apikey_patcher.start()
self.mock_hist = self.mock_hist_patcher.start()
self.mock_setting = self.mock_setting_patcher.start()
self.mock_decorators_setting = self.mock_decorators_setting_patcher.start()

self.mock_google_setting.return_value.get.side_effect = load_data
self.mock_github_setting.return_value.get.side_effect = load_data
self.mock_azure_setting.return_value.get.side_effect = load_data
self.mock_oidc_setting.return_value.get.side_effect = load_data
self.mock_helpers_setting.return_value.get.side_effect = load_data
self.mock_models_setting.return_value.get.side_effect = load_data
self.mock_domain_model_setting.return_value.get.side_effect = load_data
self.mock_record_model_setting.return_value.get.side_effect = load_data
self.mock_server_model_setting.return_value.get.side_effect = load_data
self.mock_decorators_setting.return_value.get.side_effect = load_data
self.mock_apikey.return_value.is_validate.return_value = api_key

yield

for patcher in [
self.google_setting_patcher,
self.github_setting_patcher,
self.azure_setting_patcher,
self.oidc_setting_patcher,
self.helpers_setting_patcher,
self.models_setting_patcher,
self.domain_model_setting_patcher,
self.record_model_setting_patcher,
self.server_model_setting_patcher,
self.mock_apikey_patcher,
self.mock_hist_patcher,
self.mock_setting_patcher,
self.mock_decorators_setting_patcher,
]:
patcher.stop()


def test_empty_get(self, client, common_data_mock, admin_apikey):
with patch('powerdnsadmin.routes.api.Domain') as mock_domain, \
patch('powerdnsadmin.lib.utils.requests.get') as mock_get:
Expand Down
26 changes: 26 additions & 0 deletions tests/unit/zone/test_admin_user.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ def common_data_mock(self):
self.github_setting_patcher = patch(
'powerdnsadmin.services.github.Setting',
spec=powerdnsadmin.models.setting.Setting)
self.azure_setting_patcher = patch(
'powerdnsadmin.services.azure.Setting',
spec=powerdnsadmin.models.setting.Setting)
self.oidc_setting_patcher = patch(
'powerdnsadmin.services.oidc.Setting',
spec=powerdnsadmin.models.setting.Setting)
Expand Down Expand Up @@ -57,6 +60,7 @@ def common_data_mock(self):

self.mock_google_setting = self.google_setting_patcher.start()
self.mock_github_setting = self.github_setting_patcher.start()
self.mock_azure_setting = self.azure_setting_patcher.start()
self.mock_oidc_setting = self.oidc_setting_patcher.start()
self.mock_base_route_user = self.base_route_user_patcher.start()
self.mock_helpers_setting = self.helpers_setting_patcher.start()
Expand All @@ -74,6 +78,7 @@ def common_data_mock(self):

self.mock_google_setting.return_value.get.side_effect = load_data
self.mock_github_setting.return_value.get.side_effect = load_data
self.mock_azure_setting.return_value.get.side_effect = load_data
self.mock_oidc_setting.return_value.get.side_effect = load_data
self.mock_helpers_setting.return_value.get.side_effect = load_data
self.mock_models_setting.return_value.get.side_effect = load_data
Expand All @@ -91,6 +96,27 @@ def common_data_mock(self):
self.mock_base_route_user.query.filter.return_value.first.return_value = self.mockk
self.mock_base_route_user.return_value.is_validate.return_value = True

yield

for patcher in [
self.google_setting_patcher,
self.github_setting_patcher,
self.azure_setting_patcher,
self.oidc_setting_patcher,
self.base_route_user_patcher,
self.helpers_setting_patcher,
self.models_setting_patcher,
self.domain_model_setting_patcher,
self.record_model_setting_patcher,
self.server_model_setting_patcher,
self.decorators_setting_patcher,
self.api_setting_patcher,
self.mock_user_patcher,
self.mock_hist_patcher,
]:
patcher.stop()


def test_empty_get(self, client, common_data_mock,
basic_auth_admin_headers):
with patch('powerdnsadmin.routes.api.Domain') as mock_domain, \
Expand Down
26 changes: 26 additions & 0 deletions tests/unit/zone/test_user.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ def common_data_mock(self):
self.github_setting_patcher = patch(
'powerdnsadmin.services.github.Setting',
spec=powerdnsadmin.models.setting.Setting)
self.azure_setting_patcher = patch(
'powerdnsadmin.services.azure.Setting',
spec=powerdnsadmin.models.setting.Setting)
self.oidc_setting_patcher = patch(
'powerdnsadmin.services.oidc.Setting',
spec=powerdnsadmin.models.setting.Setting)
Expand Down Expand Up @@ -57,6 +60,7 @@ def common_data_mock(self):

self.mock_google_setting = self.google_setting_patcher.start()
self.mock_github_setting = self.github_setting_patcher.start()
self.mock_azure_setting = self.azure_setting_patcher.start()
self.mock_oidc_setting = self.oidc_setting_patcher.start()
self.mock_base_route_user = self.base_route_user_patcher.start()
self.mock_helpers_setting = self.helpers_setting_patcher.start()
Expand All @@ -74,6 +78,7 @@ def common_data_mock(self):

self.mock_google_setting.return_value.get.side_effect = load_data
self.mock_github_setting.return_value.get.side_effect = load_data
self.mock_azure_setting.return_value.get.side_effect = load_data
self.mock_oidc_setting.return_value.get.side_effect = load_data
self.mock_helpers_setting.return_value.get.side_effect = load_data
self.mock_models_setting.return_value.get.side_effect = load_data
Expand All @@ -91,6 +96,27 @@ def common_data_mock(self):
self.mock_base_route_user.query.filter.return_value.first.return_value = self.mockk
self.mock_base_route_user.return_value.is_validate.return_value = True

yield

for patcher in [
self.google_setting_patcher,
self.github_setting_patcher,
self.azure_setting_patcher,
self.oidc_setting_patcher,
self.base_route_user_patcher,
self.helpers_setting_patcher,
self.models_setting_patcher,
self.domain_model_setting_patcher,
self.record_model_setting_patcher,
self.server_model_setting_patcher,
self.decorators_setting_patcher,
self.api_setting_patcher,
self.mock_user_patcher,
self.mock_hist_patcher,
]:
patcher.stop()


def test_create_zone(self, client, common_data_mock, zone_data,
basic_auth_user_headers, created_zone_data):
with patch('powerdnsadmin.lib.helper.requests.request') as mock_post, \
Expand Down
Loading

0 comments on commit 92ead6b

Please sign in to comment.