167 lines
5.6 KiB
Python
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
|