Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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

Expand Down Expand Up @@ -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
Expand Up @@ -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"}
Expand Down Expand Up @@ -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 = {
Expand All @@ -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",
}
Expand Down
Loading