Migrate all swh-web unit tests from unittest to pure pytest which implies the following:
- all tests are turned from a class method to a simple function
- replace previous assertions from unittest.TestCase to simple calls to Python assert
- previous features offered by the former TestCase classes are turned into pytest fixtures
- use pytest-mock fixture instead of decorator from unittest.patch
- use requests_mock_datadir fixture from swh-core simplifying the setup of mocked HTTP requests
- expose some Django assertions to be used with pytest
- remove the `swh.web.tests.testcase` module
Some cleanups have also been performed on the tests implementation, notably:
- Better formatting of string litterals
- Removal of tests related to origin ids
**WARNING**: This diff is huge and most of its content is not really interesting to review as it
mainly consists of turning test methods to simple functions and replace `self.assert*` calls
by simple calls to Python `assert`.
I pushed it to validate the pytest fixtures use. The following ones are used in the tests:
- `client`: Django test client fixture offered by `pytest-django`
- `api_client`: Fixture to get the Django REST framework test client (defined in `conftest.py`)
- `test_archive`: Fixture to manipulate the data from the sample archive used in the tests (defined in `conftest.py`).
Previously, the features it offers were defined as methods in the former `WebTestCase` class.
- `mocker`: Fixture wrapping the patching API provided by the `unittest.mock` module
offered by `pytest-mock`
Kudos to the great [[ https://pypi.org/project/unittest2pytest/ | unittest2pytest]] package as its use was a real time saver here when migrating the tests.
After that migration, the tests running time is decreased by a factor of 5-6x (around 35s when using `unittest`, around 7s when using `pytest`).
Related to T2062