Files
specklepy/tests/integration/client/current/test_version_resource.py
T
2025-01-19 20:23:21 +01:00

199 lines
6.4 KiB
Python

import pytest
from specklepy.api.client import SpeckleClient
from specklepy.core.api.inputs.model_inputs import CreateModelInput, ModelVersionsFilter
from specklepy.core.api.inputs.project_inputs import ProjectCreateInput
from specklepy.core.api.inputs.version_inputs import (
DeleteVersionsInput,
MarkReceivedVersionInput,
MoveVersionsInput,
UpdateVersionInput,
)
from specklepy.core.api.models import (
Model,
ModelWithVersions,
Project,
ResourceCollection,
Version,
)
from specklepy.logging.exceptions import GraphQLException
from tests.integration.conftest import create_version
@pytest.mark.run()
class TestVersionResource:
@pytest.fixture
def test_project(self, client: SpeckleClient) -> Project:
project = client.project.create(
ProjectCreateInput(name="Test project", description="", visibility=None)
)
return project
@pytest.fixture
def test_model_1(self, client: SpeckleClient, test_project: Project) -> Model:
model1 = client.model.create(
CreateModelInput(
name="Test Model 1", description="", projectId=test_project.id
)
)
return model1
@pytest.fixture
def test_model_2(self, client: SpeckleClient, test_project: Project) -> Model:
model2 = client.model.create(
CreateModelInput(
name="Test Model 2", description="", projectId=test_project.id
)
)
return model2
@pytest.fixture
def test_version(
self, client: SpeckleClient, test_project: Project, test_model_1: Model
) -> Version:
return create_version(client, test_project.id, test_model_1.id)
def test_version_get(
self, client: SpeckleClient, test_version: Version, test_project: Project
):
result = client.version.get(test_version.id, test_project.id)
assert isinstance(result, Version)
assert result.id == test_version.id
assert result.message == test_version.message
def test_versions_get(
self,
client: SpeckleClient,
test_model_1: Model,
test_project: Project,
test_version: Version,
):
result = client.version.get_versions(test_model_1.id, test_project.id)
assert isinstance(result, ResourceCollection)
assert len(result.items) == 1
assert result.totalCount == 1
assert result.items[0].id == test_version.id
def test_versions_get_with_filter(
self,
client: SpeckleClient,
test_model_1: Model,
test_project: Project,
test_version: Version,
):
filter = ModelVersionsFilter(
priorityIds=[test_version.id], priorityIdsOnly=True
)
result = client.version.get_versions(
test_model_1.id, test_project.id, filter=filter
)
assert isinstance(result, ResourceCollection)
assert len(result.items) == 1
assert result.totalCount == 1
assert result.items[0].id == test_version.id
def test_version_received(
self, client: SpeckleClient, test_version: Version, test_project: Project
):
input = MarkReceivedVersionInput(
versionId=test_version.id,
projectId=test_project.id,
sourceApplication="Integration test",
)
result = client.version.received(input)
assert result is True
def test_model_get_with_versions(
self,
client: SpeckleClient,
test_model_1: Model,
test_project: Project,
test_version: Version,
):
result = client.model.get_with_versions(test_model_1.id, test_project.id)
assert isinstance(result, ModelWithVersions)
assert result.id == test_model_1.id
assert len(result.versions.items) == 1
assert result.versions.totalCount == 1
assert result.versions.items[0].id == test_version.id
def test_model_get_with_versions_with_filter(
self,
client: SpeckleClient,
test_model_1: Model,
test_project: Project,
test_version: Version,
):
filter = ModelVersionsFilter(
priorityIds=[test_version.id], priorityIdsOnly=True
)
result = client.model.get_with_versions(
test_model_1.id, test_project.id, versions_filter=filter
)
assert isinstance(result, ModelWithVersions)
assert len(result.versions.items) == 1
assert result.versions.totalCount == 1
assert isinstance(result.versions, ResourceCollection)
assert result.versions.items[0].id == test_version.id
def test_version_update(
self, client: SpeckleClient, test_version: Version, test_project: Project
):
new_message = "MY new version message"
input = UpdateVersionInput(
versionId=test_version.id, projectId=test_project.id, message=new_message
)
updated_version = client.version.update(input)
assert isinstance(updated_version, Version)
assert updated_version.id == test_version.id
assert updated_version.message == new_message
assert updated_version.previewUrl == test_version.previewUrl
def test_version_move_to_model(
self,
client: SpeckleClient,
test_project: Project,
test_version: Version,
test_model_2: Model,
):
input = MoveVersionsInput(
targetModelName=test_model_2.name,
versionIds=[test_version.id],
projectId=test_project.id,
)
moved_model_id = client.version.move_to_model(input)
assert isinstance(moved_model_id, str)
assert moved_model_id == test_model_2.id
moved_version = client.version.get(test_version.id, test_project.id)
assert isinstance(moved_version, Version)
assert moved_version.id == test_version.id
assert moved_version.message == test_version.message
assert moved_version.previewUrl == test_version.previewUrl
def test_version_delete(
self, client: SpeckleClient, test_version: Version, test_project: Project
):
input = DeleteVersionsInput(
versionIds=[test_version.id], projectId=test_project.id
)
response = client.version.delete(input)
assert response is True
with pytest.raises(GraphQLException):
client.version.get(test_version.id, test_project.id)
with pytest.raises(GraphQLException):
client.version.delete(input)