import tempfile
import unittest
from pathlib import Path

from shorts_dashboard import create_app, init_db, score_candidate
from shorts_pipeline import AGENTS, evaluate_ratings, readiness, validate_source_url

class DashboardTests(unittest.TestCase):
    def test_publish_gate_requires_score_and_safety(self):
        self.assertTrue(score_candidate([90, 88, 87, 86, 89, 95], threshold=85))
        self.assertFalse(score_candidate([100, 100, 100, 100, 100, 89], threshold=85))
        self.assertFalse(score_candidate([84, 79, 79, 79, 90, 99], threshold=85))

    def test_health_and_summary(self):
        with tempfile.TemporaryDirectory() as d:
            db = Path(d) / 'test.db'
            init_db(db)
            app = create_app(db)
            app.testing = True
            client = app.test_client()
            self.assertEqual(client.get('/api/health').status_code, 200)
            payload = client.get('/api/summary').get_json()
            self.assertEqual(payload['threshold'], 85)
            self.assertEqual(payload['publishing_enabled'], False)

    def test_pipeline_contract_and_readiness(self):
        self.assertEqual(len(AGENTS), 6)
        self.assertTrue(validate_source_url('https://www.youtube.com/@source'))
        self.assertFalse(validate_source_url('https://example.com/video'))
        result = evaluate_ratings([90, 88, 87, 86, 89, 95])
        self.assertTrue(result.approved)
        self.assertEqual(result.safety, 95)
        self.assertFalse(readiness()['publishing_safe'])

if __name__ == '__main__':
    unittest.main()
