import pathlib

import plotly.graph_objects as go
import pytest

from hamilton.plugins.plotly_extensions import PlotlyInteractiveWriter, PlotlyStaticWriter


@pytest.fixture
def figure():
    yield go.Figure(data=go.Scatter(x=[1, 2, 3, 4, 5], y=[10, 14, 18, 24, 30], mode="markers"))


def test_plotly_static_writer(figure: go.Figure, tmp_path: pathlib.Path) -> None:
    file_path = tmp_path / "figure.png"

    writer = PlotlyStaticWriter(path=file_path)
    metadata = writer.save_data(figure)

    assert file_path.exists()
    assert metadata["path"] == file_path


def test_plotly_interactive_writer(figure: go.Figure, tmp_path: pathlib.Path) -> None:
    file_path = tmp_path / "figure.html"

    writer = PlotlyInteractiveWriter(path=file_path, auto_open=False)
    metadata = writer.save_data(figure)

    assert file_path.exists()
    assert metadata["path"] == file_path
