1
Fork 0
mirror of https://github.com/Steffo99/sophon.git synced 2024-12-22 14:54:22 +00:00
sophon/report/source/3_dev/4_tests/index.rst

130 lines
5.1 KiB
ReStructuredText

Test effettuati
===============
Per motivi di tempo necessario, sono state selezionate solo alcune parti di codice su cui effettuare test.
Tutti i viewset di :py:mod:`sophon.core`
----------------------------------------
.. default-domain:: py
.. default-role:: py:obj
.. module:: sophon.core.tests
Test case generici
^^^^^^^^^^^^^^^^^^
Vengono definiti alcuni test case generici per facilitare le interazioni tra ``APITestCase`` e viewset.
.. note::
I nomi delle funzioni usano nomi con capitalizzazione inconsistente in quanto lo stesso modulo `unittest` non rispetta lo stile suggerito in :pep:`8`.
.. class:: BetterAPITestCase(APITestCase)
.. method:: as_user(self, username: str, password: str = None) -> typing.ContextManager[None]
Context manager che permette di effettuare richieste all'API come uno specifico utente, effettuando il logout quando sono state effettuate le richieste necessarie.
.. method:: assertData(self, data: ReturnDict, expected: dict)
Asserzione che permette di verificare che l'oggetto restituito da una richiesta all'API contenga almeno le chiavi e i valori contenuti nel dizionario ``expected``.
.. class:: ReadSophonTestCase(BetterAPITestCase, metaclass=abc.ABCMeta)
Classe **astratta** che implementa metodi per testare rapidamente le azioni di un `.views.ReadSophonViewSet`.
.. classmethod:: get_basename(cls) -> str
Metodo **astratto** che deve restituire il basename del viewset da testare.
.. classmethod:: get_url(cls, kind: str, *args, **kwargs) -> str
Metodo utilizzato dal test case per trovare gli URL ai quali possono essere effettuate le varie azioni.
I seguenti metodi permettono di effettuare azioni sul viewset:
.. method:: list(self) -> rest_framework.response.Response
.. method:: retrieve(self, pk) -> rest_framework.response.Response
.. method:: custom_list(self, method: str, action: str, data: dict = None) -> rest_framework.response.Response
.. method:: custom_detail(self, method: str, action: str, pk, data: dict = None) -> rest_framework.response.Response
I seguenti metodi asseriscono che una determinata azione con determinati parametri risponderà con il codice di stato ``code``, e restituiscono i dati contenuti nella risposta se l'azione è riuscita (``200 <= code < 300``)
.. method:: assertActionList(self, code: int = 200) -> typing.Optional[ReturnDict]
.. method:: assertActionRetrieve(self, pk, code: int = 200) -> typing.Optional[ReturnDict]
.. method:: assertActionCustomList(self, method: str, action: str, data: dict = None, code: int = 200) -> typing.Optional[ReturnDict]
.. method:: assertActionCustomDetail(self, method: str, action: str, pk, data: dict = None, code: int = 200) -> typing.Optional[ReturnDict]
.. class:: WriteSophonTestCase(ReadSophonTestCase, metaclass=abc.ABCMeta)
Classe **astratta** che estende `.ReadSophonTestCase` con le azioni di un `.views.WriteSophonViewSet`.
.. method:: create(self, data) -> rest_framework.response.Response
.. method:: update(self, pk, data) -> rest_framework.response.Response
.. method:: destroy(self, pk) -> rest_framework.response.Response
.. method:: assertActionCreate(self, data, code: int = 201) -> typing.Optional[ReturnDict]
.. method:: assertActionUpdate(self, pk, data, code: int = 200) -> typing.Optional[ReturnDict]
.. method:: assertActionDestroy(self, pk, code: int = 200) -> typing.Optional[ReturnDict]
Test case concreti
^^^^^^^^^^^^^^^^^^
Vengono testate tutte le view dell'app tramite `.BetterAPITestCase` e tutti i viewset dell'app tramite `.ReadSophonTestCase` e `WriteSophonTestCase`.
.. class:: UsersByIdTestCase(ReadSophonTestCase)
.. class:: UsersByUsernameTestCase(ReadSophonTestCase)
.. class:: ResearchGroupTestCase(WriteSophonTestCase)
.. class:: SophonInstanceDetailsTestCase(BetterAPITestCase)
Alcune interazioni di `sophon.notebooks`
----------------------------------------
.. default-domain:: py
.. default-role:: py:obj
.. module:: sophon.notebooks.tests
Vengono definiti alcuni test case per alcune interazioni dell'app `sophon.notebooks`.
.. class:: JupyterTestCase(TestCase)
Test case che testa la generazione dei token per Jupyter.
.. class:: ApacheTestCase(TestCase)
Test case che testa la conversione in `bytes` per la rubrica `dbm` del :ref:`modulo proxy`.
Alcune interazioni complicate del frontend
------------------------------------------
.. default-domain:: js
.. default-role:: js:class
Vengono infine definiti test case per alcune interazioni ritenute particolarmente complesse del frontend.
Encoding dell'URL dell'istanza nell'URL della pagina
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- encodes pathless URL
- encodes URL with port number
- encodes URL with simple path
- encodes URL with colon in path
- does not encode URL with ``%3A`` in path
- decodes pathless URL
- decodes URL with port number
- decodes URL with simple path
- decodes URL with colon in path
Parsing dei segmenti del path
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- parses empty path
- parses instance path
- parses research group path
- parses research project path
- parses notebook path