88from codex import AuthenticationError
99from codex .types .project_return_schema import Config as ProjectReturnConfig
1010from codex .types .project_return_schema import ProjectReturnSchema
11- from codex .types .users .myself .user_organizations_schema import Organization as SDKOrganization
11+ from codex .types .users .myself .user_organizations_schema import (
12+ Organization as SDKOrganization ,
13+ )
1214from codex .types .users .myself .user_organizations_schema import UserOrganizationsSchema
1315
1416from cleanlab_codex .client import Client
2224FAKE_PROJECT_DESCRIPTION = "Test Description"
2325DEFAULT_PROJECT_CONFIG = ProjectConfig ()
2426DUMMY_API_KEY = "GP0FzPfA7wYy5L64luII2YaRT2JoSXkae7WEo7dH6Bw"
27+ FAKE_TEMPLATE_PROJECT_ID = str (uuid .uuid4 ())
2528
2629
2730def test_client_uses_default_organization (mock_client_from_api_key : MagicMock ) -> None :
@@ -41,7 +44,9 @@ def test_client_uses_default_organization(mock_client_from_api_key: MagicMock) -
4144 assert client .organization_id == default_org_id
4245
4346
44- def test_client_uses_specified_organization (mock_client_from_api_key : MagicMock ) -> None :
47+ def test_client_uses_specified_organization (
48+ mock_client_from_api_key : MagicMock ,
49+ ) -> None :
4550 """Test that client uses specified organization ID"""
4651 specified_org_id = "specified-org-id"
4752 client = Client (DUMMY_API_KEY , organization_id = specified_org_id )
@@ -63,6 +68,7 @@ def test_create_project_without_description(
6368 organization_id = FAKE_ORGANIZATION_ID ,
6469 updated_at = datetime .now (),
6570 description = None ,
71+ is_template = False ,
6672 )
6773 client = Client (DUMMY_API_KEY , organization_id = FAKE_ORGANIZATION_ID )
6874 project = client .create_project (FAKE_PROJECT_NAME ) # no description
@@ -126,6 +132,7 @@ def test_create_project(mock_client_from_api_key: MagicMock, default_headers: di
126132 organization_id = FAKE_ORGANIZATION_ID ,
127133 updated_at = datetime .now (),
128134 description = FAKE_PROJECT_DESCRIPTION ,
135+ is_template = False ,
129136 )
130137 mock_client_from_api_key .organization_id = FAKE_ORGANIZATION_ID
131138 codex = Client (DUMMY_API_KEY , organization_id = FAKE_ORGANIZATION_ID )
@@ -151,10 +158,36 @@ def test_get_project(mock_client_from_api_key: MagicMock) -> None:
151158 organization_id = FAKE_ORGANIZATION_ID ,
152159 updated_at = datetime .now (),
153160 description = FAKE_PROJECT_DESCRIPTION ,
161+ is_template = False ,
154162 )
155163
156164 project = Client (DUMMY_API_KEY , organization_id = FAKE_ORGANIZATION_ID ).get_project (FAKE_PROJECT_ID )
157165 assert project .id == FAKE_PROJECT_ID
158166
159167 assert mock_client_from_api_key .projects .retrieve .call_count == 1
160168 assert mock_client_from_api_key .projects .retrieve .call_args [0 ][0 ] == FAKE_PROJECT_ID
169+
170+
171+ def test_create_project_from_template (mock_client_from_api_key : MagicMock , default_headers : dict [str , str ]) -> None :
172+ mock_client_from_api_key .projects .create_from_template .return_value = ProjectReturnSchema (
173+ id = FAKE_PROJECT_ID ,
174+ config = ProjectReturnConfig (),
175+ created_at = datetime .now (),
176+ created_by_user_id = FAKE_USER_ID ,
177+ name = FAKE_PROJECT_NAME ,
178+ organization_id = FAKE_ORGANIZATION_ID ,
179+ updated_at = datetime .now (),
180+ description = FAKE_PROJECT_DESCRIPTION ,
181+ is_template = False ,
182+ )
183+ mock_client_from_api_key .organization_id = FAKE_ORGANIZATION_ID
184+ codex = Client (DUMMY_API_KEY , organization_id = FAKE_ORGANIZATION_ID )
185+ project = codex .create_project_from_template (FAKE_TEMPLATE_PROJECT_ID , FAKE_PROJECT_NAME , FAKE_PROJECT_DESCRIPTION )
186+ mock_client_from_api_key .projects .create_from_template .assert_called_once_with (
187+ organization_id = FAKE_ORGANIZATION_ID ,
188+ template_project_id = FAKE_TEMPLATE_PROJECT_ID ,
189+ name = FAKE_PROJECT_NAME ,
190+ description = FAKE_PROJECT_DESCRIPTION ,
191+ extra_headers = default_headers ,
192+ )
193+ assert project .id == FAKE_PROJECT_ID
0 commit comments