def test_initiate_waiver_from_name_email(self): with mock.patch.object(requests, 'post') as requests_post: result = waivers.initiate_waiver( participant=None, releasor=waivers.Person(name='Tim Beaver', email='*****@*****.**'), guardian=None, ) requests_post.assert_called_once() kwargs = requests_post.call_args[1] self.assertEqual( kwargs['json'], { 'status': 'sent', 'templateId': self.mocked_settings.DOCUSIGN_WAIVER_TEMPLATE_ID, 'templateRoles': [ { 'roleName': 'Releasor', 'name': 'Tim Beaver', 'email': '*****@*****.**', }, { 'roleName': 'MITOC Desk', 'name': 'MITOC Desk', 'email': '*****@*****.**', }, ], 'eventNotification': self.EXPECTED_EVENT_NOTIFICATION, }, ) self.assertEqual( result, waivers.InitiatedWaiverResult(email='*****@*****.**', url=None) )
def send_waiver( self, releasor: Optional[waivers.Person], guardian: Optional[waivers.Person], ): email, embedded_url = waivers.initiate_waiver( participant=self.request.participant, # type:ignore releasor=releasor, guardian=guardian, ) if not embedded_url: # Will be sent by email messages.success(self.request, f"Waiver sent to {email}") return redirect(embedded_url or self.get_success_url())
def send_waiver(self, **kwargs): email, embedded_url = initiate_waiver(**kwargs) if not embedded_url: # Will be sent by email messages.success(self.request, "Waiver sent to {}".format(email)) return redirect(embedded_url or self.get_success_url())
def test_must_provide_participant_or_releasor(self): """We need a name & and an email address somehow to complete a waiver.""" with self.assertRaises(ValueError): waivers.initiate_waiver(participant=None, releasor=None, guardian=None)
def test_guardian(self): participant = factories.ParticipantFactory.create( name='Tim Beaver', email='*****@*****.**' ) with self._mock_posts() as requests_post: waivers.initiate_waiver( participant, # Specifying releasor is redundant, but allowed releasor=waivers.Person(name='Tim Beaver', email='*****@*****.**'), guardian=waivers.Person( name='Timothy Beaver, Sr', email='*****@*****.**' ), ) self.assertEqual(len(requests_post.call_args_list), 2) # The first call is to create a new waiver ("envelope") env_args, env_kwargs = requests_post.call_args_list[0] self.assertEqual( env_args, ('https://demo.docusign.net/restapi/v2/accounts/123456/envelopes',), ) self.assertEqual( env_kwargs['json'], { 'status': 'sent', 'templateId': self.mocked_settings.DOCUSIGN_WAIVER_TEMPLATE_ID, 'templateRoles': [ { 'roleName': 'Releasor', 'name': 'Tim Beaver', 'email': '*****@*****.**', 'clientUserId': participant.pk, 'tabs': waivers.prefilled_tabs(participant), # Tested earlier }, { 'roleName': 'Parent or Guardian', 'name': 'Timothy Beaver, Sr', 'email': '*****@*****.**', }, { 'roleName': 'MITOC Desk', 'name': 'MITOC Desk', 'email': '*****@*****.**', }, ], 'eventNotification': self.EXPECTED_EVENT_NOTIFICATION, }, ) # The second call is to get a URL for the waiver embedded_args, embedded_kwargs = requests_post.call_args_list[1] self.assertEqual( embedded_args, ( 'https://demo.docusign.net/restapi/v2/accounts/123456/envelopes/some-envelope-id/views/recipient', ), ) # The participant must sign first, then the guardian can self.assertEqual( embedded_kwargs['json'], { 'userName': '******', 'email': '*****@*****.**', 'clientUserId': participant.pk, 'authenticationMethod': 'email', 'returnUrl': 'https://mitoc-trips.mit.edu', }, )
def test_no_guardian(self): """When a participant submits the form, we start an embedded flow for them.""" participant = factories.ParticipantFactory.create( name='Tim Beaver', email='*****@*****.**' ) with self._mock_posts() as requests_post: waivers.initiate_waiver(participant, releasor=None, guardian=None) self.assertEqual(len(requests_post.call_args_list), 2) # The first call is to create a new waiver ("envelope") env_args, env_kwargs = requests_post.call_args_list[0] self.assertEqual( env_args, ('https://demo.docusign.net/restapi/v2/accounts/123456/envelopes',), ) self.assertEqual( env_kwargs['headers'], { 'Accept': 'application/json', 'X-DocuSign-Authentication': self.expected_creds, }, ) self.assertEqual( env_kwargs['json'], { 'status': 'sent', 'templateId': self.mocked_settings.DOCUSIGN_WAIVER_TEMPLATE_ID, 'templateRoles': [ { 'roleName': 'Releasor', 'name': 'Tim Beaver', 'email': '*****@*****.**', 'clientUserId': participant.pk, 'tabs': waivers.prefilled_tabs(participant), # Tested earlier }, { 'roleName': 'MITOC Desk', 'name': 'MITOC Desk', 'email': '*****@*****.**', }, ], 'eventNotification': self.EXPECTED_EVENT_NOTIFICATION, }, ) # The second call is to get a URL for the waiver embedded_args, embedded_kwargs = requests_post.call_args_list[1] self.assertEqual( embedded_args, ( 'https://demo.docusign.net/restapi/v2/accounts/123456/envelopes/some-envelope-id/views/recipient', ), ) self.assertEqual( embedded_kwargs['headers'], { 'Accept': 'application/json', 'X-DocuSign-Authentication': self.expected_creds, }, ) self.assertEqual( embedded_kwargs['json'], { 'userName': '******', 'email': '*****@*****.**', 'clientUserId': participant.pk, 'authenticationMethod': 'email', 'returnUrl': 'https://mitoc-trips.mit.edu', }, )