- Configure workspace Git repository with comprehensive .gitignore - Add Odoo as submodule for ERP reference code - Include documentation: SETUP.md, GIT-STRUCTURE.md - Add gitignore templates for projects (backend, frontend, database) - Structure supports independent repos per project/subproject level Workspace includes: - core/ - Reusable patterns, modules, orchestration system - projects/ - Active projects (erp-suite, gamilit, trading-platform, etc.) - knowledge-base/ - Reference code and patterns (includes Odoo submodule) - devtools/ - Development tools and templates - customers/ - Client implementations template 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
201 lines
7.2 KiB
SQL
201 lines
7.2 KiB
SQL
-- =====================================================
|
||
-- Test Script: Validate initialize_user_stats() trigger
|
||
-- Date: 2025-11-24
|
||
-- Purpose: Verify all 3 bug fixes work correctly
|
||
--
|
||
-- THIS SCRIPT DOES NOT MODIFY DATA - It only validates the function
|
||
-- =====================================================
|
||
|
||
DO $$
|
||
DECLARE
|
||
v_test_user_id UUID;
|
||
v_test_profile_id INTEGER;
|
||
v_test_tenant_id UUID;
|
||
v_stats_count INTEGER;
|
||
v_comodines_count INTEGER;
|
||
v_ranks_count INTEGER;
|
||
v_module_progress_count INTEGER;
|
||
v_published_modules_count INTEGER;
|
||
v_all_tests_passed BOOLEAN := true;
|
||
BEGIN
|
||
RAISE NOTICE '================================================';
|
||
RAISE NOTICE 'TEST SUITE: initialize_user_stats() Bug Fixes';
|
||
RAISE NOTICE 'Started at: %', NOW();
|
||
RAISE NOTICE '================================================';
|
||
|
||
-- Get a real tenant_id from the database
|
||
SELECT id INTO v_test_tenant_id
|
||
FROM auth_management.tenants
|
||
LIMIT 1;
|
||
|
||
IF v_test_tenant_id IS NULL THEN
|
||
RAISE EXCEPTION 'No tenants found in database. Cannot run test.';
|
||
END IF;
|
||
|
||
RAISE NOTICE 'Using tenant_id: %', v_test_tenant_id;
|
||
|
||
-- Count published modules (what we expect to see in module_progress)
|
||
SELECT COUNT(*)
|
||
INTO v_published_modules_count
|
||
FROM educational_content.modules m
|
||
WHERE m.is_published = true
|
||
AND m.status = 'published';
|
||
|
||
RAISE NOTICE 'Published modules in system: %', v_published_modules_count;
|
||
|
||
-- ================================================
|
||
-- TEST 1: Check if function creates user_stats
|
||
-- ================================================
|
||
RAISE NOTICE '';
|
||
RAISE NOTICE 'TEST 1: Checking user_stats creation...';
|
||
|
||
SELECT COUNT(*)
|
||
INTO v_stats_count
|
||
FROM gamification_system.user_stats
|
||
WHERE user_id IN (
|
||
SELECT user_id FROM auth_management.profiles
|
||
WHERE role IN ('student', 'admin_teacher', 'super_admin')
|
||
LIMIT 5
|
||
);
|
||
|
||
IF v_stats_count > 0 THEN
|
||
RAISE NOTICE ' ✓ PASS: Found % user_stats records', v_stats_count;
|
||
ELSE
|
||
RAISE WARNING ' ✗ FAIL: No user_stats records found';
|
||
v_all_tests_passed := false;
|
||
END IF;
|
||
|
||
-- ================================================
|
||
-- TEST 2: Check if function creates user_ranks with ON CONFLICT
|
||
-- ================================================
|
||
RAISE NOTICE '';
|
||
RAISE NOTICE 'TEST 2: Checking user_ranks creation (Bug Fix #2)...';
|
||
|
||
SELECT COUNT(*)
|
||
INTO v_ranks_count
|
||
FROM gamification_system.user_ranks
|
||
WHERE user_id IN (
|
||
SELECT user_id FROM auth_management.profiles
|
||
WHERE role IN ('student', 'admin_teacher', 'super_admin')
|
||
LIMIT 5
|
||
);
|
||
|
||
IF v_ranks_count > 0 THEN
|
||
RAISE NOTICE ' ✓ PASS: Found % user_ranks records', v_ranks_count;
|
||
RAISE NOTICE ' ℹ INFO: ON CONFLICT clause prevents duplicates on re-trigger';
|
||
ELSE
|
||
RAISE WARNING ' ✗ FAIL: No user_ranks records found';
|
||
v_all_tests_passed := false;
|
||
END IF;
|
||
|
||
-- ================================================
|
||
-- TEST 3: Check if function creates module_progress (BUG FIX #1)
|
||
-- ================================================
|
||
RAISE NOTICE '';
|
||
RAISE NOTICE 'TEST 3: Checking module_progress creation (Bug Fix #1 - CRITICAL)...';
|
||
|
||
SELECT COUNT(*)
|
||
INTO v_module_progress_count
|
||
FROM progress_tracking.module_progress
|
||
WHERE user_id IN (
|
||
SELECT user_id FROM auth_management.profiles
|
||
WHERE role IN ('student', 'admin_teacher', 'super_admin')
|
||
LIMIT 5
|
||
);
|
||
|
||
IF v_module_progress_count > 0 THEN
|
||
RAISE NOTICE ' ✓ PASS: Found % module_progress records', v_module_progress_count;
|
||
|
||
-- Verify each user has records for ALL published modules
|
||
DECLARE
|
||
v_user_record RECORD;
|
||
v_user_module_count INTEGER;
|
||
BEGIN
|
||
FOR v_user_record IN
|
||
SELECT DISTINCT p.user_id, p.email
|
||
FROM auth_management.profiles p
|
||
WHERE p.role IN ('student', 'admin_teacher', 'super_admin')
|
||
AND p.deleted_at IS NULL
|
||
LIMIT 3
|
||
LOOP
|
||
SELECT COUNT(*)
|
||
INTO v_user_module_count
|
||
FROM progress_tracking.module_progress
|
||
WHERE user_id = v_user_record.user_id;
|
||
|
||
IF v_user_module_count = v_published_modules_count THEN
|
||
RAISE NOTICE ' ✓ User % has all % modules', v_user_record.email, v_published_modules_count;
|
||
ELSIF v_user_module_count > 0 THEN
|
||
RAISE WARNING ' ⚠ User % has only % of % modules', v_user_record.email, v_user_module_count, v_published_modules_count;
|
||
ELSE
|
||
RAISE WARNING ' ✗ User % has NO module_progress records!', v_user_record.email;
|
||
v_all_tests_passed := false;
|
||
END IF;
|
||
END LOOP;
|
||
END;
|
||
ELSE
|
||
RAISE WARNING ' ✗ FAIL: No module_progress records found - BUG NOT FIXED!';
|
||
v_all_tests_passed := false;
|
||
END IF;
|
||
|
||
-- ================================================
|
||
-- TEST 4: Check if comodines_inventory is created
|
||
-- ================================================
|
||
RAISE NOTICE '';
|
||
RAISE NOTICE 'TEST 4: Checking comodines_inventory creation...';
|
||
|
||
SELECT COUNT(*)
|
||
INTO v_comodines_count
|
||
FROM gamification_system.comodines_inventory
|
||
WHERE user_id IN (
|
||
SELECT id FROM auth_management.profiles
|
||
WHERE role IN ('student', 'admin_teacher', 'super_admin')
|
||
LIMIT 5
|
||
);
|
||
|
||
IF v_comodines_count > 0 THEN
|
||
RAISE NOTICE ' ✓ PASS: Found % comodines_inventory records', v_comodines_count;
|
||
ELSE
|
||
RAISE WARNING ' ✗ FAIL: No comodines_inventory records found';
|
||
v_all_tests_passed := false;
|
||
END IF;
|
||
|
||
-- ================================================
|
||
-- FINAL RESULTS
|
||
-- ================================================
|
||
RAISE NOTICE '';
|
||
RAISE NOTICE '================================================';
|
||
IF v_all_tests_passed THEN
|
||
RAISE NOTICE 'RESULT: ✓ ALL TESTS PASSED';
|
||
RAISE NOTICE 'The trigger is working correctly with all bug fixes!';
|
||
ELSE
|
||
RAISE WARNING 'RESULT: ✗ SOME TESTS FAILED';
|
||
RAISE WARNING 'Please review the errors above.';
|
||
RAISE WARNING 'You may need to run the backfill migration:';
|
||
RAISE WARNING ' 2025-11-24-backfill-module-progress.sql';
|
||
END IF;
|
||
RAISE NOTICE 'Completed at: %', NOW();
|
||
RAISE NOTICE '================================================';
|
||
|
||
END $$;
|
||
|
||
-- =====================================================
|
||
-- Additional Verification Queries
|
||
-- =====================================================
|
||
|
||
-- Check users missing module_progress
|
||
SELECT
|
||
p.user_id,
|
||
p.email,
|
||
p.role,
|
||
COUNT(mp.id) as module_count,
|
||
(SELECT COUNT(*) FROM educational_content.modules WHERE is_published = true AND status = 'published') as expected_count
|
||
FROM auth_management.profiles p
|
||
LEFT JOIN progress_tracking.module_progress mp ON mp.user_id = p.user_id
|
||
WHERE p.role IN ('student', 'admin_teacher', 'super_admin')
|
||
AND p.deleted_at IS NULL
|
||
GROUP BY p.user_id, p.email, p.role
|
||
HAVING COUNT(mp.id) = 0
|
||
ORDER BY p.email
|
||
LIMIT 10;
|