odex25_standard/odex25_base/tour_genius/tests/test_advanced.py

156 lines
5.2 KiB
Python

# -*- coding: utf-8 -*-
"""
Advanced Features Tests (Simplified)
=====================================
Tests for gamification and reminders.
Removed tests for deleted models (Recorder, DraftStep, StepTiming, Certificate).
"""
from odoo.tests import common, tagged
@tagged('post_install', '-at_install', 'tour_genius')
class TestAdvancedFeatures(common.TransactionCase):
"""Test cases for Advanced Features (Leaderboard, Reminder)"""
def setUp(self):
super(TestAdvancedFeatures, self).setUp()
self.Plan = self.env['genius.plan']
self.Topic = self.env['genius.topic']
self.Leaderboard = self.env['genius.leaderboard']
self.Reminder = self.env['genius.reminder']
# Create test user
self.test_user = self.env['res.users'].create({
'name': 'Advanced Test User',
'login': 'advanced_test_user',
'email': 'advanced@test.com',
})
# Create base data
self.test_plan = self.Plan.create({'name': 'Advanced Test Plan'})
self.test_topic = self.Topic.create({
'name': 'Advanced Test Topic',
'plan_id': self.test_plan.id,
})
# =========================================================================
# Leaderboard Tests
# =========================================================================
def test_leaderboard_creation(self):
"""Test creating leaderboard entry"""
entry = self.Leaderboard.create({
'user_id': self.test_user.id,
'period_type': 'alltime',
'points': 100,
'topics_completed': 5,
})
self.assertTrue(entry.id)
self.assertEqual(entry.points, 100)
def test_leaderboard_get_method(self):
"""Test leaderboard get API method"""
# Create an entry
self.Leaderboard.create({
'user_id': self.test_user.id,
'period_type': 'alltime',
'points': 100,
'topics_completed': 5,
'rank': 1,
})
# Get leaderboard
results = self.Leaderboard.get_leaderboard('alltime', limit=10)
self.assertIsInstance(results, list)
def test_leaderboard_calculate_stats(self):
"""Test leaderboard stats calculation"""
# Create progress for user
self.env['genius.progress'].create({
'user_id': self.test_user.id,
'topic_id': self.test_topic.id,
'state': 'done',
})
# Calculate stats
stats = self.Leaderboard.calculate_user_stats(
self.test_user.id, 'alltime'
)
self.assertEqual(stats['topics_completed'], 1)
self.assertTrue(stats['points'] > 0)
def test_leaderboard_user_rank(self):
"""Test get user rank method"""
result = self.Leaderboard.get_user_rank(self.test_user.id, 'alltime')
self.assertIsInstance(result, dict)
self.assertIn('rank', result)
# =========================================================================
# Reminder Tests
# =========================================================================
def test_reminder_creation(self):
"""Test creating a reminder"""
reminder = self.Reminder.create({
'name': 'Test Reminder',
'user_id': self.test_user.id,
'reminder_type': 'incomplete_topic',
'topic_id': self.test_topic.id,
})
self.assertTrue(reminder.id)
self.assertEqual(reminder.state, 'pending')
self.assertTrue(reminder.message_body)
def test_reminder_cancel(self):
"""Test canceling a reminder"""
reminder = self.Reminder.create({
'name': 'Cancel Test',
'user_id': self.test_user.id,
'reminder_type': 'streak',
})
reminder.action_cancel()
self.assertEqual(reminder.state, 'cancelled')
def test_reminder_types(self):
"""Test different reminder types"""
# Test incomplete topic
r1 = self.Reminder.create({
'user_id': self.test_user.id,
'reminder_type': 'incomplete_topic',
'topic_id': self.test_topic.id,
})
self.assertTrue(r1.message_body)
# Test streak reminder
r2 = self.Reminder.create({
'user_id': self.test_user.id,
'reminder_type': 'streak',
})
self.assertTrue(r2.message_body)
# Test custom reminder
r3 = self.Reminder.create({
'user_id': self.test_user.id,
'reminder_type': 'custom',
'custom_message': '<p>Custom message here</p>',
})
self.assertEqual(r3.message_body, '<p>Custom message here</p>')
def test_reminder_recurring(self):
"""Test recurring reminder setting"""
reminder = self.Reminder.create({
'name': 'Recurring Test',
'user_id': self.test_user.id,
'reminder_type': 'streak',
'is_recurring': True,
'recurrence_interval': 7,
})
self.assertTrue(reminder.is_recurring)
self.assertEqual(reminder.recurrence_interval, 7)