Skip to content

Commit b8e6e4b

Browse files
Add directory metadata (#352)
1 parent 3965b05 commit b8e6e4b

File tree

3 files changed

+68
-6
lines changed

3 files changed

+68
-6
lines changed

tests/test_directory_sync.py

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
from typing import Union
2+
23
import pytest
4+
from workos.directory_sync import AsyncDirectorySync, DirectorySync
35

46
from tests.types.test_auto_pagination_function import TestAutoPaginationFunction
5-
from tests.utils.list_resource import list_data_to_dicts, list_response_of
6-
from tests.utils.fixtures.mock_directory import MockDirectory
7-
from tests.utils.fixtures.mock_directory_user import MockDirectoryUser
7+
from tests.utils.fixtures.mock_directory import (
8+
MockDirectory,
9+
MockDirectoryMetadata,
10+
MockDirectoryUsersMetadata,
11+
)
812
from tests.utils.fixtures.mock_directory_group import MockDirectoryGroup
13+
from tests.utils.fixtures.mock_directory_user import MockDirectoryUser
14+
from tests.utils.list_resource import list_data_to_dicts, list_response_of
915
from tests.utils.syncify import syncify
10-
from workos.directory_sync import AsyncDirectorySync, DirectorySync
1116

1217

1318
def api_directory_to_sdk(directory):
@@ -96,6 +101,16 @@ def mock_directories(self):
96101
directory_list = [MockDirectory(id=str(i)).dict() for i in range(10)]
97102
return list_response_of(data=directory_list)
98103

104+
@pytest.fixture
105+
def mock_directories_with_metadata(self):
106+
metadata = MockDirectoryMetadata(
107+
users=MockDirectoryUsersMetadata(active=1, inactive=0), groups=1
108+
)
109+
directory_list = [
110+
MockDirectory(id=str(i), metadata=metadata).dict() for i in range(10)
111+
]
112+
return list_response_of(data=directory_list)
113+
99114
@pytest.fixture
100115
def mock_directory_users_multiple_data_pages(self):
101116
return [
@@ -241,6 +256,27 @@ def test_list_directories(
241256
"order": "desc",
242257
}
243258

259+
def test_list_directories_with_metadata(
260+
self, mock_directories_with_metadata, capture_and_mock_http_client_request
261+
):
262+
request_kwargs = capture_and_mock_http_client_request(
263+
http_client=self.http_client,
264+
status_code=200,
265+
response_dict=mock_directories_with_metadata,
266+
)
267+
268+
directories = syncify(self.directory_sync.list_directories())
269+
270+
assert list_data_to_dicts(directories.data) == api_directories_to_sdk(
271+
mock_directories_with_metadata["data"]
272+
)
273+
assert request_kwargs["url"].endswith("/directories")
274+
assert request_kwargs["method"] == "get"
275+
assert request_kwargs["params"] == {
276+
"limit": 10,
277+
"order": "desc",
278+
}
279+
244280
def test_get_directory(self, mock_directory, capture_and_mock_http_client_request):
245281
request_kwargs = capture_and_mock_http_client_request(
246282
http_client=self.http_client,

tests/utils/fixtures/mock_directory.py

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,24 @@
11
import datetime
22

3-
from workos.types.directory_sync import Directory
3+
from workos.types.directory_sync import (
4+
Directory,
5+
DirectoryMetadata,
6+
DirectoryUsersMetadata,
7+
)
8+
9+
10+
class MockDirectoryUsersMetadata(DirectoryUsersMetadata):
11+
def __init__(self, active=0, inactive=0):
12+
super().__init__(active=active, inactive=inactive)
13+
14+
15+
class MockDirectoryMetadata(DirectoryMetadata):
16+
def __init__(self, users, groups=0):
17+
super().__init__(users=users, groups=groups)
418

519

620
class MockDirectory(Directory):
7-
def __init__(self, id):
21+
def __init__(self, id, metadata=None):
822
now = datetime.datetime.now().isoformat()
923
super().__init__(
1024
object="directory",
@@ -15,6 +29,7 @@ def __init__(self, id):
1529
name="Some fake name",
1630
state="active",
1731
type="gsuite directory",
32+
metadata=metadata,
1833
created_at=now,
1934
updated_at=now,
2035
)

workos/types/directory_sync/directory.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,16 @@
55
from workos.typing.literals import LiteralOrUntyped
66

77

8+
class DirectoryUsersMetadata(WorkOSModel):
9+
active: int
10+
inactive: int
11+
12+
13+
class DirectoryMetadata(WorkOSModel):
14+
users: DirectoryUsersMetadata
15+
groups: int
16+
17+
818
class Directory(WorkOSModel):
919
"""Representation of a Directory Response as returned by WorkOS through the Directory Sync feature."""
1020

@@ -16,5 +26,6 @@ class Directory(WorkOSModel):
1626
external_key: str
1727
state: LiteralOrUntyped[DirectoryState]
1828
type: LiteralOrUntyped[DirectoryType]
29+
metadata: Optional[DirectoryMetadata] = None
1930
created_at: str
2031
updated_at: str

0 commit comments

Comments
 (0)