mirror of
https://github.com/Steffo99/sophon.git
synced 2024-12-23 15:24:21 +00:00
130 lines
5.1 KiB
ReStructuredText
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
|