2021-11-05 12:53:36 +00:00
Test effettuati
===============
2021-11-05 16:55:15 +00:00
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