Skip to content

Commit d99b58e

Browse files
committed
Rework tests after changes around package_info endpoint
1 parent 490e261 commit d99b58e

File tree

4 files changed

+84
-66
lines changed

4 files changed

+84
-66
lines changed

tests/conftest.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@
66
"tests.fixtures.database",
77
"tests.fixtures.dramatiq",
88
"tests.fixtures.errata",
9-
'tests.fixtures.limiter',
9+
"tests.fixtures.limiter",
1010
"tests.fixtures.modularity",
11+
"tests.fixtures.package_info",
1112
"tests.fixtures.platforms",
1213
"tests.fixtures.products",
1314
"tests.fixtures.pulp",

tests/fixtures/package_info.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
from typing import List, Dict, Any
2+
3+
import pytest
4+
5+
from alws.errors import PlatformNotFoundError, RepositoriesNotFoundError
6+
7+
@pytest.fixture
8+
def package_info() -> List[Dict[str, Any]]:
9+
return [
10+
{
11+
"name": "example_package",
12+
"version": "1.0",
13+
"release": "1.el8",
14+
"changelogs": ["Initial release"],
15+
},
16+
{
17+
"name": "example_package",
18+
"version": "1.1",
19+
"release": "2.el9",
20+
"changelogs": ["Bug fixes"],
21+
},
22+
]
23+
24+
25+
@pytest.fixture
26+
def mock_get_package_info_success(monkeypatch, package_info):
27+
async def mock_func(*args, **kwargs):
28+
return package_info
29+
monkeypatch.setattr("alws.crud.package_info.get_package_info", mock_func)
30+
31+
32+
@pytest.fixture
33+
def mock_get_package_info_platform_not_found(monkeypatch):
34+
async def mock_func(*args, **kwargs):
35+
raise PlatformNotFoundError("Invalid distribution: AlmaLinux-999")
36+
monkeypatch.setattr("alws.crud.package_info.get_package_info", mock_func)
37+
38+
39+
@pytest.fixture
40+
def mock_get_package_info_repos_not_found(monkeypatch):
41+
async def mock_func(*args, **kwargs):
42+
raise RepositoriesNotFoundError("No repositories found")
43+
monkeypatch.setattr("alws.crud.package_info.get_package_info", mock_func)
44+
45+
46+
@pytest.fixture
47+
def mock_get_package_info_empty(monkeypatch):
48+
async def mock_func(*args, **kwargs):
49+
return []
50+
monkeypatch.setattr("alws.crud.package_info.get_package_info", mock_func)
51+
52+

tests/fixtures/pulp.py

Lines changed: 0 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -483,41 +483,6 @@ async def func(*args, **kwargs):
483483
monkeypatch.setattr("alws.crud.build_node.get_module_from_pulp_db", func)
484484

485485

486-
@pytest.fixture
487-
def package_info() -> List[Dict[str, Any]]:
488-
return [
489-
{
490-
"name": "example_package",
491-
"version": "example_version",
492-
"release": "example_release.el8",
493-
"arch": "example_arch",
494-
"changelogs": ["example_changelogs"],
495-
},
496-
{
497-
"name": "example_package",
498-
"version": "example_version_2",
499-
"release": "example_release_2.el9",
500-
"arch": "example_arch_2",
501-
"changelogs": ["example_changelogs_2"],
502-
},
503-
]
504-
505-
506-
@pytest.fixture
507-
def get_rpm_packages(monkeypatch, package_info):
508-
async def func(*args, **kwargs):
509-
res = []
510-
for package in package_info:
511-
if "name" in kwargs and package["name"] != kwargs["name"]:
512-
continue
513-
if "include_fields" in kwargs:
514-
package = {field: package[field] for field in kwargs["include_fields"]}
515-
res.append(package)
516-
return res
517-
518-
monkeypatch.setattr(PulpClient, "get_rpm_packages", func)
519-
520-
521486
@pytest.fixture
522487
def get_removed_rpm_packages_from_latest_repo_version(monkeypatch):
523488
def func(*args, **kwargs):
Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,57 @@
11
import pytest
22

3+
from fastapi import status
4+
35
from alws.app import app
46
from tests.mock_classes import BaseAsyncTestCase
57

68

79
@pytest.mark.usefixtures(
8-
"get_rpm_packages",
910
"patch_limiter"
1011
)
1112
class TestPackageInfoEndpoints(BaseAsyncTestCase):
12-
async def test_get_package_info(self):
13+
async def test_get_package_info_success(self, mock_get_package_info_success, package_info):
1314
response = await self.make_request(
1415
"get",
15-
"/api/v1/package_info/?package_name=example_package",
16+
"/api/v1/package_info/?name=example_package&almalinux_version=9",
1617
)
17-
assert (
18-
response.status_code == self.status_codes.HTTP_200_OK
19-
and response.json()
20-
), f"Cannot get package info by package name:\n{response.text}"
2118

22-
async def test_get_package_info_version(self):
23-
version = 9
24-
not_version = 5
19+
assert response.status_code == status.HTTP_200_OK
20+
data = response.json()
21+
assert data == package_info
2522

23+
async def test_platform_not_found(self, mock_get_package_info_platform_not_found):
2624
response = await self.make_request(
2725
"get",
28-
f"/api/v1/package_info/?package_name=example_package&release_version={version}",
26+
"/api/v1/package_info/?name=bash&almalinux_version=999",
2927
)
30-
response_json = response.json()
31-
assert (
32-
response.status_code == self.status_codes.HTTP_200_OK
33-
and response_json
34-
), f"Cannot get package info by package name and major version:\n{response.text}"
35-
assert (
36-
response_json[0]["release"]
37-
and f"el9" in response_json[0]["release"]
28+
29+
assert response.status_code == status.HTTP_400_BAD_REQUEST
30+
assert "Invalid distribution" in response.text
31+
32+
async def test_repositories_not_found(self, mock_get_package_info_repos_not_found):
33+
response = await self.make_request(
34+
"get",
35+
"/api/v1/package_info/?name=bash&almalinux_version=9&arch=x86_64",
3836
)
3937

38+
assert response.status_code == status.HTTP_400_BAD_REQUEST
39+
assert "No repositories found" in response.text
40+
41+
42+
async def test_empty_package_list(self, mock_get_package_info_empty):
4043
response = await self.make_request(
4144
"get",
42-
f"/api/v1/package_info/?package_name=example_package&release_version={not_version}",
45+
"/api/v1/package_info/?name=none&almalinux_version=9",
4346
)
44-
assert (
45-
response.status_code == self.status_codes.HTTP_200_OK
46-
and not response.json()
47-
), f"Cannot get package info by package name and major version:\n{response.text}"
4847

49-
async def test_get_no_package_info(self):
48+
assert response.status_code == status.HTTP_200_OK
49+
assert response.json() == []
50+
51+
async def test_missing_required_query_params(self):
5052
response = await self.make_request(
5153
"get",
52-
"/api/v1/package_info/?package_name=doesnt_exist",
54+
"/api/v1/package_info/?name=bash",
5355
)
54-
assert (
55-
response.status_code == self.status_codes.HTTP_200_OK
56-
and not response.json()
57-
), f"Error in fetching missing package:\n{response.text}"
56+
57+
assert response.status_code == status.HTTP_422_UNPROCESSABLE_ENTITY

0 commit comments

Comments
 (0)