Model and migration b020 were already present; adds regression coverage for persistence, schema validation, and link CRUD with Jira disabled.
94 lines
2.8 KiB
Python
94 lines
2.8 KiB
Python
"""Tests for Jira link model and jira_service link helpers (FASE-1.1).
|
|
|
|
Verifies persistence with SQLite test DB and link creation when Jira is disabled.
|
|
API routes are covered indirectly via jira_service (same code path as the router).
|
|
"""
|
|
|
|
import uuid
|
|
|
|
import pytest
|
|
from pydantic import ValidationError
|
|
|
|
from app.models.jira_link import JiraLink, JiraLinkEntityType, JiraSyncDirection
|
|
from app.schemas.jira_schema import JiraLinkCreate
|
|
from app.services import jira_service
|
|
|
|
|
|
def test_jira_link_persist_and_query(db, admin_user):
|
|
entity_id = uuid.uuid4()
|
|
link = JiraLink(
|
|
entity_type=JiraLinkEntityType.test,
|
|
entity_id=entity_id,
|
|
jira_issue_key="PROJ-42",
|
|
jira_issue_id="10001",
|
|
sync_direction=JiraSyncDirection.bidirectional,
|
|
created_by=admin_user.id,
|
|
sync_metadata={"foo": "bar"},
|
|
)
|
|
db.add(link)
|
|
db.commit()
|
|
db.refresh(link)
|
|
|
|
loaded = db.query(JiraLink).filter(JiraLink.id == link.id).one()
|
|
assert loaded.entity_type == JiraLinkEntityType.test
|
|
assert loaded.entity_id == entity_id
|
|
assert loaded.jira_issue_key == "PROJ-42"
|
|
assert loaded.sync_metadata == {"foo": "bar"}
|
|
assert loaded.created_by == admin_user.id
|
|
|
|
|
|
def test_jira_link_create_schema_accepts_valid_issue_key():
|
|
body = JiraLinkCreate(
|
|
entity_type=JiraLinkEntityType.campaign,
|
|
entity_id=uuid.uuid4(),
|
|
jira_issue_key="ABC-1",
|
|
)
|
|
assert body.jira_issue_key == "ABC-1"
|
|
assert body.sync_direction == JiraSyncDirection.bidirectional
|
|
|
|
|
|
def test_jira_link_create_schema_rejects_invalid_issue_key():
|
|
with pytest.raises(ValidationError):
|
|
JiraLinkCreate(
|
|
entity_type=JiraLinkEntityType.test,
|
|
entity_id=uuid.uuid4(),
|
|
jira_issue_key="proj-123",
|
|
)
|
|
|
|
|
|
def test_create_link_via_service_persists(db, admin_user):
|
|
eid = uuid.uuid4()
|
|
link = jira_service.create_link(
|
|
db,
|
|
entity_type=JiraLinkEntityType.test,
|
|
entity_id=eid,
|
|
jira_issue_key="TST-99",
|
|
sync_direction=JiraSyncDirection.bidirectional,
|
|
created_by=admin_user.id,
|
|
)
|
|
db.commit()
|
|
db.refresh(link)
|
|
assert link.jira_issue_key == "TST-99"
|
|
assert link.entity_id == eid
|
|
|
|
|
|
def test_list_links_filters_by_entity(db, admin_user):
|
|
eid = uuid.uuid4()
|
|
jira_service.create_link(
|
|
db,
|
|
entity_type=JiraLinkEntityType.technique,
|
|
entity_id=eid,
|
|
jira_issue_key="TECH-7",
|
|
sync_direction=JiraSyncDirection.jira_to_aegis,
|
|
created_by=admin_user.id,
|
|
)
|
|
db.commit()
|
|
rows = jira_service.list_links(
|
|
db,
|
|
entity_type=JiraLinkEntityType.technique,
|
|
entity_id=eid,
|
|
)
|
|
assert len(rows) == 1
|
|
assert rows[0].jira_issue_key == "TECH-7"
|
|
assert rows[0].sync_direction == JiraSyncDirection.jira_to_aegis
|