workspace/projects/gamilit/apps/database/tests/test-admin-notifications-policy.sql
rckrdmrd ea1879f4ad feat: Initial workspace structure with multi-level Git configuration
- 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>
2025-12-08 10:44:23 -06:00

118 lines
4.6 KiB
SQL

-- =====================================================================================
-- Script de prueba: Policy notifications_select_admin
-- Objetivo: Verificar que los admins pueden ver todas las notificaciones
-- Fecha: 2025-11-24
-- Relacionado: DB-003
-- =====================================================================================
-- SETUP: Crear usuarios de prueba si no existen
DO $$
BEGIN
-- Asegurar que tenemos un usuario admin de prueba
IF NOT EXISTS (SELECT 1 FROM auth_management.profiles WHERE email = 'admin@test.com') THEN
INSERT INTO auth_management.profiles (id, email, display_name, role, status)
VALUES (
'00000000-0000-0000-0000-000000000001'::uuid,
'admin@test.com',
'Test Admin',
'super_admin',
'active'
);
END IF;
-- Asegurar que tenemos un usuario regular de prueba
IF NOT EXISTS (SELECT 1 FROM auth_management.profiles WHERE email = 'student@test.com') THEN
INSERT INTO auth_management.profiles (id, email, display_name, role, status)
VALUES (
'00000000-0000-0000-0000-000000000002'::uuid,
'student@test.com',
'Test Student',
'student',
'active'
);
END IF;
END $$;
-- SETUP: Crear notificaciones de prueba
INSERT INTO gamification_system.notifications (user_id, type, title, message, priority)
VALUES
('00000000-0000-0000-0000-000000000002'::uuid, 'achievement_unlocked', 'Test Notification 1', 'Student notification 1', 'medium'),
('00000000-0000-0000-0000-000000000002'::uuid, 'level_up', 'Test Notification 2', 'Student notification 2', 'high')
ON CONFLICT DO NOTHING;
-- =====================================================================================
-- TEST 1: Usuario regular solo ve sus propias notificaciones
-- =====================================================================================
SET app.current_user_id = '00000000-0000-0000-0000-000000000002';
SELECT
'TEST 1: Usuario regular' AS test_case,
COUNT(*) AS notification_count,
CASE
WHEN COUNT(*) >= 2 THEN 'PASS'
ELSE 'FAIL'
END AS result
FROM gamification_system.notifications;
-- =====================================================================================
-- TEST 2: Admin puede ver todas las notificaciones
-- =====================================================================================
SET app.current_user_id = '00000000-0000-0000-0000-000000000001';
SELECT
'TEST 2: Admin ve todas' AS test_case,
COUNT(*) AS notification_count,
CASE
WHEN COUNT(*) >= 2 THEN 'PASS'
ELSE 'FAIL'
END AS result
FROM gamification_system.notifications;
-- =====================================================================================
-- TEST 3: Verificar que admin puede ver notificaciones de otros usuarios
-- =====================================================================================
SELECT
'TEST 3: Admin ve notificaciones de otros' AS test_case,
n.user_id,
n.title,
n.message,
p.display_name AS notification_owner
FROM gamification_system.notifications n
JOIN auth_management.profiles p ON n.user_id = p.id
WHERE n.user_id != '00000000-0000-0000-0000-000000000001'::uuid
LIMIT 5;
-- =====================================================================================
-- TEST 4: Verificar que la función is_admin() funciona correctamente
-- =====================================================================================
SET app.current_user_id = '00000000-0000-0000-0000-000000000001';
SELECT
'TEST 4a: is_admin() con admin' AS test_case,
gamilit.is_admin() AS is_admin,
CASE
WHEN gamilit.is_admin() = true THEN 'PASS'
ELSE 'FAIL'
END AS result;
SET app.current_user_id = '00000000-0000-0000-0000-000000000002';
SELECT
'TEST 4b: is_admin() con usuario regular' AS test_case,
gamilit.is_admin() AS is_admin,
CASE
WHEN gamilit.is_admin() = false THEN 'PASS'
ELSE 'FAIL'
END AS result;
-- =====================================================================================
-- CLEANUP: Resetear el contexto
-- =====================================================================================
RESET app.current_user_id;
-- =====================================================================================
-- RESUMEN
-- =====================================================================================
SELECT
'RESUMEN: Policy notifications_select_admin' AS summary,
'La policy permite a los admins ver todas las notificaciones' AS description,
'Verificar que todos los tests anteriores pasaron' AS note;