mirror of
https://git.datalinker.icu/ltdrdata/ComfyUI-Manager
synced 2025-12-08 21:54:26 +08:00
198 lines
5.2 KiB
Python
198 lines
5.2 KiB
Python
"""
|
|
Tests for snapshot management endpoints.
|
|
"""
|
|
import pytest
|
|
import time
|
|
from datetime import datetime
|
|
from pathlib import Path
|
|
from typing import Callable, Dict, List, Optional
|
|
|
|
from utils.validation import validate_response
|
|
|
|
|
|
def test_get_snapshot_list(
|
|
api_request: Callable,
|
|
openapi_spec: Dict
|
|
):
|
|
"""
|
|
Test the endpoint for listing snapshots.
|
|
"""
|
|
# Make the API request
|
|
path = "/snapshot/getlist"
|
|
response, json_data = api_request(
|
|
method="get",
|
|
path=path,
|
|
expected_status=200,
|
|
)
|
|
|
|
# Validate response structure against the schema
|
|
assert json_data is not None
|
|
validate_response(
|
|
response_data=json_data,
|
|
path=path,
|
|
method="get",
|
|
spec=openapi_spec,
|
|
)
|
|
|
|
# Verify the response contains the expected fields
|
|
assert "items" in json_data
|
|
assert isinstance(json_data["items"], list)
|
|
|
|
|
|
def test_get_current_snapshot(
|
|
api_request: Callable,
|
|
openapi_spec: Dict
|
|
):
|
|
"""
|
|
Test the endpoint for getting the current snapshot.
|
|
"""
|
|
# Make the API request
|
|
path = "/snapshot/get_current"
|
|
response, json_data = api_request(
|
|
method="get",
|
|
path=path,
|
|
expected_status=200,
|
|
)
|
|
|
|
# Validate response structure against the schema
|
|
assert json_data is not None
|
|
validate_response(
|
|
response_data=json_data,
|
|
path=path,
|
|
method="get",
|
|
spec=openapi_spec,
|
|
)
|
|
|
|
# Check for basic snapshot structure
|
|
assert "snapshot_date" in json_data
|
|
assert "custom_nodes" in json_data
|
|
|
|
|
|
@pytest.mark.skip(reason="This test creates a snapshot which is a state-modifying operation")
|
|
def test_save_snapshot(
|
|
api_request: Callable
|
|
):
|
|
"""
|
|
Test the endpoint for saving a new snapshot.
|
|
Skipped to avoid modifying state in tests.
|
|
"""
|
|
pass
|
|
|
|
|
|
@pytest.mark.skip(reason="This test removes a snapshot which is a destructive operation")
|
|
def test_remove_snapshot(
|
|
api_request: Callable
|
|
):
|
|
"""
|
|
Test the endpoint for removing a snapshot.
|
|
Skipped to avoid modifying state in tests.
|
|
"""
|
|
pass
|
|
|
|
|
|
@pytest.mark.skip(reason="This test restores a snapshot which is a state-modifying operation")
|
|
def test_restore_snapshot(
|
|
api_request: Callable
|
|
):
|
|
"""
|
|
Test the endpoint for restoring a snapshot.
|
|
Skipped to avoid modifying state in tests.
|
|
"""
|
|
pass
|
|
|
|
|
|
class TestSnapshotWorkflow:
|
|
"""
|
|
Test the complete snapshot workflow (create, list, get, remove).
|
|
These tests are grouped to ensure proper sequencing but are still skipped
|
|
to avoid modifying state in automated tests.
|
|
"""
|
|
|
|
@pytest.fixture(scope="class")
|
|
def snapshot_name(self) -> str:
|
|
"""
|
|
Generate a unique snapshot name for testing.
|
|
"""
|
|
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
|
return f"test_snapshot_{timestamp}"
|
|
|
|
@pytest.mark.skip(reason="State-modifying test")
|
|
def test_create_snapshot(
|
|
self,
|
|
api_request: Callable,
|
|
snapshot_name: str
|
|
):
|
|
"""
|
|
Test creating a snapshot.
|
|
"""
|
|
# Make the API request to save a snapshot
|
|
response, _ = api_request(
|
|
method="get",
|
|
path="/snapshot/save",
|
|
expected_status=200,
|
|
)
|
|
|
|
# Verify a snapshot was created (would need to check the snapshot list)
|
|
response2, json_data = api_request(
|
|
method="get",
|
|
path="/snapshot/getlist",
|
|
expected_status=200,
|
|
)
|
|
|
|
# The most recently created snapshot should be first in the list
|
|
assert json_data["items"]
|
|
|
|
# Store the snapshot name for later tests
|
|
self.actual_snapshot_name = json_data["items"][0]
|
|
|
|
@pytest.mark.skip(reason="State-modifying test")
|
|
def test_get_snapshot_details(
|
|
self,
|
|
api_request: Callable,
|
|
openapi_spec: Dict
|
|
):
|
|
"""
|
|
Test getting details of the created snapshot.
|
|
"""
|
|
# This would check the current snapshot, not a specific one
|
|
# since there's no direct API to get a specific snapshot
|
|
response, json_data = api_request(
|
|
method="get",
|
|
path="/snapshot/get_current",
|
|
expected_status=200,
|
|
)
|
|
|
|
# Validate the snapshot data
|
|
assert json_data is not None
|
|
validate_response(
|
|
response_data=json_data,
|
|
path="/snapshot/get_current",
|
|
method="get",
|
|
spec=openapi_spec,
|
|
)
|
|
|
|
@pytest.mark.skip(reason="State-modifying test")
|
|
def test_remove_test_snapshot(
|
|
self,
|
|
api_request: Callable
|
|
):
|
|
"""
|
|
Test removing the test snapshot.
|
|
"""
|
|
# Make the API request to remove the snapshot
|
|
response, _ = api_request(
|
|
method="get",
|
|
path="/snapshot/remove",
|
|
params={"target": self.actual_snapshot_name},
|
|
expected_status=200,
|
|
)
|
|
|
|
# Verify the snapshot was removed
|
|
response2, json_data = api_request(
|
|
method="get",
|
|
path="/snapshot/getlist",
|
|
expected_status=200,
|
|
)
|
|
|
|
# The snapshot should no longer be in the list
|
|
assert self.actual_snapshot_name not in json_data["items"] |