41 lines
1.6 KiB
Python
41 lines
1.6 KiB
Python
import pytest
|
|
import pandas as pd
|
|
import os
|
|
from pathlib import Path
|
|
import matplotlib.figure as figure
|
|
|
|
from artifact_1.core import generate_signal_plot
|
|
|
|
|
|
def _create_test_csv(tmp_path: Path) -> Path:
|
|
data = [
|
|
{"timestamp": "2024-01-01T00:00:00Z", "frequency_MHz": 87.5, "signal_dB": -40.0, "noise_dB": -90.0, "lat": 48.5, "lon": 13.5},
|
|
{"timestamp": "2024-01-01T00:00:01Z", "frequency_MHz": 88.0, "signal_dB": -35.0, "noise_dB": -85.0, "lat": 48.5, "lon": 13.5},
|
|
{"timestamp": "2024-01-01T00:00:02Z", "frequency_MHz": 88.5, "signal_dB": -30.0, "noise_dB": -80.0, "lat": 48.5, "lon": 13.5},
|
|
]
|
|
df = pd.DataFrame(data)
|
|
csv_path = tmp_path / "test_sample.csv"
|
|
df.to_csv(csv_path, index=False)
|
|
return csv_path
|
|
|
|
|
|
def test_generate_signal_plot_valid(tmp_path):
|
|
csv_path = _create_test_csv(tmp_path)
|
|
fig = generate_signal_plot(str(csv_path))
|
|
assert isinstance(fig, figure.Figure)
|
|
assert len(fig.axes) > 0, "Figure should contain at least one axis"
|
|
# Check if axis title or labels contain frequency or signal
|
|
ax = fig.axes[0]
|
|
assert any('Frequency' in (label or '') for label in [ax.get_xlabel(), ax.get_ylabel(), ax.get_title()]), 'Labels should mention frequency or signal'
|
|
|
|
|
|
def test_generate_signal_plot_invalid_path():
|
|
with pytest.raises((FileNotFoundError, pd.errors.EmptyDataError, ValueError)):
|
|
generate_signal_plot('nonexistent.csv')
|
|
|
|
|
|
def test_generate_signal_plot_empty_file(tmp_path):
|
|
empty_csv = tmp_path / 'empty.csv'
|
|
empty_csv.write_text('')
|
|
with pytest.raises((pd.errors.EmptyDataError, ValueError)):
|
|
generate_signal_plot(str(empty_csv))
|