Skip to content

Commit d14c99a

Browse files
committed
Merged duplicate create_external_session tests
1 parent f2b70fe commit d14c99a

File tree

1 file changed

+10
-119
lines changed

1 file changed

+10
-119
lines changed

src/imio/esign/tests/test_utils.py

Lines changed: 10 additions & 119 deletions
Original file line numberDiff line numberDiff line change
@@ -251,125 +251,6 @@ def test_add_remove_files_to_session(self):
251251
self.assertEqual(len(annot["c_uids"]), 0)
252252
self.assertEqual(len(annot["sessions"]), 0)
253253

254-
def test_create_external_session(self):
255-
"""Test create_external_session with mocked requests.post and get_auth_token."""
256-
from mock import MagicMock
257-
from mock import patch
258-
259-
# Case 1: session not found => returns sentinel string, no HTTP call made
260-
with patch('imio.esign.utils.get_auth_token', return_value='test_token'), \
261-
patch('imio.esign.utils.requests') as mock_requests:
262-
result = create_external_session(999)
263-
self.assertEqual(result, "_session_not_found_")
264-
mock_requests.post.assert_not_called()
265-
266-
# Setup: create a session with two signers and a watcher
267-
signers = [
268-
("user1", "user1@sign.com", "User 1", "Position 1"),
269-
("user2", "user2@sign.com", "User 2", "Position 2"),
270-
]
271-
sid, session = add_files_to_session(
272-
signers, (self.uids[0], self.uids[2],), title=u"Test session", watchers=("watcher@sign.com",)
273-
)
274-
self.assertEqual(sid, 0)
275-
self.assertEqual(session["state"], "draft")
276-
277-
# Case 2: HTTP 200 => state becomes "sent", request payload is verified
278-
mock_response = MagicMock()
279-
mock_response.status_code = 200
280-
mock_response.text = '{"message": "Request received"}'
281-
with patch('imio.esign.utils.get_auth_token', return_value='test_token'), \
282-
patch('imio.esign.utils.requests') as mock_requests:
283-
mock_requests.post.return_value = mock_response
284-
result = create_external_session(sid)
285-
self.assertIs(result, mock_response)
286-
self.assertEqual(session["state"], "sent")
287-
mock_requests.post.assert_called_once()
288-
call_args = mock_requests.post.call_args
289-
posted_url = call_args[0][0]
290-
self.assertIn("imio/esign/v1/luxtrust/sessions", posted_url)
291-
self.assertEqual(call_args[1]["headers"]["Authorization"], "Bearer test_token")
292-
data = json.loads(call_args[1]["data"]["data"])
293-
self.assertIn("commonData", data)
294-
self.assertIn("signData", data)
295-
self.assertNotIn("sealData", data)
296-
self.assertEqual(data["commonData"]["sessionName"], u"Test session")
297-
self.assertEqual(data["commonData"]["imioAppSessionId"], session["sign_id"])
298-
self.assertEqual(data["signData"]["users"], ["user1@sign.com", "user2@sign.com"])
299-
self.assertEqual(data["signData"]["watchers"], ["watcher@sign.com"])
300-
files_param = call_args[1]["files"]
301-
self.assertEqual(len(files_param), 2)
302-
self.assertEqual(files_param[0][0], "files")
303-
self.assertEqual(files_param[0][1][0], u"annex0.pdf")
304-
self.assertEqual(files_param[1][0], "files")
305-
self.assertEqual(files_param[1][1][0], u"annex2.pdf")
306-
307-
# Case 3: HTTP non-200 => state unchanged (stays "draft")
308-
sid2, session2 = add_files_to_session(signers, (self.uids[2],), title=u"Test session 2")
309-
mock_response_fail = MagicMock()
310-
mock_response_fail.status_code = 400
311-
mock_response_fail.text = '{"error": "Bad request"}'
312-
with patch('imio.esign.utils.get_auth_token', return_value='test_token'), \
313-
patch('imio.esign.utils.requests') as mock_requests:
314-
mock_requests.post.return_value = mock_response_fail
315-
result = create_external_session(sid2)
316-
self.assertIs(result, mock_response_fail)
317-
self.assertEqual(session2["state"], "draft")
318-
319-
# Case 4: seal session without seal_code configured => returns "_no_seal_code_", no HTTP call
320-
api.portal.set_registry_record("imio.esign.seal_email", u"seal@example.com")
321-
annex0_obj = uuidToObject(uuid=self.uids[0], unrestricted=True)
322-
annex0_obj.file.filename = u"annex1.pdf"
323-
sid3, session3 = add_files_to_session(signers, (self.uids[4], self.uids[1], self.uids[0]), seal="PADES_SEAL")
324-
with patch('imio.esign.utils.get_auth_token', return_value='test_token'), \
325-
patch('imio.esign.utils.requests') as mock_requests:
326-
result = create_external_session(sid3)
327-
self.assertEqual(result, "_no_seal_code_")
328-
mock_requests.post.assert_not_called()
329-
330-
# Case 5: seal session with seal_code, custom URL => sealData in payload, correct URL used
331-
api.portal.set_registry_record("imio.esign.seal_code", u"PADES_SEAL")
332-
api.portal.set_registry_record("imio.esign.seal_email", u"seal@example.com")
333-
mock_response_seal = MagicMock()
334-
mock_response_seal.status_code = 200
335-
mock_response_seal.text = '{"message": "OK"}'
336-
with patch('imio.esign.utils.get_auth_token', return_value='test_token'), \
337-
patch('imio.esign.utils.requests') as mock_requests:
338-
mock_requests.post.return_value = mock_response_seal
339-
result = create_external_session(sid3, esign_root_url="https://custom.example.com")
340-
self.assertIs(result, mock_response_seal)
341-
self.assertEqual(session3["state"], "sent")
342-
call_args = mock_requests.post.call_args
343-
self.assertEqual(call_args[0][0], "https://custom.example.com/imio/esign/v1/luxtrust/sessions")
344-
data = json.loads(call_args[1]["data"]["data"])
345-
self.assertIn("sealData", data)
346-
self.assertEqual(data["sealData"]["sealCode"], "PADES_SEAL")
347-
self.assertEqual(data["sealData"]["users"], ["seal@example.com"])
348-
self.assertTrue(data["sealData"]["acroform"])
349-
files_param = call_args[1]["files"]
350-
self.assertEqual(len(files_param), 3)
351-
self.assertEqual(files_param[0][0], "files")
352-
self.assertEqual(files_param[0][1][0], u"annex4.pdf")
353-
self.assertEqual(files_param[1][0], "files")
354-
self.assertEqual(files_param[1][1][0], u"annex1.pdf")
355-
self.assertEqual(files_param[2][1][0], u"annex1-1.pdf")
356-
357-
# Case 6: session without files to send => returns "_no_files_", no HTTP call
358-
for i in range(len(session3["files"])):
359-
session3["files"][i]["uid"] = "nonexistent_uid_{}".format(i)
360-
with patch('imio.esign.utils.get_auth_token', return_value='test_token'), \
361-
patch('imio.esign.utils.requests') as mock_requests:
362-
result = create_external_session(sid3)
363-
self.assertEqual(result, "_no_files_")
364-
mock_requests.post.assert_not_called()
365-
366-
# case 7: bad session number to send => returns "_session_not_found_", no HTTP call
367-
with patch('imio.esign.utils.get_auth_token', return_value='test_token'), \
368-
patch('imio.esign.utils.requests') as mock_requests:
369-
result = create_external_session(99)
370-
self.assertEqual(result, "_session_not_found_")
371-
mock_requests.post.assert_not_called()
372-
373254
def test_get_filesize(self):
374255
"""Test get_filesize returns the correct file size."""
375256
# even index => annex1.pdf (6968 bytes)
@@ -617,6 +498,7 @@ def test_create_external_session_seal_payload(self):
617498
with patch("imio.esign.utils.requests.post", return_value=mock_response) as mock_post:
618499
with patch("imio.esign.utils.get_auth_token", return_value="test-token"):
619500
create_external_session(sid, esign_root_url="http://test.example.com")
501+
self.assertEqual(mock_post.call_args[0][0], "http://test.example.com/imio/esign/v1/luxtrust/sessions")
620502
payload = json.loads(mock_post.call_args[1]["data"]["data"])
621503
self.assertEqual(
622504
payload,
@@ -684,6 +566,15 @@ def test_create_external_session_both_payload(self):
684566
},
685567
)
686568

569+
def test_create_external_session_no_files(self):
570+
"""Returns _no_files_ when all file UIDs in the session resolve to nothing."""
571+
signers = [("user1", "user1@sign.com", "User 1", "Position 1")]
572+
sid, session = add_files_to_session(signers, (self.uids[0],))
573+
for i in range(len(session["files"])):
574+
session["files"][i]["uid"] = "nonexistent_uid_{}".format(i)
575+
result = create_external_session(sid, esign_root_url="http://test.example.com")
576+
self.assertEqual(result, "_no_files_")
577+
687578

688579
# example of annotation content
689580
"""

0 commit comments

Comments
 (0)