The Sheriff Usage¶
Runtime Requirements¶
To run and validate the application locally, the following tools are required:
The project includes a Makefile with the following targets:
run: cleans previously built images and runs the stack, the application and the DB.
lint: runs pycodestyle over the thesheriff and tests directories, and reports any linting problems on the code.
tests: runs pytest and reports the results of the unit tests.
docs
Validating use cases¶
To run a complete validation of all the working use cases, a validate.sh script has been included in the root of the project, it creates the required objects and show the results, to run the automated validation please do as follows:
$ bash validate.sh
The output informs at any point of the actions being taken and prints the results.
For manually running the validation, here are the steps to take:
Start the stack
$ make run
Create an Outlaw
$ curl localhost:5000/api/v1/outlaw -X POST \ --data @examples/json/create_outlaw_1.json \ -H 'Content-Type: application/json' {"message":"Outlaw created successfully","outlaw":{"email":"reallybad@yopmail.com","id":1,"name":"The bad one"}}
Create a Gang
$ curl localhost:5000/api/v1/gang -X POST \ --data @examples/json/create_gang.json \ -H 'Content-Type: application/json' {"gang":{"id":1,"name":"The best gang","owner_id":"1"},"message":"Gang successfully created"}
Create a Raid
$ curl http://localhost:5000/api/v1/raid -X POST \ -H 'Content-Type: application/json' \ --data @examples/json/create_raid.json {"message":"Raid created successfully","raid":{"id":1,"name":"Raid 1"}}
Rate a Raid
$ curl localhost:5000/api/v1/raid/1/rate -X PUT \ --data @examples/json/rate_raid.json \ -H 'Content-Type: application/json' {"message":"Raid rated successfully"}
End a Raid
$ curl localhost:5000/api/v1/raid/1/end \ -X PUT -H 'Content-Type: application/json' {"message":"raid finished successfully","score":"Gang's score: 0.0. Sheriff's score on raid 'Raid 1': 6.625"}
List all Gangs
$ curl localhost:5000/api/v1/gang {"gangs":[{"id":1,"name":"The best gang"}],"message":"Success"}
List Outlaw Gangs
$ curl localhost:5000/api/v1/outlaw/1/gangs {"gangs":[],"message":"Success"}
Invite a Friend
$ curl localhost:5000/api/v1/outlaw/1/invite_friend \ -X POST --data @examples/json/invite_friend.json \ -H 'Content-Type: application/json' {"message":"Invitation sent successfully"}
Tests¶
This section is strongly related to the previous one. To validate the use cases, there have been developed a set of unit tests. These tests can be found in tests folder, in the root.
The available tests are:
Create gang test
Create outlaw test
Create raid test
End raid test
List gangs test (from gang)
Grade raid test
Invite friends test
Join gang test
List friends test
List gangs test (from outlaw)
Rate raid test
These tests use the next mocked objects (depending on the use case):
Mock gang repository
Mock mail notifier
Mock outlaw repository
Mock raid repository
In general, these unit tests trigger a specific use case, injecting to it a mock repository or notifier, and passing it specific information through a request object. These mock repositories are necessary to hard-code information that should be received through these interfaces. This information is needed to fulfill the intended functionality or to conclude that the software is working properly. Finally, depending of which value is returned after executing the use case, the test pass or not.
Development Requirements¶
To hack on the application, besides the tools on listed on runtime section above, the following ones are required: