/ tests / future / test_ui / test_workspace / test_local.py
test_local.py
  1  import datetime
  2  
  3  import pandas as pd
  4  import pytest
  5  import uuid6
  6  
  7  from evidently.core.datasets import Dataset
  8  from evidently.core.report import Report
  9  from evidently.core.report import Snapshot
 10  from evidently.legacy.core import new_id
 11  from evidently.sdk.models import DashboardModel
 12  from evidently.sdk.models import DashboardPanelPlot
 13  from evidently.sdk.models import ProjectModel
 14  from evidently.ui.workspace import Workspace
 15  from evidently.ui.workspace import WorkspaceBase
 16  
 17  
 18  @pytest.fixture
 19  def workspace(tmpdir):
 20      return Workspace(str(tmpdir))
 21  
 22  
 23  @pytest.fixture
 24  def mock_project():
 25      return ProjectModel(
 26          id=uuid6.UUID(int=1, version=7),
 27          name="mock project",
 28      )
 29  
 30  
 31  @pytest.fixture
 32  def mock_snapshot():
 33      report = Report(metrics=[])
 34      snapshot = Snapshot(report, "mock", datetime.datetime.now(), metadata={}, tags=[])
 35      snapshot._widgets = []
 36      return snapshot
 37  
 38  
 39  @pytest.fixture
 40  def mock_dashboard():
 41      return DashboardModel(
 42          tabs=[],
 43          panels=[
 44              DashboardPanelPlot(id=new_id(), title="mock panel", subtitle=None, size="full", values=[], plot_params={})
 45          ],
 46      )
 47  
 48  
 49  def test_add_get_project(workspace: WorkspaceBase, mock_project: ProjectModel):
 50      workspace.add_project(mock_project)
 51      assert workspace.get_project(mock_project.id)._project == mock_project
 52  
 53  
 54  def test_list_project(workspace: WorkspaceBase, mock_project: ProjectModel):
 55      assert len(workspace.list_projects()) == 0
 56      workspace.add_project(mock_project)
 57      assert len(workspace.list_projects()) == 1
 58  
 59  
 60  def test_delete_project(workspace: WorkspaceBase, mock_project: ProjectModel):
 61      assert len(workspace.list_projects()) == 0
 62      workspace.add_project(mock_project)
 63      assert len(workspace.list_projects()) == 1
 64      workspace.delete_project(mock_project.id)
 65      assert len(workspace.list_projects()) == 0
 66  
 67  
 68  def test_add_snapshot(workspace: WorkspaceBase, mock_project: ProjectModel, mock_snapshot):
 69      project = workspace.add_project(mock_project)
 70      workspace.add_run(project.id, mock_snapshot)
 71      # todo
 72  
 73  
 74  def test_list_snapshot(workspace: WorkspaceBase, mock_project: ProjectModel, mock_snapshot):
 75      project = workspace.add_project(mock_project)
 76      assert len(workspace.list_runs(project.id)) == 0
 77      workspace.add_run(project.id, mock_snapshot)
 78      assert len(workspace.list_runs(project.id)) == 1
 79  
 80  
 81  def test_delete_snapshot(workspace: WorkspaceBase, mock_project: ProjectModel, mock_snapshot):
 82      project = workspace.add_project(mock_project)
 83      assert len(workspace.list_runs(project.id)) == 0
 84      run = workspace.add_run(project.id, mock_snapshot)
 85      assert len(workspace.list_runs(project.id)) == 1
 86      workspace.delete_run(project.id, run.id)
 87      assert len(workspace.list_runs(project.id)) == 0
 88  
 89  
 90  def test_add_get_dashboard(workspace: WorkspaceBase, mock_project: ProjectModel, mock_dashboard):
 91      project = workspace.add_project(mock_project)
 92      workspace.save_dashboard(project.id, mock_dashboard)
 93      assert workspace.get_dashboard(project.id) == mock_dashboard
 94  
 95  
 96  @pytest.fixture
 97  def mock_dataset():
 98      df = pd.DataFrame({"a": [1, 2, 3], "b": ["x", "y", "z"]})
 99      return Dataset.from_pandas(df, metadata={"test": "metadata"}, tags=["test_tag"])
100  
101  
102  def test_list_datasets(workspace: WorkspaceBase, mock_project: ProjectModel, mock_dataset: Dataset):
103      project = workspace.add_project(mock_project)
104  
105      assert len(workspace.list_datasets(project.id).datasets) == 0
106  
107      dataset_id = workspace.add_dataset(project.id, mock_dataset, "test_dataset", "Test description")
108  
109      datasets = workspace.list_datasets(project.id)
110      assert len(datasets.datasets) == 1
111      assert datasets.datasets[0].id == dataset_id
112      assert datasets.datasets[0].name == "test_dataset"
113      assert datasets.datasets[0].description == "Test description"
114      assert datasets.datasets[0].row_count == 3
115      assert datasets.datasets[0].column_count == 2
116      assert datasets.datasets[0].origin == "file"
117      assert "test_tag" in datasets.datasets[0].tags
118      assert datasets.datasets[0].metadata["test"] == "metadata"
119  
120  
121  def test_list_datasets_filter_by_origin(workspace: WorkspaceBase, mock_project: ProjectModel, mock_dataset: Dataset):
122      project = workspace.add_project(mock_project)
123  
124      dataset_id = workspace.add_dataset(project.id, mock_dataset, "test_dataset", "Test description")
125  
126      datasets = workspace.list_datasets(project.id, origins=["file"])
127      assert len(datasets.datasets) == 1
128      assert datasets.datasets[0].id == dataset_id
129  
130      datasets = workspace.list_datasets(project.id, origins=["tracing"])
131      assert len(datasets.datasets) == 0
132  
133  
134  def test_load_dataset(workspace: WorkspaceBase, mock_project: ProjectModel, mock_dataset: Dataset):
135      project = workspace.add_project(mock_project)
136  
137      dataset_id = workspace.add_dataset(project.id, mock_dataset, "test_dataset", "Test description")
138  
139      loaded_dataset = workspace.load_dataset(dataset_id)
140  
141      pd.testing.assert_frame_equal(loaded_dataset.as_dataframe(), mock_dataset.as_dataframe())
142      assert loaded_dataset.data_definition == mock_dataset.data_definition
143      assert loaded_dataset.metadata == mock_dataset.metadata
144      assert loaded_dataset.tags == mock_dataset.tags