tests: split wcs tests (#68063)

This commit is contained in:
Lauréline Guérin 2022-08-11 14:01:57 +02:00
parent 05d1897627
commit eca53776fb
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
4 changed files with 2604 additions and 2574 deletions

14
tests/wcs/conftest.py Normal file
View File

@ -0,0 +1,14 @@
from importlib import import_module
import pytest
from django.conf import settings
from django.test.client import RequestFactory
@pytest.fixture
def context():
ctx = {'request': RequestFactory().get('/')}
ctx['request'].user = None
session_engine = import_module(settings.SESSION_ENGINE)
ctx['request'].session = session_engine.SessionStore()
return ctx

File diff suppressed because it is too large Load Diff

2175
tests/wcs/test_card.py Normal file

File diff suppressed because it is too large Load Diff

413
tests/wcs/utils.py Normal file
View File

@ -0,0 +1,413 @@
import copy
import json
import re
import urllib.parse
from unittest import mock
WCS_FORMDEFS_DATA = [
{'slug': 'a-private-form', 'title': 'a private form', 'url': '/a-private-form/'},
{'slug': 'a-second-form-title', 'title': 'a second form title', 'url': '/a-second-form-title/'},
{'slug': 'form-title', 'title': 'form title', 'url': '/form-title/', 'keywords': ['foo', 'bar']},
{'slug': 'third-form-title', 'title': 'Third form title', 'url': '/third-form-title/'},
]
WCS_CATEGORIES_DATA = [
{'slug': 'test-%s' % i, 'title': 'Test %s' % i, 'url': '/test-%s/' % i} for i in [3, 9]
]
WCS_CATEGORIES_FORMDEFS_DATA = [
{
'slug': 'form-title',
'title': 'form title',
'url': '/form-title/',
'keywords': ['foo', 'bar'],
'count': 42,
},
{
'slug': 'a-second-form-title',
'title': 'a second form title',
'url': '/a-second-form-title/',
'count': 35,
},
]
WCS_USER_FORMS_DATA = [
{
'name': 'name',
'title': 'Title',
'url': '/form/1/',
'form_receipt_datetime': '2015-01-01T00:00:00',
'readable': True,
'category_slug': 'test-9',
},
{'name': 'name', 'url': '/form/2/', 'form_receipt_datetime': '2015-01-01T00:00:00', 'readable': True},
{'name': 'name', 'title': 'Title', 'url': '/form/3/', 'form_receipt_datetime': '2015-01-01T00:00:00'},
]
WCS_FORMS_DATA = [
{
'form_receipt_datetime': '2019-10-17T16:46:03',
'form_url': '/foobar/1',
'form_url_backoffice': '/backoffice/management/foobar/1/',
},
{
'form_receipt_datetime': '2019-10-17T16:46:04',
'form_url': '/foobar/2',
'form_url_backoffice': '/backoffice/management/foobar/2/',
},
]
WCS_USER_DRAFTS_DATA = [
{
'name': 'name',
'title': 'Title',
'url': '/form/1/',
'form_receipt_datetime': '2015-01-01T00:00:00',
'category_slug': 'test-9',
},
{'name': 'name', 'url': '/form/2/', 'form_receipt_datetime': '2015-01-01T00:00:00'},
{'name': 'name', 'title': 'Title', 'url': '/form/3/', 'form_receipt_datetime': '2015-01-01T00:00:00'},
{
'name': 'name',
'title': 'Title',
'url': '/form/4/',
'form_receipt_datetime': '2015-01-01T00:00:00',
'form_status_is_endpoint': True,
'category_slug': 'test-9',
},
]
WCS_CARDDEFS_DATA = [
{'title': 'Card Model 1', 'slug': 'card_model_1', 'custom_views': [{'id': 'foo', 'text': 'bar'}]},
{'title': 'Card Model 2', 'slug': 'card_model_2'},
{'title': 'Card Model 3', 'slug': 'card_model_3'},
{'title': 'Card A', 'slug': 'card_a'},
{'title': 'Card B', 'slug': 'card_b', 'custom_views': [{'id': 'a-custom-view', 'text': 'foo bar'}]},
{'title': 'Card C', 'slug': 'card_c'},
{'title': 'Card D', 'slug': 'card_d'},
{'title': 'Card E', 'slug': 'card_e'},
]
WCS_CARDS_DATA = {
'card_model_1': [
{
'id': 11,
'display_id': '10-11',
'display_name': 'Card Model 1 - n°10-11',
'digest': 'a a a',
'text': 'aa',
'url': '/backoffice/data/card_model_1/11/',
'fields': {
'fielda': '<i>a</i>',
'fieldb': True,
'fieldc': '2020-09-28',
'fieldd': {'filename': 'file.pdf', 'url': 'http://127.0.0.1:8999/download?f=42'},
'fielde': "lorem<strong>ipsum\n\nhello'world",
'fieldf': 'lorem<strong>ipsum\n\nhello world',
'fieldg': 'test@localhost',
'fieldh': 'https://www.example.net/',
'related': 'Foo Bar',
'related_raw': 42,
'related_structured': {'id': 42, 'text': 'blah'},
},
},
{
'id': 12,
'display_id': '10-12',
'display_name': 'Card Model 1 - n°10-12',
'digest': 'b b b',
'text': 'bb',
'url': '/backoffice/data/card_model_1/12/',
},
{
'id': 13,
'display_id': '10-13',
'display_name': 'Card Model 1 - n°10-13',
'digest': 'c c c',
'text': 'cc',
'url': '/backoffice/data/card_model_1/13/',
},
],
'card_a': [
{
'id': 1,
'fields': {
'cardb_raw': 1,
'cardsb_raw': [2, 3],
'blockb_raw': [{'cardb_raw': 4}, {'cardb_raw': 5}],
'cardc_raw': 6,
'cardz_raw': 42,
},
},
{
'id': 2,
'fields': {
'cardb_raw': 1,
'cardsb_raw': [2, 3],
'blockb_raw': [{'cardb_raw': 4}, {'cardb_raw': 5}],
'cardc_raw': 61, # unknown card_c
},
},
{
'id': 3,
'fields': {
# some missing fields
'blockb_raw': [{}],
},
},
{
'id': 4,
'fields': {
# some empty fields
'cardb_raw': None,
'cardsb_raw': None,
'blockb_raw': [{'cardb_raw': None}],
'cardc_raw': 7,
},
},
],
'card_b': [{'id': i, 'fields': []} for i in range(1, 12) if i != 6],
'card_c': [
{
'id': 6,
'fields': {
'cardb_raw': 7,
'cardsb_raw': [8, 9],
'blockb_raw': [{'cardb_raw': 10}, {'cardb_raw': 11}],
},
},
{
'id': 7,
'fields': {},
},
],
'card_f': [
{'id': 41, 'fields': {'cardh_raw': 42}},
],
'card_g': [
{'id': 43, 'fields': {'cardh_raw': 44}},
],
'card_h': [
{'id': 42, 'fields': {}},
{'id': 44, 'fields': {}},
],
}
WCS_CARDS_CUSTOM_VIEW_DATA = [
{
'id': 11,
'display_id': '10-11',
'display_name': 'Card Model 1 - n°10-11',
'digest': 'a a a',
'text': 'aa',
'url': '/backoffice/data/card_model_1/11/',
},
{
'id': 12,
'display_id': '10-12',
'display_name': 'Card Model 1 - n°10-12',
'digest': 'b b b',
'text': 'bb',
'url': '/backoffice/data/card_model_1/12/',
},
]
WCS_CARDDEF_SCHEMAS = {
'card_model_1': {
'name': 'Card Model 1',
'fields': [
{'label': 'Field A', 'varname': 'fielda', 'type': 'string'},
{'label': 'Field B', 'varname': 'fieldb', 'type': 'bool'},
{'label': 'Field C', 'varname': 'fieldc', 'type': 'date'},
{'label': 'Field D', 'varname': 'fieldd', 'type': 'file'},
{'label': 'Field E', 'varname': 'fielde', 'type': 'text'},
{'label': 'Field F', 'varname': 'fieldf', 'type': 'text', 'pre': True},
{'label': 'Field G', 'varname': 'fieldg', 'type': 'email'},
{'label': 'Field H', 'varname': 'fieldh', 'type': 'string'},
{'label': 'Empty', 'varname': 'empty', 'type': 'string'},
{'label': 'Related', 'varname': 'related', 'type': 'item'},
{'label': 'Page', 'type': 'page'},
{'label': 'Comment', 'type': 'comment'},
{'label': 'Title', 'type': 'title'},
{'label': 'Subtitle', 'type': 'subtitle'},
{'label': 'Empty', 'varname': None, 'type': 'string'},
],
},
'card_a': {
'name': 'Card A',
'fields': [
{'label': 'Card B', 'varname': 'cardb', 'type': 'item'},
{'label': 'Cards B', 'varname': 'cardsb', 'type': 'items'},
{'label': 'Block B', 'varname': 'blockb', 'type': 'block:b'},
{'label': 'Card C', 'varname': 'cardc', 'type': 'item'},
],
'relations': [
{'obj': 'carddef:card_b', 'varname': 'cardb', 'type': 'item', 'reverse': False},
{'obj': 'carddef:card_b', 'varname': 'cardsb', 'type': 'items', 'reverse': False},
{'obj': 'carddef:card_b', 'varname': 'blockb_cardb', 'type': 'item', 'reverse': False},
{'obj': 'carddef:card_c', 'varname': 'cardc', 'type': 'item', 'reverse': False},
{
'obj': 'carddef:card_z', # unknown card model
'varname': 'cardz',
'type': 'item',
'reverse': False,
},
],
},
'card_b': {
'name': 'Card B',
'fields': [],
'relations': [
{'obj': 'carddef:card_a', 'varname': 'cardb', 'type': 'item', 'reverse': True},
{'obj': 'carddef:card_a', 'varname': 'cardsb', 'type': 'items', 'reverse': True},
{'obj': 'carddef:card_a', 'varname': 'blockb_cardb', 'type': 'item', 'reverse': True},
{'obj': 'carddef:card_c', 'varname': 'cardb', 'type': 'item', 'reverse': True},
{'obj': 'carddef:card_c', 'varname': 'cardsb', 'type': 'items', 'reverse': True},
{'obj': 'carddef:card_c', 'varname': 'blockb_cardb', 'type': 'item', 'reverse': True},
],
},
'card_c': {
'name': 'Card C',
'fields': [
{'label': 'Card B', 'varname': 'cardb', 'type': 'item'},
{'label': 'Cards B', 'varname': 'cardsb', 'type': 'items'},
{'label': 'Block B', 'varname': 'blockb', 'type': 'block:b'},
],
'relations': [
{'obj': 'carddef:card_b', 'varname': 'cardb', 'type': 'item', 'reverse': False},
{'obj': 'carddef:card_b', 'varname': 'cardsb', 'type': 'items', 'reverse': False},
{'obj': 'carddef:card_b', 'varname': 'blockb_cardb', 'type': 'item', 'reverse': False},
{'obj': 'carddef:card_a', 'varname': 'cardc', 'type': 'item', 'reverse': True},
],
},
'card_d': {
'name': 'Card D',
'fields': [
{'label': 'Card D', 'varname': 'cardd-foo', 'type': 'item'},
{'label': 'Card E', 'varname': 'carde-foo', 'type': 'item'},
],
'relations': [
{'obj': 'carddef:card_d', 'varname': 'cardd-foo', 'type': 'item', 'reverse': False},
{'obj': 'carddef:card_d', 'varname': 'cardd-foo', 'type': 'item', 'reverse': True},
{'obj': 'carddef:card_e', 'varname': 'carde-foo', 'type': 'item', 'reverse': False},
],
},
'card_e': {
'name': 'Card E',
'fields': [
{'label': 'Card D', 'varname': 'cardd-bar', 'type': 'item'},
],
'relations': [
{'obj': 'carddef:card_d', 'varname': 'cardd-bar', 'type': 'item', 'reverse': False},
{'obj': 'carddef:card_d', 'varname': 'carde-foo', 'type': 'item', 'reverse': True},
],
},
'card_f': {
'name': 'Card F',
'fields': [
{'label': 'Card H', 'varname': 'cardh', 'type': 'item'},
],
'relations': [
{'obj': 'carddef:card_h', 'varname': 'cardh', 'type': 'item', 'reverse': False},
],
},
'card_g': {
'name': 'Card G',
'fields': [
{'label': 'Card H', 'varname': 'cardh', 'type': 'item'},
],
'relations': [
{'obj': 'carddef:card_h', 'varname': 'cardh', 'type': 'item', 'reverse': False},
],
},
'card_h': {
'name': 'Card H',
'fields': [],
'relations': [
{'obj': 'carddef:card_f', 'varname': 'cardh', 'type': 'item', 'reverse': True},
{'obj': 'carddef:card_g', 'varname': 'cardh', 'type': 'item', 'reverse': True},
],
},
}
class MockUser:
email = 'foo@example.net'
is_authenticated = True
is_anonymous = False
def get_name_id(self):
return None
class MockUserWithNameId:
email = 'foo@example.net'
is_authenticated = True
is_anonymous = False
def get_name_id(self):
return 'xyz'
class MockedRequestResponse(mock.Mock):
status_code = 200
def json(self):
return json.loads(self.content)
def get_data_from_url(url):
if '/api/formdefs/' in url:
return WCS_FORMDEFS_DATA
if '/api/categories/' in url:
if '/formdefs/' in url:
return WCS_CATEGORIES_FORMDEFS_DATA
return WCS_CATEGORIES_DATA
if '/api/user/forms' in url:
return WCS_USER_FORMS_DATA
if '/api/forms' in url:
return WCS_FORMS_DATA
if '/api/user/drafts' in url:
return WCS_USER_DRAFTS_DATA
if '/api/cards/@list' in url:
return WCS_CARDDEFS_DATA
m_schema = re.match(r'/api/cards/([a-z0-9_]+)/@schema', url)
if m_schema:
return WCS_CARDDEF_SCHEMAS.get(m_schema.group(1)) or {}
m_card = re.match(r'/api/cards/([a-z0-9_]+)/(\d+)/', url)
if m_card:
try:
return [d for d in WCS_CARDS_DATA[m_card.group(1)] if d['id'] == int(m_card.group(2))][0]
except IndexError:
return {}
m_card = re.match(r'/api/cards/([a-z0-9_]+)/([a-z0-9_]+)/(\d+)/', url) # model/custom-view/id
if m_card:
try:
return [d for d in WCS_CARDS_DATA[m_card.group(1)] if d['id'] == int(m_card.group(3))][0]
except IndexError:
return {}
if 'api/cards/card_model_1/list/foo' in url:
return WCS_CARDS_CUSTOM_VIEW_DATA
m_list = re.match(r'/api/cards/([a-z0-9_]+)/list', url)
if m_list:
return WCS_CARDS_DATA.get(m_list.group(1)) or []
return []
def mocked_requests_send(request, **kwargs):
request_url = urllib.parse.urlparse(request.url)
data = copy.deepcopy(get_data_from_url(request_url.path))
if not isinstance(data, list):
return MockedRequestResponse(content=json.dumps(data))
for elem in data:
for key in ['url', 'form_url', 'form_url_backoffice']:
if key not in elem:
continue
elem_url = elem[key]
elem[key] = '{scheme}://{netloc}{url}'.format(
scheme=request_url.scheme, netloc=request_url.netloc, url=elem_url
)
return MockedRequestResponse(content=json.dumps({'data': data}))