156 lines
5.2 KiB
Python
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)
|