mirror of
https://github.com/smittix/intercept.git
synced 2026-04-24 22:59:59 -07:00
- DMR/P25 digital voice decoder mode with DSD-FME integration - WebSDR mode with KiwiSDR audio proxy and websocket-client support - Listening post waterfall/spectrogram visualization and audio streaming - Dockerfile updates for mbelib and DSD-FME build dependencies - New tests for DMR, WebSDR, KiwiSDR, waterfall, and signal guess API - Chart.js date adapter for time-scale axes Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
101 lines
3.0 KiB
Python
101 lines
3.0 KiB
Python
"""Tests for the Signal Identification (guess) API endpoint."""
|
|
|
|
import pytest
|
|
|
|
|
|
@pytest.fixture
|
|
def auth_client(client):
|
|
"""Client with logged-in session."""
|
|
with client.session_transaction() as sess:
|
|
sess['logged_in'] = True
|
|
return client
|
|
|
|
|
|
def test_signal_guess_fm_broadcast(auth_client):
|
|
"""FM broadcast frequency should return a known signal type."""
|
|
resp = auth_client.post('/listening/signal/guess', json={
|
|
'frequency_mhz': 98.1,
|
|
'modulation': 'wfm',
|
|
})
|
|
assert resp.status_code == 200
|
|
data = resp.get_json()
|
|
assert data['status'] == 'ok'
|
|
assert data['primary_label']
|
|
assert data['confidence'] in ('HIGH', 'MEDIUM', 'LOW')
|
|
|
|
|
|
def test_signal_guess_airband(auth_client):
|
|
"""Airband frequency should be identified."""
|
|
resp = auth_client.post('/listening/signal/guess', json={
|
|
'frequency_mhz': 121.5,
|
|
'modulation': 'am',
|
|
})
|
|
assert resp.status_code == 200
|
|
data = resp.get_json()
|
|
assert data['status'] == 'ok'
|
|
assert data['primary_label']
|
|
|
|
|
|
def test_signal_guess_ism_band(auth_client):
|
|
"""ISM band frequency (433.92 MHz) should be identified."""
|
|
resp = auth_client.post('/listening/signal/guess', json={
|
|
'frequency_mhz': 433.92,
|
|
})
|
|
assert resp.status_code == 200
|
|
data = resp.get_json()
|
|
assert data['status'] == 'ok'
|
|
assert data['primary_label']
|
|
assert data['confidence'] in ('HIGH', 'MEDIUM', 'LOW')
|
|
|
|
|
|
def test_signal_guess_missing_frequency(auth_client):
|
|
"""Missing frequency should return 400."""
|
|
resp = auth_client.post('/listening/signal/guess', json={})
|
|
assert resp.status_code == 400
|
|
data = resp.get_json()
|
|
assert data['status'] == 'error'
|
|
|
|
|
|
def test_signal_guess_invalid_frequency(auth_client):
|
|
"""Invalid frequency value should return 400."""
|
|
resp = auth_client.post('/listening/signal/guess', json={
|
|
'frequency_mhz': 'abc',
|
|
})
|
|
assert resp.status_code == 400
|
|
|
|
|
|
def test_signal_guess_negative_frequency(auth_client):
|
|
"""Negative frequency should return 400."""
|
|
resp = auth_client.post('/listening/signal/guess', json={
|
|
'frequency_mhz': -5.0,
|
|
})
|
|
assert resp.status_code == 400
|
|
|
|
|
|
def test_signal_guess_with_region(auth_client):
|
|
"""Specifying region should work."""
|
|
resp = auth_client.post('/listening/signal/guess', json={
|
|
'frequency_mhz': 462.5625,
|
|
'region': 'US',
|
|
})
|
|
assert resp.status_code == 200
|
|
data = resp.get_json()
|
|
assert data['status'] == 'ok'
|
|
|
|
|
|
def test_signal_guess_response_structure(auth_client):
|
|
"""Response should have all expected fields."""
|
|
resp = auth_client.post('/listening/signal/guess', json={
|
|
'frequency_mhz': 146.52,
|
|
'modulation': 'fm',
|
|
})
|
|
assert resp.status_code == 200
|
|
data = resp.get_json()
|
|
assert 'primary_label' in data
|
|
assert 'confidence' in data
|
|
assert 'alternatives' in data
|
|
assert 'explanation' in data
|
|
assert 'tags' in data
|
|
assert isinstance(data['alternatives'], list)
|
|
assert isinstance(data['tags'], list)
|