|
1 | 1 | # -*- coding: utf-8 -*- |
2 | 2 | """Browser views tests for this package.""" |
3 | 3 | from AccessControl import Unauthorized |
| 4 | +from collections import OrderedDict |
4 | 5 | from collective.iconifiedcategory.utils import calculate_category_id |
5 | 6 | from datetime import datetime |
6 | 7 | from datetime import timedelta |
7 | 8 | from imio.esign.browser.views import DownloadFileView |
8 | 9 | from imio.esign.browser.views import ExternalSessionCreateView |
| 10 | +from imio.esign.browser.views import ItemSessionInfoViewlet |
9 | 11 | from imio.esign.browser.views import SessionDeleteView |
10 | 12 | from imio.esign.browser.views import SigningUsersCsv |
11 | 13 | from imio.esign.config import set_registry_signing_users_email_content |
@@ -673,3 +675,84 @@ def test_render_email_content(self): |
673 | 675 | view = SigningUsersCsv(self.portal, self.request) |
674 | 676 | result = view._render_email_content(template, user_data) |
675 | 677 | self.assertEqual(result, u"<p>John Smith</p>") |
| 678 | + |
| 679 | + |
| 680 | +class TestItemSessionInfoViewlet(unittest.TestCase): |
| 681 | + """Test ItemSessionInfoViewlet multi-session support.""" |
| 682 | + |
| 683 | + layer = IMIO_ESIGN_INTEGRATION_TESTING |
| 684 | + |
| 685 | + def setUp(self): |
| 686 | + self.portal = self.layer["portal"] |
| 687 | + self.request = self.portal.REQUEST |
| 688 | + setRoles(self.portal, TEST_USER_ID, ["Manager"]) |
| 689 | + at_folder = api.content.create( |
| 690 | + container=self.portal, id="annexes_types", title="Annexes Types", |
| 691 | + type="ContentCategoryConfiguration", exclude_from_nav=True, |
| 692 | + ) |
| 693 | + category_group = api.content.create( |
| 694 | + type="ContentCategoryGroup", title="Annexes", |
| 695 | + container=at_folder, id="annexes", |
| 696 | + ) |
| 697 | + icon_path = os.path.join( |
| 698 | + os.path.dirname(collective.iconifiedcategory.__file__), "tests", u"ic\xf4ne1.png" |
| 699 | + ) |
| 700 | + with open(icon_path, "rb") as fl: |
| 701 | + api.content.create( |
| 702 | + type="ContentCategory", title="To sign", |
| 703 | + container=category_group, |
| 704 | + icon=NamedBlobImage(fl.read(), filename=u"ic\xf4ne1.png"), |
| 705 | + id="to_sign", predefined_title="To be signed", |
| 706 | + to_sign=True, show_preview=False, |
| 707 | + ) |
| 708 | + api.user.create(email="user1@sign.com", username="user1", password="password1") |
| 709 | + self.folder = api.content.create( |
| 710 | + container=self.portal, type="Folder", |
| 711 | + id="test_folder", title="Test Folder", |
| 712 | + ) |
| 713 | + tests_dir = os.path.dirname(__file__) |
| 714 | + self.annexes = [] |
| 715 | + for i in range(2): |
| 716 | + with open(os.path.join(tests_dir, "annex1.pdf"), "rb") as f: |
| 717 | + annex = api.content.create( |
| 718 | + container=self.folder, type="annex", |
| 719 | + id="annex{}".format(i), title="Annex {}".format(i), |
| 720 | + content_category=calculate_category_id( |
| 721 | + self.portal["annexes_types"]["annexes"]["to_sign"] |
| 722 | + ), |
| 723 | + scan_id="0123456000000{:02d}".format(i), |
| 724 | + file=NamedBlobFile( |
| 725 | + data=f.read(), filename=u"annex{}.pdf".format(i), |
| 726 | + contentType="application/pdf", |
| 727 | + ), |
| 728 | + ) |
| 729 | + self.annexes.append(annex) |
| 730 | + self.signers = [("user1", "user1@sign.com", "User 1", "Position 1")] |
| 731 | + for key in list(self.request.form.keys()): |
| 732 | + del self.request.form[key] |
| 733 | + |
| 734 | + def test_sessions_empty(self): |
| 735 | + """No files in esign annotation → sessions returns empty list.""" |
| 736 | + viewlet = ItemSessionInfoViewlet(self.folder, self.request, None, None) |
| 737 | + self.assertEqual(viewlet.sessions, OrderedDict()) |
| 738 | + self.assertEqual(viewlet.render(), "") |
| 739 | + |
| 740 | + def test_sessions_single_session(self): |
| 741 | + """All context files in one session → sessions returns one dict.""" |
| 742 | + uids = [a.UID() for a in self.annexes] |
| 743 | + add_files_to_session(self.signers, uids) |
| 744 | + viewlet = ItemSessionInfoViewlet(self.folder, self.request, None, None) |
| 745 | + sessions = viewlet.sessions |
| 746 | + self.assertEqual(len(sessions), 1) |
| 747 | + self.assertEqual(sessions.keys(), [0]) |
| 748 | + self.assertEqual(len(sessions[0]["files"]), len(uids)) |
| 749 | + |
| 750 | + def test_sessions_multiple_sessions(self): |
| 751 | + """Files in two sessions (different discriminators) → sessions returns two dicts.""" |
| 752 | + add_files_to_session(self.signers, [self.annexes[0].UID()], discriminators=("a",)) |
| 753 | + add_files_to_session(self.signers, [self.annexes[1].UID()], discriminators=("b",)) |
| 754 | + viewlet = ItemSessionInfoViewlet(self.folder, self.request, None, None) |
| 755 | + sessions = viewlet.sessions |
| 756 | + self.assertEqual(len(sessions), 2) |
| 757 | + session_ids = sessions.keys() |
| 758 | + self.assertEqual(session_ids, [0, 1]) |
0 commit comments