Skip to content

Commit

Permalink
simplify seq test util function (#1)
Browse files Browse the repository at this point in the history
joshuadavidthomas authored Nov 14, 2024
1 parent 5f48f6e commit 058402d
Showing 5 changed files with 247 additions and 727 deletions.
87 changes: 72 additions & 15 deletions tests/conftest.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
from __future__ import annotations

import logging
from unittest.mock import AsyncMock
from unittest.mock import MagicMock

import pytest
from asgiref.sync import sync_to_async
from django.conf import settings
from model_bakery import baker

from django_github_app.github import AsyncGitHubAPI

from .settings import DEFAULT_SETTINGS
from .utils import seq

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


@pytest.fixture
def id_sequence_start():
return 1000
def installation_id():
return seq.next()


@pytest.fixture
def installation_id(id_sequence_start):
return seq(id_sequence_start)
def repository_id():
return seq.next()


@pytest.fixture
def installation_id_iter(id_sequence_start):
return seq.iter(id_sequence_start)
def installation():
return baker.make("django_github_app.Installation", installation_id=seq.next())


@pytest.fixture
def repository_id(id_sequence_start):
return seq(id_sequence_start)
async def ainstallation():
return await sync_to_async(baker.make)(
"django_github_app.Installation", installation_id=seq.next()
)


@pytest.fixture
def repository_id_iter(id_sequence_start):
return seq.iter(id_sequence_start)
def mock_github_api():
mock_api = AsyncMock(spec=AsyncGitHubAPI)

async def mock_getiter(*args, **kwargs):
test_issues = [
{
"number": 1,
"title": "Test Issue 1",
"state": "open",
},
{
"number": 2,
"title": "Test Issue 2",
"state": "closed",
},
]
for issue in test_issues:
yield issue

mock_api.getiter = mock_getiter
mock_api.__aenter__.return_value = mock_api
mock_api.__aexit__.return_value = None

return mock_api


@pytest.fixture
def installation(installation_id):
return baker.make("django_github_app.Installation", installation_id=installation_id)
def repository(installation, mock_github_api):
repository = baker.make(
"django_github_app.Repository",
repository_id=seq.next(),
full_name="owner/repo",
installation=installation,
)

mock_github_api.installation_id = repository.installation.installation_id

if isinstance(repository, list):
for repo in repository:
repo.get_gh_client = MagicMock(mock_github_api)
else:
repository.get_gh_client = MagicMock(return_value=mock_github_api)

return repository


@pytest.fixture
async def ainstallation(installation_id):
return await sync_to_async(baker.make)(
"django_github_app.Installation", installation_id=installation_id
async def arepository(ainstallation, mock_github_api):
installation = await ainstallation
repository = await sync_to_async(baker.make)(
"django_github_app.Repository",
repository_id=seq.next(),
full_name="owner/repo",
installation=installation,
)

mock_github_api.installation_id = repository.installation.installation_id

if isinstance(repository, list):
for repo in repository:
repo.get_gh_client = MagicMock(mock_github_api)
else:
repository.get_gh_client = MagicMock(return_value=mock_github_api)

return repository
8 changes: 4 additions & 4 deletions tests/events/test_installation.py
Original file line number Diff line number Diff line change
@@ -23,7 +23,7 @@ async def test_create_installation(installation_id, repository_id):
data = {
"installation": {
"id": installation_id,
"app_id": seq(1000),
"app_id": seq.next(),
},
"repositories": [
{"id": repository_id, "node_id": "node1234", "full_name": "owner/repo"}
@@ -107,12 +107,12 @@ async def test_sync_installation_data(ainstallation):
assert installation.data == data["installation"]


async def test_sync_installation_repositories(ainstallation, repository_id_iter):
async def test_sync_installation_repositories(ainstallation):
installation = await ainstallation
existing_repo = await sync_to_async(baker.make)(
"django_github_app.Repository",
installation=installation,
repository_id=next(repository_id_iter),
repository_id=seq.next(),
)

data = {
@@ -126,7 +126,7 @@ async def test_sync_installation_repositories(ainstallation, repository_id_iter)
],
"repositories_added": [
{
"id": next(repository_id_iter),
"id": seq.next(),
"node_id": "repo1234",
"full_name": "owner/repo",
}
Loading

0 comments on commit 058402d

Please sign in to comment.