gateway/modules/features/commcoach/tests/test_datamodel.py
2026-03-24 16:39:25 +01:00

167 lines
5.6 KiB
Python

# Copyright (c) 2025 Patrick Motsch
# All rights reserved.
"""
Tests for CommCoach data models.
Validates model creation, defaults, enums, and serialization.
"""
import pytest
import json
from ..datamodelCommcoach import (
CoachingContext, CoachingContextStatus, CoachingContextCategory,
CoachingSession, CoachingSessionStatus,
CoachingMessage, CoachingMessageRole, CoachingMessageContentType,
CoachingTask, CoachingTaskStatus, CoachingTaskPriority,
CoachingScore, CoachingScoreTrend,
CoachingUserProfile,
CreateContextRequest, SendMessageRequest, CreateTaskRequest,
UpdateTaskStatusRequest, DashboardData,
)
class TestCoachingContext:
def test_createWithDefaults(self):
ctx = CoachingContext(
userId="user-1",
mandateId="mandate-1",
instanceId="instance-1",
title="Test Topic",
)
assert ctx.userId == "user-1"
assert ctx.title == "Test Topic"
assert ctx.status == CoachingContextStatus.ACTIVE
assert ctx.category == CoachingContextCategory.CUSTOM
assert ctx.sessionCount == 0
assert ctx.id is not None and len(ctx.id) > 0
def test_createWithAllFields(self):
ctx = CoachingContext(
userId="user-1",
mandateId="mandate-1",
instanceId="instance-1",
title="Conflict Management",
description="Working on conflict with team",
category=CoachingContextCategory.CONFLICT,
status=CoachingContextStatus.PAUSED,
goals=json.dumps([{"id": "g1", "text": "Resolve conflict", "status": "open"}]),
)
assert ctx.category == CoachingContextCategory.CONFLICT
assert ctx.status == CoachingContextStatus.PAUSED
goals = json.loads(ctx.goals)
assert len(goals) == 1
def test_modelDump(self):
ctx = CoachingContext(
userId="u1", mandateId="m1", instanceId="i1", title="T"
)
data = ctx.model_dump()
assert isinstance(data, dict)
assert data["userId"] == "u1"
assert "id" in data
class TestCoachingSession:
def test_createWithDefaults(self):
session = CoachingSession(
contextId="ctx-1",
userId="user-1",
mandateId="m1",
instanceId="i1",
)
assert session.status == CoachingSessionStatus.ACTIVE
assert session.messageCount == 0
assert session.durationSeconds == 0
assert session.emailSent is False
def test_competenceScoreRange(self):
session = CoachingSession(
contextId="ctx-1", userId="u1", mandateId="m1", instanceId="i1",
competenceScore=75.5,
)
assert session.competenceScore == 75.5
class TestCoachingMessage:
def test_createUserMessage(self):
msg = CoachingMessage(
sessionId="s1", contextId="c1", userId="u1",
role=CoachingMessageRole.USER,
content="Hello coach",
)
assert msg.role == CoachingMessageRole.USER
assert msg.contentType == CoachingMessageContentType.TEXT
def test_createAssistantMessage(self):
msg = CoachingMessage(
sessionId="s1", contextId="c1", userId="u1",
role=CoachingMessageRole.ASSISTANT,
content="Welcome to coaching!",
)
assert msg.role == CoachingMessageRole.ASSISTANT
class TestCoachingTask:
def test_createWithDefaults(self):
task = CoachingTask(
contextId="c1", userId="u1", mandateId="m1",
title="Practice active listening",
)
assert task.status == CoachingTaskStatus.OPEN
assert task.priority == CoachingTaskPriority.MEDIUM
def test_allStatuses(self):
for status in CoachingTaskStatus:
task = CoachingTask(
contextId="c1", userId="u1", mandateId="m1",
title="Task", status=status,
)
assert task.status == status
class TestCoachingScore:
def test_createScore(self):
score = CoachingScore(
contextId="c1", sessionId="s1", userId="u1", mandateId="m1",
dimension="empathy", score=72.5,
trend=CoachingScoreTrend.IMPROVING,
evidence="Shows increasing empathy",
)
assert score.dimension == "empathy"
assert score.score == 72.5
assert score.trend == CoachingScoreTrend.IMPROVING
class TestCoachingUserProfile:
def test_createWithDefaults(self):
profile = CoachingUserProfile(
userId="u1", mandateId="m1", instanceId="i1",
)
assert profile.dailyReminderEnabled is False
assert profile.emailSummaryEnabled is True
assert profile.streakDays == 0
class TestApiModels:
def test_createContextRequest(self):
req = CreateContextRequest(title="Test", goals=["Goal 1", "Goal 2"])
assert req.title == "Test"
assert len(req.goals) == 2
def test_sendMessageRequest(self):
req = SendMessageRequest(content="Hello")
assert req.content == "Hello"
assert req.contentType == CoachingMessageContentType.TEXT
def test_createTaskRequest(self):
req = CreateTaskRequest(title="Task 1")
assert req.title == "Task 1"
assert req.priority == CoachingTaskPriority.MEDIUM
def test_updateTaskStatusRequest(self):
req = UpdateTaskStatusRequest(status=CoachingTaskStatus.DONE)
assert req.status == CoachingTaskStatus.DONE
def test_dashboardData(self):
data = DashboardData(totalContexts=3, activeContexts=2, totalSessions=10)
assert data.totalContexts == 3
assert data.openTasks == 0