Skip to content

Commit d71b616

Browse files
authored
Merge pull request #363 from specklesystems/jrm/filter-tests
Added tests for filters
2 parents 8dcc67f + 35750f1 commit d71b616

File tree

10 files changed

+144
-16
lines changed

10 files changed

+144
-16
lines changed

src/specklepy/api/client.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@
77
OtherUserResource,
88
ProjectInviteResource,
99
ProjectResource,
10+
ServerResource,
1011
SubscriptionResource,
1112
VersionResource,
1213
branch,
1314
commit,
1415
object,
15-
server,
1616
stream,
1717
subscriptions,
1818
user,
@@ -69,7 +69,7 @@ def __init__(
6969
self.account = Account()
7070

7171
def _init_resources(self) -> None:
72-
self.server = server.Resource(
72+
self.server = ServerResource(
7373
account=self.account, basepath=self.url, client=self.httpclient
7474
)
7575

src/specklepy/api/resources/current/active_user_resource.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@
33

44
from deprecated import deprecated
55

6-
from specklepy.core.api.inputs.project_inputs import UserProjectsFilter
7-
from specklepy.core.api.inputs.user_inputs import UserUpdateInput
6+
from specklepy.core.api.inputs.user_inputs import UserProjectsFilter, UserUpdateInput
87
from specklepy.core.api.models import (
98
PendingStreamCollaborator,
109
Project,

src/specklepy/api/resources/deprecated/server.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@
44
from specklepy.core.api.models.deprecated import FE1_DEPRECATION_VERSION
55

66

7-
@deprecated(reason="Renamed to ActiveUserResource", version=FE1_DEPRECATION_VERSION)
7+
@deprecated(reason="Renamed to ServerResource", version=FE1_DEPRECATION_VERSION)
88
class Resource(ServerResource):
99
"""Renamed to ServerResource"""
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
from specklepy.core.api.inputs.model_inputs import (
2+
CreateModelInput,
3+
DeleteModelInput,
4+
ModelVersionsFilter,
5+
UpdateModelInput,
6+
)
7+
from specklepy.core.api.inputs.project_inputs import (
8+
ProjectCreateInput,
9+
ProjectInviteCreateInput,
10+
ProjectInviteUseInput,
11+
ProjectModelsFilter,
12+
ProjectUpdateInput,
13+
ProjectUpdateRoleInput,
14+
)
15+
from specklepy.core.api.inputs.user_inputs import UserProjectsFilter, UserUpdateInput
16+
from specklepy.core.api.inputs.version_inputs import (
17+
CreateVersionInput,
18+
DeleteVersionsInput,
19+
MarkReceivedVersionInput,
20+
MoveVersionsInput,
21+
UpdateVersionInput,
22+
)
23+
24+
__all__ = [
25+
"CreateModelInput",
26+
"DeleteModelInput",
27+
"UpdateModelInput",
28+
"ModelVersionsFilter",
29+
"ProjectCreateInput",
30+
"ProjectInviteCreateInput",
31+
"ProjectInviteUseInput",
32+
"ProjectModelsFilter",
33+
"ProjectUpdateInput",
34+
"ProjectUpdateRoleInput",
35+
"UserProjectsFilter",
36+
"UserUpdateInput",
37+
"UpdateVersionInput",
38+
"MoveVersionsInput",
39+
"DeleteVersionsInput",
40+
"CreateVersionInput",
41+
"MarkReceivedVersionInput",
42+
]

src/specklepy/core/api/inputs/project_inputs.py

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,3 @@ class ProjectUpdateRoleInput(BaseModel):
4545
userId: str
4646
projectId: str
4747
role: Optional[str]
48-
49-
50-
class UserProjectsFilter(BaseModel):
51-
search: str
52-
onlyWithRoles: Optional[Sequence[str]] = None

src/specklepy/core/api/inputs/user_inputs.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from typing import Optional
1+
from typing import Optional, Sequence
22

33
from pydantic import BaseModel
44

@@ -8,3 +8,8 @@ class UserUpdateInput(BaseModel):
88
bio: Optional[str] = None
99
company: Optional[str] = None
1010
name: Optional[str] = None
11+
12+
13+
class UserProjectsFilter(BaseModel):
14+
search: str
15+
onlyWithRoles: Optional[Sequence[str]] = None

src/specklepy/core/api/resources/current/active_user_resource.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44
from deprecated import deprecated
55
from gql import gql
66

7-
from specklepy.core.api.inputs.project_inputs import UserProjectsFilter
8-
from specklepy.core.api.inputs.user_inputs import UserUpdateInput
7+
from specklepy.core.api.inputs.user_inputs import UserProjectsFilter, UserUpdateInput
98
from specklepy.core.api.models import (
109
ActivityCollection,
1110
PendingStreamCollaborator,

tests/integration/client/current/test_active_user_resource.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
from specklepy.api.client import SpeckleClient
44
from specklepy.core.api.inputs.project_inputs import ProjectCreateInput
5-
from specklepy.core.api.inputs.user_inputs import UserUpdateInput
5+
from specklepy.core.api.inputs.user_inputs import UserProjectsFilter, UserUpdateInput
66
from specklepy.core.api.models import ResourceCollection, User
77

88

@@ -42,3 +42,21 @@ def test_active_user_get_projects(self, client: SpeckleClient):
4242
assert len(res.items) == len(existing.items) + 2
4343
assert any(project.id == p1.id for project in res.items)
4444
assert any(project.id == p2.id for project in res.items)
45+
46+
def test_active_user_get_projects_with_filter(self, client: SpeckleClient):
47+
# Since the client may be reused for other tests,
48+
# this test does rely on no other test creating a project with "Search for me" in its name
49+
p1 = client.project.create(
50+
ProjectCreateInput(name="Search for me!", description=None, visibility=None)
51+
)
52+
_ = client.project.create(
53+
ProjectCreateInput(name="But not me!", description=None, visibility=None)
54+
)
55+
filter = UserProjectsFilter(search="Search for me")
56+
57+
res = client.active_user.get_projects(filter=filter)
58+
59+
assert isinstance(res, ResourceCollection)
60+
assert len(res.items) == 1
61+
assert res.totalCount == 1
62+
assert res.items[0].id == p1.id

tests/integration/client/current/test_model_resource.py

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@
66
DeleteModelInput,
77
UpdateModelInput,
88
)
9-
from specklepy.core.api.inputs.project_inputs import ProjectCreateInput
9+
from specklepy.core.api.inputs.project_inputs import (
10+
ProjectCreateInput,
11+
ProjectModelsFilter,
12+
)
1013
from specklepy.core.api.models.current import (
1114
Model,
1215
Project,
@@ -65,6 +68,18 @@ def test_model_get(
6568
assert result.createdAt == test_model.createdAt
6669
assert result.updatedAt == test_model.updatedAt
6770

71+
def test_models_get_with_filter(
72+
self, client: SpeckleClient, test_model: Model, test_project: Project
73+
):
74+
filter = ProjectModelsFilter(search=test_model.name)
75+
76+
result = client.model.get_models(test_project.id, models_filter=filter)
77+
78+
assert isinstance(result, ResourceCollection)
79+
assert len(result.items) == 1
80+
assert result.totalCount == 1
81+
assert result.items[0].id == test_model.id
82+
6883
def test_get_models(
6984
self, client: SpeckleClient, test_project: Project, test_model: Model
7085
):
@@ -82,6 +97,20 @@ def test_project_get_models(
8297

8398
assert isinstance(result, ProjectWithModels)
8499
assert result.id == test_project.id
100+
assert isinstance(result.models, ResourceCollection)
101+
assert len(result.models.items) == 1
102+
assert result.models.totalCount == 1
103+
assert result.models.items[0].id == test_model.id
104+
105+
def test_project_get_models_with_filter(
106+
self, client: SpeckleClient, test_project: Project, test_model: Model
107+
):
108+
filter = ProjectModelsFilter(search=test_model.name)
109+
result = client.project.get_with_models(test_project.id, models_filter=filter)
110+
111+
assert isinstance(result, ProjectWithModels)
112+
assert result.id == test_project.id
113+
assert isinstance(result.models, ResourceCollection)
85114
assert len(result.models.items) == 1
86115
assert result.models.totalCount == 1
87116
assert result.models.items[0].id == test_model.id

tests/integration/client/current/test_version_resource.py

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import pytest
22

33
from specklepy.api.client import SpeckleClient
4-
from specklepy.core.api.inputs.model_inputs import CreateModelInput
4+
from specklepy.core.api.inputs.model_inputs import CreateModelInput, ModelVersionsFilter
55
from specklepy.core.api.inputs.project_inputs import ProjectCreateInput
66
from specklepy.core.api.inputs.version_inputs import (
77
DeleteVersionsInput,
@@ -76,6 +76,26 @@ def test_versions_get(
7676
assert result.totalCount == 1
7777
assert result.items[0].id == test_version.id
7878

79+
def test_versions_get_with_filter(
80+
self,
81+
client: SpeckleClient,
82+
test_model_1: Model,
83+
test_project: Project,
84+
test_version: Version,
85+
):
86+
filter = ModelVersionsFilter(
87+
priorityIds=[test_version.id], priorityIdsOnly=True
88+
)
89+
90+
result = client.version.get_versions(
91+
test_model_1.id, test_project.id, filter=filter
92+
)
93+
94+
assert isinstance(result, ResourceCollection)
95+
assert len(result.items) == 1
96+
assert result.totalCount == 1
97+
assert result.items[0].id == test_version.id
98+
7999
def test_version_received(
80100
self, client: SpeckleClient, test_version: Version, test_project: Project
81101
):
@@ -103,6 +123,27 @@ def test_model_get_with_versions(
103123
assert result.versions.totalCount == 1
104124
assert result.versions.items[0].id == test_version.id
105125

126+
def test_model_get_with_versions_with_filter(
127+
self,
128+
client: SpeckleClient,
129+
test_model_1: Model,
130+
test_project: Project,
131+
test_version: Version,
132+
):
133+
filter = ModelVersionsFilter(
134+
priorityIds=[test_version.id], priorityIdsOnly=True
135+
)
136+
137+
result = client.model.get_with_versions(
138+
test_model_1.id, test_project.id, versions_filter=filter
139+
)
140+
141+
assert isinstance(result, ModelWithVersions)
142+
assert len(result.versions.items) == 1
143+
assert result.versions.totalCount == 1
144+
assert isinstance(result.versions, ResourceCollection)
145+
assert result.versions.items[0].id == test_version.id
146+
106147
def test_version_update(
107148
self, client: SpeckleClient, test_version: Version, test_project: Project
108149
):

0 commit comments

Comments
 (0)