Skip to content

Commit 058402d

Browse files
simplify seq test util function (#1)
1 parent 5f48f6e commit 058402d

File tree

5 files changed

+247
-727
lines changed

5 files changed

+247
-727
lines changed

tests/conftest.py

Lines changed: 72 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
from __future__ import annotations
22

33
import logging
4+
from unittest.mock import AsyncMock
5+
from unittest.mock import MagicMock
46

57
import pytest
68
from asgiref.sync import sync_to_async
79
from django.conf import settings
810
from model_bakery import baker
911

12+
from django_github_app.github import AsyncGitHubAPI
13+
1014
from .settings import DEFAULT_SETTINGS
1115
from .utils import seq
1216

@@ -52,37 +56,90 @@ def pytest_configure(config):
5256

5357

5458
@pytest.fixture
55-
def id_sequence_start():
56-
return 1000
59+
def installation_id():
60+
return seq.next()
5761

5862

5963
@pytest.fixture
60-
def installation_id(id_sequence_start):
61-
return seq(id_sequence_start)
64+
def repository_id():
65+
return seq.next()
6266

6367

6468
@pytest.fixture
65-
def installation_id_iter(id_sequence_start):
66-
return seq.iter(id_sequence_start)
69+
def installation():
70+
return baker.make("django_github_app.Installation", installation_id=seq.next())
6771

6872

6973
@pytest.fixture
70-
def repository_id(id_sequence_start):
71-
return seq(id_sequence_start)
74+
async def ainstallation():
75+
return await sync_to_async(baker.make)(
76+
"django_github_app.Installation", installation_id=seq.next()
77+
)
7278

7379

7480
@pytest.fixture
75-
def repository_id_iter(id_sequence_start):
76-
return seq.iter(id_sequence_start)
81+
def mock_github_api():
82+
mock_api = AsyncMock(spec=AsyncGitHubAPI)
83+
84+
async def mock_getiter(*args, **kwargs):
85+
test_issues = [
86+
{
87+
"number": 1,
88+
"title": "Test Issue 1",
89+
"state": "open",
90+
},
91+
{
92+
"number": 2,
93+
"title": "Test Issue 2",
94+
"state": "closed",
95+
},
96+
]
97+
for issue in test_issues:
98+
yield issue
99+
100+
mock_api.getiter = mock_getiter
101+
mock_api.__aenter__.return_value = mock_api
102+
mock_api.__aexit__.return_value = None
103+
104+
return mock_api
77105

78106

79107
@pytest.fixture
80-
def installation(installation_id):
81-
return baker.make("django_github_app.Installation", installation_id=installation_id)
108+
def repository(installation, mock_github_api):
109+
repository = baker.make(
110+
"django_github_app.Repository",
111+
repository_id=seq.next(),
112+
full_name="owner/repo",
113+
installation=installation,
114+
)
115+
116+
mock_github_api.installation_id = repository.installation.installation_id
117+
118+
if isinstance(repository, list):
119+
for repo in repository:
120+
repo.get_gh_client = MagicMock(mock_github_api)
121+
else:
122+
repository.get_gh_client = MagicMock(return_value=mock_github_api)
123+
124+
return repository
82125

83126

84127
@pytest.fixture
85-
async def ainstallation(installation_id):
86-
return await sync_to_async(baker.make)(
87-
"django_github_app.Installation", installation_id=installation_id
128+
async def arepository(ainstallation, mock_github_api):
129+
installation = await ainstallation
130+
repository = await sync_to_async(baker.make)(
131+
"django_github_app.Repository",
132+
repository_id=seq.next(),
133+
full_name="owner/repo",
134+
installation=installation,
88135
)
136+
137+
mock_github_api.installation_id = repository.installation.installation_id
138+
139+
if isinstance(repository, list):
140+
for repo in repository:
141+
repo.get_gh_client = MagicMock(mock_github_api)
142+
else:
143+
repository.get_gh_client = MagicMock(return_value=mock_github_api)
144+
145+
return repository

tests/events/test_installation.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ async def test_create_installation(installation_id, repository_id):
2323
data = {
2424
"installation": {
2525
"id": installation_id,
26-
"app_id": seq(1000),
26+
"app_id": seq.next(),
2727
},
2828
"repositories": [
2929
{"id": repository_id, "node_id": "node1234", "full_name": "owner/repo"}
@@ -107,12 +107,12 @@ async def test_sync_installation_data(ainstallation):
107107
assert installation.data == data["installation"]
108108

109109

110-
async def test_sync_installation_repositories(ainstallation, repository_id_iter):
110+
async def test_sync_installation_repositories(ainstallation):
111111
installation = await ainstallation
112112
existing_repo = await sync_to_async(baker.make)(
113113
"django_github_app.Repository",
114114
installation=installation,
115-
repository_id=next(repository_id_iter),
115+
repository_id=seq.next(),
116116
)
117117

118118
data = {
@@ -126,7 +126,7 @@ async def test_sync_installation_repositories(ainstallation, repository_id_iter)
126126
],
127127
"repositories_added": [
128128
{
129-
"id": next(repository_id_iter),
129+
"id": seq.next(),
130130
"node_id": "repo1234",
131131
"full_name": "owner/repo",
132132
}

0 commit comments

Comments
 (0)