issue-facade integration
This commit is contained in:
parent
c2b7cc64d6
commit
a907ed6f74
16 changed files with 642 additions and 95 deletions
|
|
@ -168,26 +168,28 @@ def test_aufgaben_verknuepfung_loeschen(client):
|
|||
# ─── ExternalIssue ────────────────────────────────────────────────────────────
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def tmp_issue_db(tmp_path, settings):
|
||||
settings.ISSUE_FACADE_LOCAL_DB = tmp_path / 'test_issues.db'
|
||||
settings.ISSUE_FACADE_GITEA = None
|
||||
return settings.ISSUE_FACADE_LOCAL_DB
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_external_issue_erstellen(client):
|
||||
def test_external_issue_erstellen(client, tmp_issue_db):
|
||||
aufgabe = AufgabeFactory()
|
||||
url = reverse('ausschreibungen:aufgaben:external_issue',
|
||||
kwargs={'ausschreibung_id': aufgabe.ausschreibung_id, 'pk': aufgabe.pk})
|
||||
response = client.post(url, {
|
||||
'system': 'github',
|
||||
'issue_url': 'https://github.com/org/repo/issues/42',
|
||||
'issue_key': 'GH-42',
|
||||
'notizen': '',
|
||||
}, HTTP_HX_REQUEST='true')
|
||||
response = client.post(url, {'notizen': ''}, HTTP_HX_REQUEST='true')
|
||||
assert response.status_code == 200
|
||||
assert ExternalIssue.objects.filter(aufgabe=aufgabe, system='github').exists()
|
||||
assert ExternalIssue.objects.filter(aufgabe=aufgabe, issue_facade_backend='local').exists()
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_external_issue_loeschen(client):
|
||||
aufgabe = AufgabeFactory()
|
||||
ei = ExternalIssue.objects.create(
|
||||
aufgabe=aufgabe, system='jira', issue_key='PROJ-1'
|
||||
aufgabe=aufgabe, issue_facade_backend='local', issue_key='#1'
|
||||
)
|
||||
url = reverse('ausschreibungen:aufgaben:external_issue_loeschen',
|
||||
kwargs={'ausschreibung_id': aufgabe.ausschreibung_id, 'pk': aufgabe.pk})
|
||||
|
|
@ -201,3 +203,87 @@ def test_issue_adapter_interface():
|
|||
from .issue_facade import get_adapter
|
||||
assert get_adapter('github') is None
|
||||
assert get_adapter('nichtexistent') is None
|
||||
|
||||
|
||||
# ─── Issue-Facade Integration ─────────────────────────────────────────────────
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_aufgabe_zu_issue_mapping(tmp_issue_db):
|
||||
from .issue_facade import aufgabe_zu_issue
|
||||
aufgabe = AufgabeFactory(titel='Test-Aufgabe', beschreibung='Beschreibung', prioritaet=1)
|
||||
issue = aufgabe_zu_issue(aufgabe)
|
||||
assert issue.title == 'Test-Aufgabe'
|
||||
assert issue.description == 'Beschreibung'
|
||||
label_names = [l.name for l in issue.labels]
|
||||
assert 'task' in label_names
|
||||
assert 'priority:high' in label_names
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_lokales_issue_erstellen(tmp_issue_db):
|
||||
from .issue_facade import lokales_issue_erstellen
|
||||
aufgabe = AufgabeFactory()
|
||||
daten = lokales_issue_erstellen(aufgabe)
|
||||
assert daten['issue_facade_id']
|
||||
assert daten['issue_key'].startswith('#')
|
||||
assert daten['sync_status'] == 'open'
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_status_synchronisieren(tmp_issue_db):
|
||||
from .issue_facade import lokales_issue_erstellen, status_synchronisieren
|
||||
aufgabe = AufgabeFactory()
|
||||
daten = lokales_issue_erstellen(aufgabe)
|
||||
ei = ExternalIssue.objects.create(
|
||||
aufgabe=aufgabe,
|
||||
issue_facade_backend='local',
|
||||
issue_facade_id=daten['issue_facade_id'],
|
||||
issue_key=daten['issue_key'],
|
||||
sync_status=daten['sync_status'],
|
||||
)
|
||||
neuer_status = status_synchronisieren(ei)
|
||||
assert neuer_status == 'open'
|
||||
ei.refresh_from_db()
|
||||
assert ei.sync_status == 'open'
|
||||
assert ei.letzter_sync is not None
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_external_issue_bearbeiten_view_erstellt_issue(client, tmp_issue_db):
|
||||
aufgabe = AufgabeFactory()
|
||||
url = reverse('ausschreibungen:aufgaben:external_issue',
|
||||
kwargs={'ausschreibung_id': aufgabe.ausschreibung_id, 'pk': aufgabe.pk})
|
||||
response = client.post(url, {'notizen': 'Test-Notiz'}, HTTP_HX_REQUEST='true')
|
||||
assert response.status_code == 200
|
||||
ei = ExternalIssue.objects.get(aufgabe=aufgabe)
|
||||
assert ei.issue_facade_backend == 'local'
|
||||
assert ei.issue_facade_id
|
||||
assert ei.notizen == 'Test-Notiz'
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_external_issue_sync_view(client, tmp_issue_db):
|
||||
from .issue_facade import lokales_issue_erstellen
|
||||
aufgabe = AufgabeFactory()
|
||||
daten = lokales_issue_erstellen(aufgabe)
|
||||
ei = ExternalIssue.objects.create(
|
||||
aufgabe=aufgabe,
|
||||
issue_facade_backend='local',
|
||||
issue_facade_id=daten['issue_facade_id'],
|
||||
issue_key=daten['issue_key'],
|
||||
sync_status=daten['sync_status'],
|
||||
)
|
||||
url = reverse('ausschreibungen:aufgaben:external_issue_sync',
|
||||
kwargs={'ausschreibung_id': aufgabe.ausschreibung_id, 'pk': aufgabe.pk})
|
||||
response = client.post(url, {}, HTTP_HX_REQUEST='true')
|
||||
assert response.status_code == 200
|
||||
ei.refresh_from_db()
|
||||
assert ei.sync_status == 'open'
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_get_adapter_stub():
|
||||
from .issue_facade import get_adapter
|
||||
assert get_adapter('github') is None
|
||||
assert get_adapter('gitea') is None
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue