Files
Thinh Lam 688fac73e9
CI/CD / backend (push) Failing after 2m8s
CI/CD / frontend (push) Failing after 1m40s
CI/CD / deploy (push) Has been skipped
sciagent code + Gitea Actions CI/CD
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 09:38:30 +07:00

84 lines
3.4 KiB
PL/PgSQL

-- Validation tests: run in a single transaction per block
-- ===========================================================
-- 1. SEED: units + users
INSERT INTO units(code, name, type) VALUES
('DHYD', 'Đại học Y Dược TP.HCM', 'TRUONG'),
('KHCN', 'Phòng Khoa học Công nghệ', 'PHONG');
INSERT INTO users(full_name, title, email, id_number, unit_id, qualification, user_type) VALUES
('Trần Hùng', 'PGS.TS', 'tranhung@ump.edu.vn', '001001', 1, 'Tiến sĩ', 'AUTHOR'),
('Đỗ Quốc Vũ', 'CN.', 'doquocvu@ump.edu.vn', '001002', 2, 'Cử nhân', 'AUTHOR'),
('Nguyễn Hội đồng A', 'PGS.TS', 'hdA@ump.edu.vn', '002001', 1, 'Tiến sĩ', 'COUNCIL');
-- 2. CREATE an application in DRAFT state
INSERT INTO applications(code, title, registration_year, status, purpose, primary_unit_id, created_by)
VALUES ('SK-2025-001',
'Quy trình xét duyệt Đạo đức trong nghiên cứu trên động vật',
2025, 'DRAFT',
'Chuẩn hoá quy trình xét duyệt hồ sơ',
2, 2);
-- 3. ADD authors with DEFERRED constraint (sums to 100 at COMMIT)
BEGIN;
INSERT INTO application_authors(application_id, user_id, contribution_pct, role) VALUES
(1, 1, 50, 'CO_AUTHOR'),
(1, 2, 50, 'PRIMARY');
-- At this point sum=100, but app is DRAFT so constraint doesn't even care yet
COMMIT;
-- Verify
SELECT 'Authors inserted:' AS step, count(*) FROM application_authors;
-- 4. TRY to submit the application (DRAFT → SUBMITTED): needs classification
-- This should FAIL the check constraint because no classification flag is set
\echo 'Test 4: should FAIL (missing classification)'
UPDATE applications SET status='SUBMITTED' WHERE application_id=1;
\echo ''
-- Fix and retry
UPDATE applications
SET is_technical_solution = TRUE,
status = 'SUBMITTED'
WHERE application_id = 1;
SELECT 'After submit:' AS step, status, submitted_at FROM applications WHERE application_id=1;
-- 5. TRY invalid transition SUBMITTED → APPROVED (should FAIL)
\echo 'Test 5: should FAIL (illegal transition)'
UPDATE applications SET status='APPROVED' WHERE application_id=1;
\echo ''
-- Valid transitions
UPDATE applications SET status='UNDER_REVIEW' WHERE application_id=1;
-- 6. EVALUATOR scores the application
INSERT INTO evaluations(application_id, evaluator_id, novelty_score, effectiveness_score, conclusion)
VALUES (1, 3, 35, 50, 'Đề xuất công nhận');
SELECT 'Evaluation:' AS step, novelty_score, effectiveness_score, total_score FROM evaluations;
-- 7. Move to EVALUATED → APPROVED
UPDATE applications SET status='EVALUATED' WHERE application_id=1;
UPDATE applications SET status='APPROVED' WHERE application_id=1;
SELECT 'Final status:' AS step, status, decided_at IS NOT NULL AS has_decision_time
FROM applications WHERE application_id=1;
-- 8. READ: summary view
SELECT code, title, status, author_names, avg_score, num_evaluations
FROM v_application_summary;
-- 9. AUDIT trail: who changed what?
SELECT table_name, action, changed_at,
(new_data->>'status') AS new_status
FROM audit_log
WHERE table_name = 'applications'
ORDER BY log_id;
-- 10. Bad contribution sum should fail at COMMIT
\echo 'Test 10: should FAIL (sum != 100 on submitted app)'
BEGIN;
UPDATE application_authors SET contribution_pct = 30 WHERE application_id=1 AND user_id=1;
-- sum is now 30+50=80, but app is APPROVED so trigger will reject at commit
COMMIT;