56 lines
2.2 KiB
Python
56 lines
2.2 KiB
Python
"""
|
|
URL Extraction & VirusTotal Safety Rule Tests
|
|
PRD Section 14, 15:
|
|
- Any VirusTotal malicious detection (malicious > 0) blocks automation and quarantines idea.
|
|
- Safe URLs are approved.
|
|
"""
|
|
|
|
import pytest
|
|
import asyncio
|
|
from thinkstorm.processors.pipeline import process_url_safety, URL_REGEX
|
|
from thinkstorm.models import URLSafetyState, AutomationPolicy
|
|
from thinkstorm.database import init_db
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_url_extraction():
|
|
text = "Check out this repo https://github.com/thinkstorm/core and also http://test.com/docs for details."
|
|
urls = URL_REGEX.findall(text)
|
|
assert len(urls) == 2
|
|
assert "https://github.com/thinkstorm/core" in urls
|
|
assert "http://test.com/docs" in urls
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_safe_url_safety_check():
|
|
init_db()
|
|
idea_id = "TS-9901"
|
|
now = "2026-08-19T09:00:00Z"
|
|
from thinkstorm.database import get_db
|
|
with get_db() as conn:
|
|
conn.execute("INSERT OR IGNORE INTO ideas (id, original_text, submitted_at, created_at, updated_at) VALUES (?, ?, ?, ?, ?)", (idea_id, "text", now, now, now))
|
|
|
|
text = "Great idea with safe link https://example.com/project"
|
|
url_records, quarantine_needed = await process_url_safety(idea_id, text)
|
|
|
|
assert len(url_records) == 1
|
|
assert quarantine_needed is False
|
|
assert url_records[0].safety_state == URLSafetyState.SAFE
|
|
assert url_records[0].automation_policy == AutomationPolicy.APPROVED
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_malicious_url_safety_check_blocks_and_quarantines():
|
|
init_db()
|
|
idea_id = "TS-9902"
|
|
now = "2026-08-19T09:00:00Z"
|
|
from thinkstorm.database import get_db
|
|
with get_db() as conn:
|
|
conn.execute("INSERT OR IGNORE INTO ideas (id, original_text, submitted_at, created_at, updated_at) VALUES (?, ?, ?, ?, ?)", (idea_id, "text", now, now, now))
|
|
|
|
text = "Suspicious submission with bad link https://malicious-site.testmalicious/payload"
|
|
url_records, quarantine_needed = await process_url_safety(idea_id, text)
|
|
|
|
assert len(url_records) == 1
|
|
assert quarantine_needed is True
|
|
assert url_records[0].safety_state == URLSafetyState.MALICIOUS
|
|
assert url_records[0].automation_policy == AutomationPolicy.BLOCKED
|
|
assert url_records[0].admin_review_required is True
|