workspace-v1/projects/gamilit/database/tests/test-admin-notifications-policy.sql
Adrian Flores Cortes 967ab360bb Initial commit: Workspace v1 with 3-layer architecture
Structure:
- control-plane/: Registries, SIMCO directives, CI/CD templates
- projects/: Gamilit, ERP-Suite, Trading-Platform, Betting-Analytics
- shared/: Libs catalog, knowledge-base

Key features:
- Centralized port, domain, database, and service registries
- 23 SIMCO directives + 6 fundamental principles
- NEXUS agent profiles with delegation rules
- Validation scripts for workspace integrity
- Dockerfiles for all services
- Path aliases for quick reference

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 00:35:19 -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;