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 username path - parses userid path - parses research group path - parses research project path - parses research project path