passerelle/tests/test_esup_signature.py

174 lines
6.5 KiB
Python

import base64
import pytest
import responses
from django.contrib.contenttypes.models import ContentType
from passerelle.apps.esup_signature.models import EsupSignature
from passerelle.base.models import AccessRight, ApiUser
@pytest.fixture()
def connector(db):
api = ApiUser.objects.create(username='all', keytype='', key='')
connector = EsupSignature.objects.create(
base_url='https://esup-signature.invalid/',
slug='esup-signature',
)
obj_type = ContentType.objects.get_for_model(connector)
AccessRight.objects.create(
codename='can_access', apiuser=api, resource_type=obj_type, resource_pk=connector.pk
)
return connector
def test_new(app, connector):
params = {
'file': {
'filename': 'bla',
'content': base64.b64encode(b'who what').decode(),
'content_type': 'text/plain',
},
'recipients_emails/0': 'foo@invalid',
'recipients_emails/1': 'bar@invalid',
'eppn': 'baz@invalid',
'title': 'a title',
}
with responses.RequestsMock() as rsps:
query_params = {
'recipientsEmails': ['foo@invalid', 'bar@invalid'],
'eppn': 'baz@invalid',
'title': 'a title',
'signType': 'pdfImageStamp',
'pending': True,
'allSignToComplete': False,
'userSignFirst': False,
'forceAllSign': False,
}
rsps.post(
'https://esup-signature.invalid/ws/signrequests/new',
match=[responses.matchers.query_param_matcher(query_params)],
status=200,
json=9,
)
resp = app.post_json('/esup-signature/esup-signature/new', params=params)
assert len(rsps.calls) == 1
assert rsps.calls[0].request.headers['Content-Type'].startswith('multipart/form-data')
json_resp = resp.json
assert json_resp['err'] == 0
assert json_resp['data'] == 9
def test_new_with_workflow(app, connector):
params = {
'file': {
'filename': 'bla',
'content': base64.b64encode(b'who what').decode(),
'content_type': 'text/plain',
},
'workflow_id': '99',
'create_by_eppn': 'aa@foo.com',
'title': 'a title',
'recipients_emails/0': '0*xx@foo.com',
'recipients_emails/1': '0*yy@foo.com',
'recipients_emails/2': '1*zz@foo.com',
'all_sign_to_completes/0': '12',
'all_sign_to_completes/1': '13',
'target_emails/0': 'xx@foo.com',
'target_emails/1': 'yy@foo.com',
'target_emails/2': 'zz@foo.com',
'signrequest_params_jsonstring': 'List [ OrderedMap { "xPos": 100, "yPos": 100, "signPageNumber": 1 }, '
'OrderedMap { "xPos": 200, "yPos": 200, "signPageNumber": 1 } ]',
'target_urls/0': 'smb://foo.bar/location-1/',
'target_urls/1': 'smb://foo.bar/location-2/',
}
with responses.RequestsMock() as rsps:
query_params = {
'createByEppn': 'aa@foo.com',
'title': 'a title',
'recipientsEmails': ['0*xx@foo.com', '0*yy@foo.com', '1*zz@foo.com'],
'allSignToCompletes': ['12', '13'],
'targetEmails': ['xx@foo.com', 'yy@foo.com', 'zz@foo.com'],
'signRequestParamsJsonString': 'List [ OrderedMap { "xPos": 100, "yPos": 100, "signPageNumber": 1 }, '
'OrderedMap { "xPos": 200, "yPos": 200, "signPageNumber": 1 } ]',
'targetUrls': ['smb://foo.bar/location-1/', 'smb://foo.bar/location-2/'],
}
rsps.post(
'https://esup-signature.invalid/ws/workflows/99/new',
match=[responses.matchers.query_param_matcher(query_params)],
status=200,
json=9,
)
resp = app.post_json('/esup-signature/esup-signature/new-with-workflow', params=params)
assert len(rsps.calls) == 1
assert rsps.calls[0].request.headers['Content-Type'].startswith('multipart/form-data')
json_resp = resp.json
assert json_resp['err'] == 0
assert json_resp['data'] == 9
def test_status(app, connector):
with responses.RequestsMock() as rsps:
rsps.get('https://esup-signature.invalid/ws/signrequests/1', status=200, json={'status': 'completed'})
resp = app.get('/esup-signature/esup-signature/status?signrequests_id=1')
assert resp.json['err'] == 0
assert resp.json['data']['status'] == 'completed'
def test_audit_trail(app, connector):
with responses.RequestsMock() as rsps:
rsps.get(
'https://esup-signature.invalid/ws/signrequests/audit-trail/1',
status=200,
json={'id': 1, 'documentCheckSum': 'abc'},
)
resp = app.get('/esup-signature/esup-signature/audit-trail?signrequests_id=1')
assert resp.json['err'] == 0
assert resp.json['data']['id'] == 1
assert resp.json['data']['documentCheckSum'] == 'abc'
def test_get_last_file(app, connector):
with responses.RequestsMock() as rsps:
headers = {'Content-Type': 'text/plain', 'Content-Disposition': 'attachment; filename=foo.txt'}
rsps.get(
'https://esup-signature.invalid/ws/signrequests/get-last-file/1',
status=200,
body='who hwat',
headers=headers,
)
resp = app.get('/esup-signature/esup-signature/get-last-file?signrequests_id=1')
assert resp.text == 'who hwat'
def test_forced_headers(app, connector):
connector.forced_headers = 'X-Foo:bar'
connector.save()
with responses.RequestsMock() as rsps:
headers = {'Content-Type': 'text/plain', 'Content-Disposition': 'attachment; filename=foo.txt'}
rsps.get(
'https://esup-signature.invalid/ws/signrequests/get-last-file/1',
status=200,
body='who hwat',
headers=headers,
)
app.get('/esup-signature/esup-signature/get-last-file?signrequests_id=1')
headers = rsps.calls[0].request.headers
assert headers['X-Foo'] == 'bar'
def test_workflows(app, connector):
with responses.RequestsMock() as rsps:
rsps.get(
'https://esup-signature.invalid/ws/workflows/all',
status=200,
json=[{'id': 0, 'description': 'foo'}, {'id': 1, 'description': 'bar'}],
)
resp = app.get('/esup-signature/esup-signature/workflows')
json_resp = resp.json
assert json_resp['err'] == 0
assert json_resp['data'] == [
{'id': 0, 'description': 'foo', 'text': 'foo'},
{'id': 1, 'description': 'bar', 'text': 'bar'},
]