tests: split wcs tests (#68063)
This commit is contained in:
parent
05d1897627
commit
eca53776fb
|
@ -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
File diff suppressed because it is too large
Load Diff
|
@ -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}))
|
Loading…
Reference in New Issue