199 lines
6.5 KiB
Python
199 lines
6.5 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="", project_id=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="", project_id=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.total_count == 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(
|
|
priority_ids=[test_version.id], priority_ids_only=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.total_count == 1
|
|
assert result.items[0].id == test_version.id
|
|
|
|
def test_version_received(
|
|
self, client: SpeckleClient, test_version: Version, test_project: Project
|
|
):
|
|
input = MarkReceivedVersionInput(
|
|
version_id=test_version.id,
|
|
project_id=test_project.id,
|
|
source_application="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.total_count == 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(
|
|
priority_ids=[test_version.id], priority_ids_only=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.total_count == 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(
|
|
version_id=test_version.id, project_id=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.preview_url == test_version.preview_url
|
|
|
|
def test_version_move_to_model(
|
|
self,
|
|
client: SpeckleClient,
|
|
test_project: Project,
|
|
test_version: Version,
|
|
test_model_2: Model,
|
|
):
|
|
input = MoveVersionsInput(
|
|
target_model_name=test_model_2.name,
|
|
version_ids=[test_version.id],
|
|
project_id=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.preview_url == test_version.preview_url
|
|
|
|
def test_version_delete(
|
|
self, client: SpeckleClient, test_version: Version, test_project: Project
|
|
):
|
|
input = DeleteVersionsInput(
|
|
version_ids=[test_version.id], project_id=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)
|