Developer Notes¶
Testing¶
A high code coverage percentage has been maintained with unit and integration tests for all code using a package called Coverage (https://coverage.readthedocs.io/en/v4.5.x/) to track code coverage.
To run unit tests without using Coverage:
$ python manage.py test
To run unit tests using Coverage with comprehensive code coverage report generated into an HTML file:
coverage run manage.py test && coverage combine && coverage html
Note
This command will generate a directory that is ignored by Git via our .gitignore file. To see the code coverage open the file /coverage_html/index.html in a browser.
Note
Coverage options are specified in a configuration file called .coveragerc. This is where you would add files/directories you want to omit from the Coverage report.
Note
‘coverage combine’ will take the coverage files created for multiprocesses (located in the base directory) and will combine them with the main coverage files . If a test using multiprocessing fails these coverage files will remain and must be deleted manually.
We also tried to split unit and integration tests up between core PresQT code and Target code. Tests
that cover core code reside in presqt/api_v1/tests/
while target tests that cover target functions
reside in presqt/targets/{target_name}/tests/
.
Attention
All tests require their corresponding target tokens to be stored as environment variables since these tokens can not be stored publicly. Contact an administrator for access to these.
Docker Commands¶
To rebuild the docker container after a new package has been added to the requirements files:
$ docker-compose up --build
Run the following command for an interactive -i terminal -t for this container:
$ docker exec -i -t presqt_presqt_django_1 /bin/ash
Updating Documentation¶
As the project grows we encourage developers to add documentation. PresQT documentation is built using Sphinx and ReadtheDocs.
When documentation is added you should just need to run while in the /docs
directory:
$ make clean
$ make html
Otherwise reference Sphinx documentation for more information on adding documentation, https://www.sphinx-doc.org/en/master/usage/quickstart.html.
GitHub Differences¶
There is a slight difference in how we have implemented GitHub as opposed to other partners. Due to the way GitHub’s API handles files, there is no way for us to hit an endpoint with a given id. The only way to navigate to a files endpoint is to know the associated GitHub username and repository title. We have decided to make our own unique id’s for these items by combining the repo_id and the path to the file/dir.
Example of an id:
21387123:path2%Fto%2Ffile%2Ejpg
We then translate this into two get requests. The first one will be to the repo id.
Example:
https://api.github.com/repositories/21387123
From this, we can get a contents url that we can translate into a request.
Example:
https://api.github.com/repos/PresQT-QA-TEST/Good_Egg-PresQT2-/contents/path/to/file.jpg
Using this custom generated id, we can hit this endpoint on PresQT to get file details.
https://presqt-qa.crc.nd.edu/api_v1/targets/github/resources/21387123:path%252Fto%252Ffile%252Ejpg