22# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
33
44import base64
5+ from unittest .mock import Mock , patch
56
67from odoo .modules .module import get_module_resource
8+ from odoo .tests import users
79from odoo .tests .common import HttpCase , tagged
810
11+ from ..controllers .main import PortalSign
12+
913
1014@tagged ("post_install" , "-at_install" )
1115class TestSign (HttpCase ):
@@ -18,6 +22,8 @@ def setUp(self):
1822 ).read ()
1923 )
2024 self .signer = self .env ["res.partner" ].create ({"name" : "Signer" })
25+ self .portal_user = self .env .ref ("base.demo_user0" )
26+ self .portal_partner = self .portal_user .partner_id
2127 self .request = self .env ["sign.oca.request" ].create (
2228 {
2329 "data" : self .data ,
@@ -30,7 +36,23 @@ def setUp(self):
3036 "partner_id" : self .signer .id ,
3137 "role_id" : self .env .ref ("sign_oca.sign_role_customer" ).id ,
3238 },
33- )
39+ ),
40+ ],
41+ }
42+ )
43+ self .request2 = self .env ["sign.oca.request" ].create (
44+ {
45+ "data" : self .data ,
46+ "name" : "Demo template" ,
47+ "signer_ids" : [
48+ (
49+ 0 ,
50+ 0 ,
51+ {
52+ "partner_id" : self .portal_partner .id ,
53+ "role_id" : self .env .ref ("sign_oca.sign_role_customer" ).id ,
54+ },
55+ ),
3456 ],
3557 }
3658 )
@@ -45,6 +67,18 @@ def setUp(self):
4567 "height" : 10 ,
4668 }
4769 )
70+ self .item2 = self .request2 .add_item (
71+ {
72+ "role_id" : self .env .ref ("sign_oca.sign_role_customer" ).id ,
73+ "field_id" : self .env .ref ("sign_oca.sign_field_name" ).id ,
74+ "page" : 1 ,
75+ "position_x" : 10 ,
76+ "position_y" : 10 ,
77+ "width" : 10 ,
78+ "height" : 10 ,
79+ }
80+ )
81+ self .portal_sign = PortalSign ()
4882
4983 def test_portal (self ):
5084 self .authenticate ("portal" , "portal" )
@@ -71,3 +105,103 @@ def test_portal(self):
71105 val = self .request .signer_ids .get_info ()["items" ][key ].copy ()
72106 val ["value" ] = "My Name"
73107 data [key ] = val
108+
109+ def test_get_sign_requests_domain (self ):
110+ self .domain = self .portal_sign .get_sign_requests_domain (request = self )
111+ expected_domain = [
112+ ("request_id.state" , "=" , "sent" ),
113+ ("partner_id" , "child_of" , [self .env .user .partner_id .id ]),
114+ ("signed_on" , "=" , False ),
115+ ]
116+ self .assertEqual (sorted (self .domain ), sorted (expected_domain ))
117+
118+ def test_mocked_portal_methods (self ):
119+ domain = [("partner_id" , "in" , [self .signer .id ])]
120+ SignRequests = self .env ["sign.oca.request.signer" ].sudo ()
121+ sign_requests = SignRequests .search (domain )
122+ expected_values = {
123+ "sales_user" : self .env ["res.users" ],
124+ "page_name" : "My Sign Requests" ,
125+ "sign_requests" : sign_requests ,
126+ "pager" : {
127+ "page_count" : 2 ,
128+ "offset" : 0 ,
129+ "page" : {"url" : "/my/sign_requests" , "num" : 1 },
130+ "page_first" : {"url" : "/my/sign_requests" , "num" : 1 },
131+ "page_start" : {"url" : "/my/sign_requests" , "num" : 1 },
132+ "page_previous" : {"url" : "/my/sign_requests" , "num" : 1 },
133+ "page_next" : {"url" : "/my/sign_requests/page/2" , "num" : 1 },
134+ "page_end" : {"url" : "/my/sign_requests/page/2" , "num" : 1 },
135+ "page_last" : {"url" : "/my/sign_requests/page/2" , "num" : 1 },
136+ "pages" : [{"url" : "/my/sign_requests" , "num" : 1 }],
137+ },
138+ "default_url" : "/my/sign_requests" ,
139+ }
140+ expected_domain = [
141+ ("request_id.state" , "=" , "sent" ),
142+ ("partner_id" , "child_of" , [self .env .user .partner_id .id ]),
143+ ("signed_on" , "=" , False ),
144+ ]
145+ expected_home_values = {"sign_oca_count" : 1 }
146+
147+ class Capture :
148+ mock_response = Mock ()
149+
150+ def get_sign_requests_domain (self , request ):
151+ self .mock_response .domain = expected_domain
152+ return self .mock_response
153+
154+ def _prepare_sign_portal_rendering_values (
155+ self , request , page = 1 , sign_page = False , ** kwargs
156+ ):
157+ self .mock_response .values = expected_values
158+ return self .mock_response
159+
160+ def _prepare_home_portal_values (self , counters ):
161+ self .mock_response .home_values = {"sign_oca_count" : len (sign_requests )}
162+ return self .mock_response
163+
164+ capture = Capture ()
165+
166+ with patch (
167+ "odoo.addons.sign_oca.controllers.main.PortalSign.get_sign_requests_domain" ,
168+ capture .get_sign_requests_domain ,
169+ ):
170+ response = self .portal_sign .get_sign_requests_domain (capture .mock_response )
171+ self .assertEqual (response .domain , expected_domain )
172+
173+ with patch (
174+ (
175+ "odoo.addons.sign_oca.controllers.main.PortalSign"
176+ "._prepare_sign_portal_rendering_values"
177+ ),
178+ capture ._prepare_sign_portal_rendering_values ,
179+ ):
180+ response = self .portal_sign ._prepare_sign_portal_rendering_values (
181+ request = capture .mock_response , page = 1 , sign_page = False , kwargs = {}
182+ )
183+ self .assertEqual (response .values , expected_values )
184+
185+ with patch (
186+ (
187+ "odoo.addons.sign_oca.controllers.main.PortalSign"
188+ "._prepare_home_portal_values"
189+ ),
190+ capture ._prepare_home_portal_values ,
191+ ):
192+ response = self .portal_sign ._prepare_home_portal_values (
193+ counters = ["sign_oca_count" ]
194+ )
195+ self .assertEqual (response .home_values , expected_home_values )
196+
197+ @users ("portal" )
198+ def test_sign_requests (self ):
199+ self .authenticate ("portal" , "portal" )
200+ self .request2 .action_send ()
201+ self .url_open ("/my/sign_requests" ).raise_for_status ()
202+ response = self .url_open ("/my/sign_requests" )
203+ assert response .status_code == 200
204+ html = response .text
205+ assert "Sign Requests" in html
206+ assert "To be Signed" in html
207+ assert "Demo template" in html
0 commit comments