This repository has been archived on 2023-02-22. You can view files and clone it, but cannot push or open issues or pull requests.
passerelle-atreal-openads/tests/test_views.py

444 lines
16 KiB
Python

# -*- coding: utf-8 -*-
"""Testing views."""
import os
import base64
import datetime
import pytest
from django.http.request import HttpRequest, QueryDict
from django.urls.base import resolve
from django.core.files import File
from atreal_openads.views import (
get_connecteur_from_request,
get_collectivite_from_request,
AtrealOpenadsView,
ForwardFileView,
ForwardFileListView,
ForwardFileUpdateView,
ForwardFileDeleteView,
CollectiviteView,
CollectiviteListView,
CollectiviteCreateView,
CollectiviteUpdateView,
CollectiviteDeleteView,
GuichetView,
GuichetCreateView,
GuichetUpdateView,
GuichetDeleteView
)
from atreal_openads.models import (
ForwardFile,
Guichet,
Collectivite,
AtrealOpenads
)
CONNECTOR_NAME = 'atreal-openads'
CONNECTOR_SLUG = 'atreal'
COLLECTIVITE = 79
OPENADS_API_LOGIN = 'publik-passerelle'
OPENADS_API_PASSWORD = base64.urlsafe_b64encode(os.urandom(20))
OPENADS_API_URL = 'http://openads.api/'
FAKE_COOKIE_CRSF = base64.urlsafe_b64encode(os.urandom(20))
FAKE_NUMERO_DOSSIER = base64.urlsafe_b64encode(os.urandom(10))
TESTS_DIR = os.path.dirname(__file__)
RESOURCES_DIR = os.path.join(TESTS_DIR, 'resources')
TEST_FILE_CERFA_DIA = os.path.join(RESOURCES_DIR, 'cerfa_10072-02.pdf')
TEST_FILE_PLAN_CADASTRAL = os.path.join(RESOURCES_DIR, 'plancadastral.pdf')
@pytest.fixture
# pylint: disable=unused-argument,invalid-name
def atreal_openads(db):
"""Return an instance of a connector AtrealOpenads."""
return AtrealOpenads.objects.create(
slug=CONNECTOR_SLUG,
default_collectivite_openADS_id=COLLECTIVITE,
openADS_API_url=OPENADS_API_URL,
basic_auth_username=OPENADS_API_LOGIN,
basic_auth_password=OPENADS_API_PASSWORD
)
@pytest.fixture
# pylint: disable=unused-argument,redefined-outer-name,invalid-name
def collectivite_1(db, atreal_openads):
"""Return an instance of a 'Collectivite'."""
return Collectivite.objects.create( # pylint: disable=no-member
name=u'Macollectivité',
connecteur=atreal_openads,
openADS_id='3'
)
@pytest.fixture
# pylint: disable=unused-argument,redefined-outer-name,invalid-name
def collectivite_1_guichet(db, atreal_openads, collectivite_1):
"""Return an instance of a 'Guichet'."""
return Guichet.objects.create( # pylint: disable=no-member
collectivite=collectivite_1,
ouverture_jour_h=datetime.time(9, 0),
fermeture_jour_h=datetime.time(17, 0),
ouverture_sem_d=1, # Lundi
fermeture_sem_d=5, # Vendredi
ouverture_sem_h=datetime.time(8, 30),
fermeture_sem_h=datetime.time(12, 15)
)
@pytest.fixture
# pylint: disable=unused-argument,redefined-outer-name,invalid-name
def forwardfile_1(db, atreal_openads, collectivite_1):
"""Return an instance of a 'ForwardFile'."""
return ForwardFile.objects.create( # pylint: disable=no-member
connecteur=atreal_openads,
collectivite=collectivite_1,
numero_demande='45641531',
numero_dossier=FAKE_NUMERO_DOSSIER,
type_fichier='CERFA',
orig_filename=os.path.basename(TEST_FILE_CERFA_DIA),
content_type='application/pdf',
file_hash='ffdf456fdsvgb4bgfb6g4f5b',
upload_file=File(open(TEST_FILE_CERFA_DIA, 'r')),
upload_status='pending'
)
# pylint: disable=unused-argument,redefined-outer-name
def test_get_connecteur_from_request(atreal_openads, forwardfile_1): # pylint: disable=invalid-name
"""Test for function 'get_connecteur_from_request()'."""
req = HttpRequest()
req.path = '/manage/atreal-openads/%s/forward-file/%s' % (
atreal_openads.slug, forwardfile_1.id)
req.method = 'GET'
req.encoding = 'utf-8'
req.GET = QueryDict(mutable=True) # required because of encoding setter
req.POST = QueryDict(mutable=True) # required because of encoding setter
req.content_params = None
req.COOKIES = {}
req.META = {}
req._read_started = False # pylint: disable=protected-access
req.resolver_match = resolve(req.path)
view = ForwardFileView()
view.request = req
connecteur = get_connecteur_from_request(view)
assert connecteur is not None
assert connecteur.slug == atreal_openads.slug
# pylint: disable=unused-argument,redefined-outer-name
def test_get_collectivite_from_request(atreal_openads, collectivite_1): # pylint: disable=invalid-name
"""Test for function 'get_collectivite_from_request()'."""
req = HttpRequest()
req.path = '/manage/atreal-openads/%s/collectivite/%s/forward-files' % (
atreal_openads.slug, collectivite_1.id)
req.method = 'GET'
req.encoding = 'utf-8'
req.GET = QueryDict(mutable=True) # required because of encoding setter
req.POST = QueryDict(mutable=True) # required because of encoding setter
req.content_params = None
req.COOKIES = {}
req.META = {}
req._read_started = False # pylint: disable=protected-access
req.resolver_match = resolve(req.path)
view = ForwardFileListView()
view.request = req
collectivite = get_collectivite_from_request(view)
assert collectivite is not None
assert collectivite.id == collectivite_1.id
# pylint: disable=too-many-statements
def test_forwardfile_view(atreal_openads, collectivite_1, forwardfile_1):
"""Test for views 'ForwardFile*View'."""
req = HttpRequest()
req.path = '/manage/atreal-openads/%s/forward-file/%s' % (
atreal_openads.slug, forwardfile_1.id)
req.method = 'GET'
req.encoding = 'utf-8'
req.GET = QueryDict(mutable=True) # required because of encoding setter
req.POST = QueryDict(mutable=True) # required because of encoding setter
req.content_params = None
req.COOKIES = {}
req.META = {}
req._read_started = False # pylint: disable=protected-access
req.resolver_match = resolve(req.path)
view = ForwardFileView()
view.request = req
view.object = None
view.kwargs = req.resolver_match.kwargs
context = view.get_context_data()
assert context['connecteur'].slug == atreal_openads.slug
view = ForwardFileUpdateView()
view.request = req
view.object = None
view.kwargs = req.resolver_match.kwargs
context = view.get_context_data()
assert context['connecteur'].slug == atreal_openads.slug
url = view.get_success_url()
assert url == u'/manage/atreal-openads/%s/forward-file/%s' % (
atreal_openads.slug, forwardfile_1.id)
req.GET['back-to'] = 'list-forward-files'
url = view.get_success_url()
assert url == u'/manage/atreal-openads/%s/forward-files' % atreal_openads.slug
req.GET['back-to'] = 'col-list-forward-files'
url = view.get_success_url()
assert url == u'/manage/atreal-openads/%s/collectivite/%s/forward-files' % (
atreal_openads.slug, collectivite_1.id)
view = ForwardFileDeleteView()
view.request = req
view.object = None
view.kwargs = req.resolver_match.kwargs
context = view.get_context_data()
assert context['connecteur'].slug == atreal_openads.slug
del req.GET['back-to']
url = view.get_success_url()
assert url == u'/atreal-openads/%s/' % atreal_openads.slug
req.GET['back-to'] = 'list-forward-files'
url = view.get_success_url()
assert url == u'/manage/atreal-openads/%s/forward-files' % atreal_openads.slug
req.GET['back-to'] = 'col-list-forward-files'
url = view.get_success_url()
assert url == u'/manage/atreal-openads/%s/collectivite/%s/forward-files' % (
atreal_openads.slug, collectivite_1.id)
req.path = '/manage/atreal-openads/%s/collectivite/%s/forward-files' % (
atreal_openads.slug, collectivite_1.id)
req.resolver_match = resolve(req.path)
view = ForwardFileListView()
view.request = req
view.object_list = []
view.kwargs = req.resolver_match.kwargs
context = view.get_context_data()
assert context['connecteur'].slug == atreal_openads.slug
assert context['collectivite'].id == collectivite_1.id
queryset = view.get_queryset()
assert queryset.query is not None
assert queryset.query.order_by == ['id']
assert queryset.query.default_ordering
assert queryset.query.get_meta().ordering == ['-last_update_datetime']
assert queryset.ordered
req.GET['order-by'] = '-id'
queryset = view.get_queryset()
assert queryset.query is not None
assert queryset.query.order_by == ['-id']
assert queryset.query.default_ordering
req.path = '/manage/atreal-openads/%s/forward-files' % atreal_openads.slug
req.resolver_match = resolve(req.path)
del req.GET['back-to']
del req.GET['order-by']
view = ForwardFileListView()
view.request = req
view.object_list = []
view.kwargs = req.resolver_match.kwargs
context = view.get_context_data()
assert context['connecteur'].slug == atreal_openads.slug
queryset = view.get_queryset()
assert queryset.query is not None
assert queryset.query.order_by == ['id']
assert queryset.query.default_ordering
assert queryset.query.get_meta().ordering == ['-last_update_datetime']
assert queryset.ordered
# pylint: disable=too-many-statements
def test_collectivite_view(atreal_openads, collectivite_1, forwardfile_1):
"""Test for views 'Collectivite*View'."""
req = HttpRequest()
req.path = '/manage/atreal-openads/%s/collectivite/%s' % (
atreal_openads.slug, collectivite_1.id)
req.method = 'GET'
req.encoding = 'utf-8'
req.GET = QueryDict(mutable=True) # required because of encoding setter
req.POST = QueryDict(mutable=True) # required because of encoding setter
req.content_params = None
req.COOKIES = {}
req.META = {}
req._read_started = False # pylint: disable=protected-access
req.resolver_match = resolve(req.path)
view = CollectiviteView()
view.request = req
view.object = None
view.kwargs = req.resolver_match.kwargs
context = view.get_context_data()
assert context['connecteur'].slug == atreal_openads.slug
assert context['guichet_add_url'] == (
u'/manage/atreal-openads/%s/collectivite/%s/create-guichet' % (
atreal_openads.slug, collectivite_1.id))
assert context['forward_files_list_url'] == (
u'/manage/atreal-openads/%s/collectivite/%s/forward-files' % (
atreal_openads.slug, collectivite_1.id))
view = CollectiviteUpdateView()
view.request = req
view.object = None
view.kwargs = req.resolver_match.kwargs
context = view.get_context_data()
assert context['connecteur'].slug == atreal_openads.slug
url = view.get_success_url()
assert url == u'/manage/atreal-openads/%s/collectivite/%s' % (
atreal_openads.slug, collectivite_1.id)
req.GET['back-to'] = 'list-collectivites'
url = view.get_success_url()
assert url == u'/manage/atreal-openads/%s/collectivites' % atreal_openads.slug
view = CollectiviteDeleteView()
view.request = req
view.object = None
view.kwargs = req.resolver_match.kwargs
context = view.get_context_data()
assert context['connecteur'].slug == atreal_openads.slug
del req.GET['back-to']
url = view.get_success_url()
assert url == u'/atreal-openads/%s/' % atreal_openads.slug
req.GET['back-to'] = 'list-collectivites'
url = view.get_success_url()
assert url == u'/manage/atreal-openads/%s/collectivites' % atreal_openads.slug
view = CollectiviteCreateView()
req.path = '/manage/atreal-openads/%s/create-collectivite' % atreal_openads.slug
req.resolver_match = resolve(req.path)
view.request = req
view.object = None
view.kwargs = req.resolver_match.kwargs
context = view.get_context_data()
assert context['connecteur'].slug == atreal_openads.slug
kwargs = view.get_form_kwargs()
assert kwargs['connecteur'].slug == atreal_openads.slug
del req.GET['back-to']
url = view.get_success_url()
assert url == u'/atreal-openads/%s/' % atreal_openads.slug
req.GET['back-to'] = 'list-collectivites'
url = view.get_success_url()
assert url == u'/manage/atreal-openads/%s/collectivites' % atreal_openads.slug
req.path = '/manage/atreal-openads/%s/collectivites' % atreal_openads.slug
req.resolver_match = resolve(req.path)
view = CollectiviteListView()
view.request = req
view.object_list = []
view.kwargs = req.resolver_match.kwargs
context = view.get_context_data()
assert context['connecteur'].slug == atreal_openads.slug
assert context['collectivite_add_url'] == (
u'/manage/atreal-openads/%s/create-collectivite' % atreal_openads.slug)
queryset = view.get_queryset()
assert queryset.query is not None
assert queryset.query.order_by == ['id']
assert queryset.query.default_ordering
assert queryset.query.get_meta().ordering == ['name']
assert queryset.ordered
req.GET['order-by'] = '-id'
queryset = view.get_queryset()
assert queryset.query is not None
assert queryset.query.order_by == ['-id']
assert queryset.query.default_ordering
def test_guichet_view(atreal_openads, collectivite_1, collectivite_1_guichet):
"""Test for views 'Guichet*View'."""
req = HttpRequest()
req.path = '/manage/atreal-openads/%s/collectivite/%s/guichet/%s' % (
atreal_openads.slug, collectivite_1.id, collectivite_1_guichet.id)
req.method = 'GET'
req.encoding = 'utf-8'
req.GET = QueryDict(mutable=True) # required because of encoding setter
req.POST = QueryDict(mutable=True) # required because of encoding setter
req.content_params = None
req.COOKIES = {}
req.META = {}
req._read_started = False # pylint: disable=protected-access
req.resolver_match = resolve(req.path)
view = GuichetView()
view.request = req
view.object = None
view.kwargs = req.resolver_match.kwargs
context = view.get_context_data()
assert context['connecteur'].slug == atreal_openads.slug
assert context['collectivite'].id == collectivite_1.id
view = GuichetUpdateView()
view.request = req
view.object = None
view.kwargs = req.resolver_match.kwargs
context = view.get_context_data()
assert context['connecteur'].slug == atreal_openads.slug
assert context['collectivite'].id == collectivite_1.id
view = GuichetDeleteView()
view.request = req
view.object = None
view.kwargs = req.resolver_match.kwargs
context = view.get_context_data()
assert context['connecteur'].slug == atreal_openads.slug
assert context['collectivite'].id == collectivite_1.id
url = view.get_success_url()
assert url == u'/manage/atreal-openads/%s/collectivite/%s' % (
atreal_openads.slug, collectivite_1.id)
view = GuichetCreateView()
req.path = '/manage/atreal-openads/%s/collectivite/%s/create-guichet' % (
atreal_openads.slug, collectivite_1.id)
req.resolver_match = resolve(req.path)
view.request = req
view.object = None
view.kwargs = req.resolver_match.kwargs
context = view.get_context_data()
assert context['connecteur'].slug == atreal_openads.slug
assert context['collectivite'].id == collectivite_1.id
kwargs = view.get_form_kwargs()
assert kwargs['collectivite'].id == collectivite_1.id
url = view.get_success_url()
assert url == u'/manage/atreal-openads/%s/collectivite/%s' % (
atreal_openads.slug, collectivite_1.id)
def test_connecteur_view(atreal_openads):
"""Test for views 'AtrealOpenadsView'."""
req = HttpRequest()
req.path = '/atreal-openads/%s/' % atreal_openads.slug
req.method = 'GET'
req.encoding = 'utf-8'
req.GET = QueryDict(mutable=True) # required because of encoding setter
req.POST = QueryDict(mutable=True) # required because of encoding setter
req.content_params = None
req.COOKIES = {}
req.META = {}
req._read_started = False # pylint: disable=protected-access
req.resolver_match = resolve(req.path)
view = AtrealOpenadsView()
view.request = req
view.object = atreal_openads
view.kwargs = req.resolver_match.kwargs
context = view.get_context_data()
assert context['collectivite_fields'] == Collectivite.get_fields()
assert context['collectivite_add_url'] == (
u'/manage/atreal-openads/%s/create-collectivite' % atreal_openads.slug)