From ace6411f238278297593b4ba2730cd7ab64a45f4 Mon Sep 17 00:00:00 2001 From: dtrodger Date: Tue, 1 Aug 2023 13:47:33 -0500 Subject: [PATCH 1/6] adds get sign template and get sign templates methods on Client --- boxsdk/client/client.py | 48 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/boxsdk/client/client.py b/boxsdk/client/client.py index 1e32e66d..78621e05 100644 --- a/boxsdk/client/client.py +++ b/boxsdk/client/client.py @@ -1629,3 +1629,51 @@ def get_sign_requests( fields=fields, return_full_pages=False, ) + + @api_call + def get_sign_templates( + self, + limit: Optional[int] = None, + marker: Optional[str] = None, + fields: Iterable[str] = None + ) -> 'BoxObjectCollection': + """ + Returns all sign templates + + :param limit: + The maximum number of entries to return per page. If not specified, then will use the server-side default. + :param marker: + The paging marker to start paging from. + :param fields: + List of fields to request. + :returns: + Sign templates + """ + return MarkerBasedObjectCollection( + session=self._session, + url=self.get_url("sign_templates"), + limit=limit, + marker=marker, + fields=fields, + return_full_pages=False, + ) + + @api_call + def get_sign_template( + self, + sign_template_id: str, + ) -> Any: + """ + Returns a sign template + + :param sign_template_id: + ID of Sign template to fetch + :returns: + Sign template + """ + + response = self._session.get(f"{self._session.get_url('sign_templates')}/{sign_template_id}") + return self.translator.translate( + session=self._session, + response_object=response.json(), + ) From 49ae5a1e2b6ac9419f5878b413a933fe6bb63ad1 Mon Sep 17 00:00:00 2001 From: David Rodgers Date: Tue, 1 Aug 2023 13:49:58 -0500 Subject: [PATCH 2/6] remove newline after doc string --- boxsdk/client/client.py | 1 - 1 file changed, 1 deletion(-) diff --git a/boxsdk/client/client.py b/boxsdk/client/client.py index 78621e05..88d5c139 100644 --- a/boxsdk/client/client.py +++ b/boxsdk/client/client.py @@ -1671,7 +1671,6 @@ def get_sign_template( :returns: Sign template """ - response = self._session.get(f"{self._session.get_url('sign_templates')}/{sign_template_id}") return self.translator.translate( session=self._session, From 2398f38bd0b9a21ec2e52861f515a688ccd318af Mon Sep 17 00:00:00 2001 From: Minh Nguyen Cong Date: Fri, 11 Aug 2023 11:57:22 +0200 Subject: [PATCH 3/6] Add tests --- boxsdk/client/client.py | 16 +- boxsdk/object/sign_template.py | 16 ++ docs/source/boxsdk.object.rst | 16 ++ .../object/sign_template_itest.py | 8 + test/unit/client/test_client.py | 138 ++++++++++++++++++ test/unit/object/conftest.py | 6 + test/unit/object/test_sign_templates.py | 119 +++++++++++++++ 7 files changed, 317 insertions(+), 2 deletions(-) create mode 100644 boxsdk/object/sign_template.py create mode 100644 test/integration_new/object/sign_template_itest.py create mode 100644 test/unit/object/test_sign_templates.py diff --git a/boxsdk/client/client.py b/boxsdk/client/client.py index 88d5c139..23d0f6a8 100644 --- a/boxsdk/client/client.py +++ b/boxsdk/client/client.py @@ -58,6 +58,7 @@ from boxsdk.object.group_membership import GroupMembership from boxsdk.object.enterprise import Enterprise from boxsdk.object.collection import Collection + from boxsdk.object.sign_template import SignTemplate from boxsdk.pagination.box_object_collection import BoxObjectCollection @@ -1629,7 +1630,18 @@ def get_sign_requests( fields=fields, return_full_pages=False, ) - + + def sign_template(self, sign_template_id: str) -> 'SignTemplate': + """ + Initialize a :class:`SignTemplate` object, whose box id is sign_template_id. + + :param sign_template_id: + The box id of the :class:`SignTemplate` object. + :return: + A :class:`SignTemplate` object with the given sign_template_id. + """ + return self.translator.get('sign_template')(session=self._session, object_id=sign_template_id) + @api_call def get_sign_templates( self, @@ -1657,7 +1669,7 @@ def get_sign_templates( fields=fields, return_full_pages=False, ) - + @api_call def get_sign_template( self, diff --git a/boxsdk/object/sign_template.py b/boxsdk/object/sign_template.py new file mode 100644 index 00000000..a5b8d009 --- /dev/null +++ b/boxsdk/object/sign_template.py @@ -0,0 +1,16 @@ +from typing import Any + +from .base_object import BaseObject + + +class SignTemplate(BaseObject): + """ + Represents a Sign Template used by Box Sign + """ + _item_type = 'sign-template' + + def get_url(self, *args: Any) -> str: + """ + Returns the url for this sign template. + """ + return self._session.get_url('sign_templates', self._object_id, *args) diff --git a/docs/source/boxsdk.object.rst b/docs/source/boxsdk.object.rst index 4b32a33e..142a6994 100644 --- a/docs/source/boxsdk.object.rst +++ b/docs/source/boxsdk.object.rst @@ -148,6 +148,14 @@ boxsdk.object.file module :undoc-members: :show-inheritance: +boxsdk.object.file\_request module +---------------------------------- + +.. automodule:: boxsdk.object.file_request + :members: + :undoc-members: + :show-inheritance: + boxsdk.object.file\_version module ---------------------------------- @@ -300,6 +308,14 @@ boxsdk.object.sign\_request module :undoc-members: :show-inheritance: +boxsdk.object.sign\_template module +----------------------------------- + +.. automodule:: boxsdk.object.sign_template + :members: + :undoc-members: + :show-inheritance: + boxsdk.object.storage\_policy module ------------------------------------ diff --git a/test/integration_new/object/sign_template_itest.py b/test/integration_new/object/sign_template_itest.py new file mode 100644 index 00000000..aeddc194 --- /dev/null +++ b/test/integration_new/object/sign_template_itest.py @@ -0,0 +1,8 @@ +from boxsdk.pagination.box_object_collection import BoxObjectCollection + +from test.integration_new import CLIENT + + +def test_get_sign_templates(): + sign_templates = CLIENT.get_sign_templates() + assert isinstance(sign_templates, BoxObjectCollection) diff --git a/test/unit/client/test_client.py b/test/unit/client/test_client.py index 0a4b7b43..bae0da22 100644 --- a/test/unit/client/test_client.py +++ b/test/unit/client/test_client.py @@ -1663,6 +1663,104 @@ def mock_sign_request_response(): return mock_sign_request +@pytest.fixture(scope='module') +def mock_sign_template_response(): + mock_sign_template = { + "id": "93153068-5420-467b-b8ef-8e54bfb7be42", + "name": "important-file.pdf", + "email_message": "Please sign this document.\n\nKind regards", + "email_subject": "Box User (boxuser@box.com) has requested your signature on a document", + "parent_folder": { + "id": "123456789", + "etag": "0", + "type": "folder", + "sequence_id": "0", + "name": "My Sign Requests" + }, + "auto_expire_days": "null", + "source_files": [ + { + "id": "123456", + "etag": "0", + "type": "file", + "sequence_id": "0", + "sha1": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "file_version": { + "id": "123456", + "type": "file_version", + "sha1": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + } + } + ], + "are_email_settings_locked": "false", + "are_fields_locked": "false", + "are_files_locked": "false", + "are_options_locked": "false", + "are_recipients_locked": "false", + "signers": [ + { + "email": "", + "label": "", + "public_id": "AAQXQXJZ4", + "role": "final_copy_reader", + "is_in_person": "false", + "order": 1, + "inputs": [] + }, + { + "email": "", + "label": "", + "public_id": "13XQXJZ4", + "role": "signer", + "is_in_person": "false", + "order": 1, + "inputs": [ + { + "document_tag_id": None, + "id": "0260f921-3b52-477f-ae74-0b0b0b0b0b0b", + "type": "signature", + "text_value": None, + "is_required": True, + "coordinates": { + "x": 0.27038464059712, + "y": 0.10051756244533624 + }, + "dimensions": { + "width": 0.23570031566618235, + "height": 0.04781003891921971 + }, + "date_value": None, + "page_index": 0, + "checkbox_value": None, + "document_id": "2fdf9003-d798-40ee-be7f-0b0b0b0b0b0b", + "content_type": "signature", + "dropdown_choices": None, + "group_id": None, + "label": None + } + ] + } + ], + "ready_sign_link": None, + "custom_branding": None, + "days_valid": 0, + "additional_info": { + "non_editable": [], + "required": { + "signers": [ + [ + "email" + ], + [ + "email" + ] + ] + } + } + } + return mock_sign_template + + def test_get_sign_requests(mock_client, mock_box_session, mock_sign_request_response): expected_url = f'{API.BASE_API_URL}/sign_requests' @@ -1750,3 +1848,43 @@ def test_file_request(mock_client): assert isinstance(file_request, FileRequest) assert file_request.object_id == file_request_id + + +def test_get_sign_template(mock_client, mock_box_session, mock_sign_template_response): + test_sign_template_id = '93153068-5420-467b-b8ef-8e54bfb7be42' + expected_url = '{0}/sign_templates/{1}'.format(API.BASE_API_URL, test_sign_template_id) + mock_box_session.get.return_value.json.return_value = mock_sign_template_response + + sign_template = mock_client.get_sign_template(test_sign_template_id) + + mock_box_session.get.assert_called_once_with(expected_url) + + # The response object missing `type` attribute, + # so the response object will not parsed to SignTemplate object + # assert isinstance(sign_template, SignTemplate) + + assert sign_template['id'] == '93153068-5420-467b-b8ef-8e54bfb7be42' + assert sign_template['name'] == 'important-file.pdf' + assert sign_template['email_message'] == 'Please sign this document.\n\nKind regards' + + +def test_get_sign_templates(mock_client, mock_box_session, mock_sign_template_response): + expected_url = f'{API.BASE_API_URL}/sign_templates' + + mock_sign_template = mock_sign_template_response + mock_box_session.get.return_value.json.return_value = { + 'total_count': 1, + 'limit': 100, + 'entries': [mock_sign_template], + 'next_marker': None, + 'previous_marker': None, + } + + sign_templates = mock_client.get_sign_templates() + + sign_template = sign_templates.next() + + mock_box_session.get.assert_called_once_with(expected_url, params={}) + # assert isinstance(sign_template, SignTemplate) + assert sign_template['id'] == '93153068-5420-467b-b8ef-8e54bfb7be42' + assert sign_template['name'] == 'important-file.pdf' diff --git a/test/unit/object/conftest.py b/test/unit/object/conftest.py index 8f8df424..a8c4fbd3 100644 --- a/test/unit/object/conftest.py +++ b/test/unit/object/conftest.py @@ -25,6 +25,7 @@ from boxsdk.object.retention_policy_assignment import RetentionPolicyAssignment from boxsdk.object.search import Search from boxsdk.object.sign_request import SignRequest +from boxsdk.object.sign_template import SignTemplate from boxsdk.object.storage_policy import StoragePolicy from boxsdk.object.storage_policy_assignment import StoragePolicyAssignment from boxsdk.object.terms_of_service import TermsOfService @@ -420,3 +421,8 @@ def test_sign_request(mock_box_session, mock_object_id): @pytest.fixture() def test_file_request(mock_box_session, mock_object_id): return FileRequest(mock_box_session, mock_object_id) + + +@pytest.fixture() +def test_sign_template(mock_box_session, mock_object_id): + return SignTemplate(mock_box_session, mock_object_id) diff --git a/test/unit/object/test_sign_templates.py b/test/unit/object/test_sign_templates.py new file mode 100644 index 00000000..84eacf1a --- /dev/null +++ b/test/unit/object/test_sign_templates.py @@ -0,0 +1,119 @@ +import pytest + +from boxsdk.config import API +from boxsdk.object.sign_template import SignTemplate + + +@pytest.fixture(scope='module') +def mock_sign_template_response(): + mock_sign_template = { + "id": "93153068-5420-467b-b8ef-8e54bfb7be42", + "name": "important-file.pdf", + "email_message": "Please sign this document.\n\nKind regards", + "email_subject": "Box User (boxuser@box.com) has requested your signature on a document", + "parent_folder": { + "id": "123456789", + "etag": "0", + "type": "folder", + "sequence_id": "0", + "name": "My Sign Requests" + }, + "auto_expire_days": "null", + "source_files": [ + { + "id": "123456", + "etag": "0", + "type": "file", + "sequence_id": "0", + "sha1": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "file_version": { + "id": "123456", + "type": "file_version", + "sha1": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + } + } + ], + "are_email_settings_locked": "false", + "are_fields_locked": "false", + "are_files_locked": "false", + "are_options_locked": "false", + "are_recipients_locked": "false", + "signers": [ + { + "email": "", + "label": "", + "public_id": "AAQXQXJZ4", + "role": "final_copy_reader", + "is_in_person": "false", + "order": 1, + "inputs": [] + }, + { + "email": "", + "label": "", + "public_id": "13XQXJZ4", + "role": "signer", + "is_in_person": "false", + "order": 1, + "inputs": [ + { + "document_tag_id": None, + "id": "0260f921-3b52-477f-ae74-0b0b0b0b0b0b", + "type": "signature", + "text_value": None, + "is_required": True, + "coordinates": { + "x": 0.27038464059712, + "y": 0.10051756244533624 + }, + "dimensions": { + "width": 0.23570031566618235, + "height": 0.04781003891921971 + }, + "date_value": None, + "page_index": 0, + "checkbox_value": None, + "document_id": "2fdf9003-d798-40ee-be7f-0b0b0b0b0b0b", + "content_type": "signature", + "dropdown_choices": None, + "group_id": None, + "label": None + } + ] + } + ], + "ready_sign_link": None, + "custom_branding": None, + "days_valid": 0, + "additional_info": { + "non_editable": [], + "required": { + "signers": [ + [ + "email" + ], + [ + "email" + ] + ] + } + } + } + return mock_sign_template + + +def test_get_sign_template(test_sign_template, mock_box_session, mock_sign_template_response): + expected_url = '{0}/sign_templates/{1}'.format(API.BASE_API_URL, test_sign_template.object_id) + mock_box_session.get.return_value.json.return_value = mock_sign_template_response + + sign_template = test_sign_template.get() + + mock_box_session.get.assert_called_once_with(expected_url, headers=None, params=None) + + # The response object missing `type` attribute, + # so the response object will not parsed to SignTemplate object + # assert isinstance(sign_template, SignTemplate) + + assert sign_template['id'] == '93153068-5420-467b-b8ef-8e54bfb7be42' + assert sign_template['name'] == 'important-file.pdf' + assert sign_template['email_message'] == 'Please sign this document.\n\nKind regards' From 60dff5f380778bbce4141de9a9b19b3fea3caf6b Mon Sep 17 00:00:00 2001 From: Minh Nguyen Cong Date: Fri, 11 Aug 2023 12:06:46 +0200 Subject: [PATCH 4/6] Fix lint --- test/unit/client/test_client.py | 2 +- test/unit/object/test_sign_templates.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/test/unit/client/test_client.py b/test/unit/client/test_client.py index bae0da22..f284f0b2 100644 --- a/test/unit/client/test_client.py +++ b/test/unit/client/test_client.py @@ -1852,7 +1852,7 @@ def test_file_request(mock_client): def test_get_sign_template(mock_client, mock_box_session, mock_sign_template_response): test_sign_template_id = '93153068-5420-467b-b8ef-8e54bfb7be42' - expected_url = '{0}/sign_templates/{1}'.format(API.BASE_API_URL, test_sign_template_id) + expected_url = f'{API.BASE_API_URL}/sign_templates/{test_sign_template_id}' mock_box_session.get.return_value.json.return_value = mock_sign_template_response sign_template = mock_client.get_sign_template(test_sign_template_id) diff --git a/test/unit/object/test_sign_templates.py b/test/unit/object/test_sign_templates.py index 84eacf1a..8148639f 100644 --- a/test/unit/object/test_sign_templates.py +++ b/test/unit/object/test_sign_templates.py @@ -1,7 +1,7 @@ import pytest from boxsdk.config import API -from boxsdk.object.sign_template import SignTemplate +# from boxsdk.object.sign_template import SignTemplate @pytest.fixture(scope='module') @@ -103,7 +103,7 @@ def mock_sign_template_response(): def test_get_sign_template(test_sign_template, mock_box_session, mock_sign_template_response): - expected_url = '{0}/sign_templates/{1}'.format(API.BASE_API_URL, test_sign_template.object_id) + expected_url = f'{API.BASE_API_URL}/sign_templates/{test_sign_template.object_id}' mock_box_session.get.return_value.json.return_value = mock_sign_template_response sign_template = test_sign_template.get() From bd46683ea410e059226342ef9ed402f70faeb827 Mon Sep 17 00:00:00 2001 From: Minh Nguyen Cong Date: Fri, 11 Aug 2023 12:37:01 +0200 Subject: [PATCH 5/6] Update docs --- boxsdk/client/client.py | 4 --- docs/usage/sign_requests.md | 2 +- docs/usage/sign_templates.md | 39 +++++++++++++++++++++++++ test/unit/client/test_client.py | 18 ++++++------ test/unit/object/test_sign_templates.py | 13 ++++----- 5 files changed, 55 insertions(+), 21 deletions(-) create mode 100644 docs/usage/sign_templates.md diff --git a/boxsdk/client/client.py b/boxsdk/client/client.py index 23d0f6a8..09746aad 100644 --- a/boxsdk/client/client.py +++ b/boxsdk/client/client.py @@ -1647,7 +1647,6 @@ def get_sign_templates( self, limit: Optional[int] = None, marker: Optional[str] = None, - fields: Iterable[str] = None ) -> 'BoxObjectCollection': """ Returns all sign templates @@ -1656,8 +1655,6 @@ def get_sign_templates( The maximum number of entries to return per page. If not specified, then will use the server-side default. :param marker: The paging marker to start paging from. - :param fields: - List of fields to request. :returns: Sign templates """ @@ -1666,7 +1663,6 @@ def get_sign_templates( url=self.get_url("sign_templates"), limit=limit, marker=marker, - fields=fields, return_full_pages=False, ) diff --git a/docs/usage/sign_requests.md b/docs/usage/sign_requests.md index 75a65708..e6bf618a 100644 --- a/docs/usage/sign_requests.md +++ b/docs/usage/sign_requests.md @@ -50,7 +50,7 @@ Get All Sign Requests ------------------------ Calling the [`client.get_sign_requests()`][get-all-sign-requests] -will return an iterable that will page through all the Sign Requests. This method offers `limit` and `fields` parameters. The `limit` parameter specifies the maximum number of items to be returned in a single response. The `fields` parameter is used to specify what additional properties should be returned on the return object. For more information on what `fields` are available, please refer to the [developer documentation](https://developer.box.com/guides/sign-request/). +will return an iterable that will page through all the Sign Requests. This method offers `limit` and `fields` parameters. The `limit` parameter specifies the maximum number of items to be returned in a single response. The `fields` parameter is used to specify what additional properties should be returned on the return object. For more information on what `fields` are available, please refer to the [developer documentation](https://developer.box.com/guides/box-sign/). ```python diff --git a/docs/usage/sign_templates.md b/docs/usage/sign_templates.md new file mode 100644 index 00000000..52ee0933 --- /dev/null +++ b/docs/usage/sign_templates.md @@ -0,0 +1,39 @@ +Sign Templates +============== + +Sign Templates are reusable templates that can be used to create Sign Requests. For now, Sign Templates can only be created through the Box web application. + + + + +- [Get All Sign Templates](#get-all-sign-templates) +- [Get Sign Template by ID](#get-sign-template-by-id) + + + +Get All Sign Templates +---------------------- + +Calling the [`client.get_sign_templates()`][get-all-sign-templates] method will return an iterable that will page through all the Sign Templates. This method offers `limit` parameter. The `limit` parameter specifies the maximum number of items to be returned in a single response. + + +```python +sign_templates = client.get_sign_templates() +for sign_template in sign_templates: + print(f'(Sign Template ID: {sign_template.id})') +``` + +[get-all-sign-templates]: https://box-python-sdk.readthedocs.io/en/latest/boxsdk.client.html#boxsdk.client.client.Client.get_sign_templates + +Get Sign Template by ID +----------------------- + +Calling the [`client.get_sign_template(template_id)`][get-sign-template] method will return a Sign Template object. + + +```python +sign_template = client.get_sign_template('12345') +print(f'(Sign Template ID: {sign_template.id})') +``` + +[get-sign-template]: https://box-python-sdk.readthedocs.io/en/latest/boxsdk.client.html#boxsdk.client.client.Client.get_sign_template diff --git a/test/unit/client/test_client.py b/test/unit/client/test_client.py index f284f0b2..82f5ba28 100644 --- a/test/unit/client/test_client.py +++ b/test/unit/client/test_client.py @@ -41,6 +41,7 @@ from boxsdk.object.legal_hold_policy_assignment import LegalHoldPolicyAssignment from boxsdk.object.metadata_cascade_policy import MetadataCascadePolicy from boxsdk.object.sign_request import SignRequest +from boxsdk.object.sign_template import SignTemplate from boxsdk.object.task import Task from boxsdk.object.task_assignment import TaskAssignment from boxsdk.object.webhook import Webhook @@ -1667,6 +1668,7 @@ def mock_sign_request_response(): def mock_sign_template_response(): mock_sign_template = { "id": "93153068-5420-467b-b8ef-8e54bfb7be42", + "type": "sign-template", "name": "important-file.pdf", "email_message": "Please sign this document.\n\nKind regards", "email_subject": "Box User (boxuser@box.com) has requested your signature on a document", @@ -1859,13 +1861,11 @@ def test_get_sign_template(mock_client, mock_box_session, mock_sign_template_res mock_box_session.get.assert_called_once_with(expected_url) - # The response object missing `type` attribute, - # so the response object will not parsed to SignTemplate object - # assert isinstance(sign_template, SignTemplate) + assert isinstance(sign_template, SignTemplate) - assert sign_template['id'] == '93153068-5420-467b-b8ef-8e54bfb7be42' - assert sign_template['name'] == 'important-file.pdf' - assert sign_template['email_message'] == 'Please sign this document.\n\nKind regards' + assert sign_template.id == '93153068-5420-467b-b8ef-8e54bfb7be42' + assert sign_template.name == 'important-file.pdf' + assert sign_template.email_message == 'Please sign this document.\n\nKind regards' def test_get_sign_templates(mock_client, mock_box_session, mock_sign_template_response): @@ -1885,6 +1885,6 @@ def test_get_sign_templates(mock_client, mock_box_session, mock_sign_template_re sign_template = sign_templates.next() mock_box_session.get.assert_called_once_with(expected_url, params={}) - # assert isinstance(sign_template, SignTemplate) - assert sign_template['id'] == '93153068-5420-467b-b8ef-8e54bfb7be42' - assert sign_template['name'] == 'important-file.pdf' + assert isinstance(sign_template, SignTemplate) + assert sign_template.id == '93153068-5420-467b-b8ef-8e54bfb7be42' + assert sign_template.name == 'important-file.pdf' diff --git a/test/unit/object/test_sign_templates.py b/test/unit/object/test_sign_templates.py index 8148639f..4742d2cf 100644 --- a/test/unit/object/test_sign_templates.py +++ b/test/unit/object/test_sign_templates.py @@ -1,13 +1,14 @@ import pytest from boxsdk.config import API -# from boxsdk.object.sign_template import SignTemplate +from boxsdk.object.sign_template import SignTemplate @pytest.fixture(scope='module') def mock_sign_template_response(): mock_sign_template = { "id": "93153068-5420-467b-b8ef-8e54bfb7be42", + "type": "sign-template", "name": "important-file.pdf", "email_message": "Please sign this document.\n\nKind regards", "email_subject": "Box User (boxuser@box.com) has requested your signature on a document", @@ -110,10 +111,8 @@ def test_get_sign_template(test_sign_template, mock_box_session, mock_sign_templ mock_box_session.get.assert_called_once_with(expected_url, headers=None, params=None) - # The response object missing `type` attribute, - # so the response object will not parsed to SignTemplate object - # assert isinstance(sign_template, SignTemplate) + assert isinstance(sign_template, SignTemplate) - assert sign_template['id'] == '93153068-5420-467b-b8ef-8e54bfb7be42' - assert sign_template['name'] == 'important-file.pdf' - assert sign_template['email_message'] == 'Please sign this document.\n\nKind regards' + assert sign_template.id == '93153068-5420-467b-b8ef-8e54bfb7be42' + assert sign_template.name == 'important-file.pdf' + assert sign_template.email_message == 'Please sign this document.\n\nKind regards' From 8ae8fed030bb065c58d335a9131624e40c052334 Mon Sep 17 00:00:00 2001 From: Minh Nguyen Cong Date: Fri, 11 Aug 2023 12:47:10 +0200 Subject: [PATCH 6/6] Add one more test --- test/unit/client/test_client.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/test/unit/client/test_client.py b/test/unit/client/test_client.py index 82f5ba28..97c26c2f 100644 --- a/test/unit/client/test_client.py +++ b/test/unit/client/test_client.py @@ -1852,6 +1852,19 @@ def test_file_request(mock_client): assert file_request.object_id == file_request_id +def test_get_sign_templates_from_id(mock_client, mock_box_session, mock_sign_template_response): + test_sign_template_id = '93153068-5420-467b-b8ef-8e54bfb7be42' + expected_url = f'{API.BASE_API_URL}/sign_templates/{test_sign_template_id}' + mock_box_session.get.return_value.json.return_value = mock_sign_template_response + + sign_template = mock_client.sign_template(test_sign_template_id).get() + + mock_box_session.get.assert_called_once_with(expected_url, headers=None, params=None) + + assert isinstance(sign_template, SignTemplate) + assert sign_template.id == '93153068-5420-467b-b8ef-8e54bfb7be42' + + def test_get_sign_template(mock_client, mock_box_session, mock_sign_template_response): test_sign_template_id = '93153068-5420-467b-b8ef-8e54bfb7be42' expected_url = f'{API.BASE_API_URL}/sign_templates/{test_sign_template_id}' @@ -1862,7 +1875,6 @@ def test_get_sign_template(mock_client, mock_box_session, mock_sign_template_res mock_box_session.get.assert_called_once_with(expected_url) assert isinstance(sign_template, SignTemplate) - assert sign_template.id == '93153068-5420-467b-b8ef-8e54bfb7be42' assert sign_template.name == 'important-file.pdf' assert sign_template.email_message == 'Please sign this document.\n\nKind regards'