This is an app to match ping-pong players with each other. It's currently an
API only, so you have to use curl to interact with it.
It has an acceptance test suite you might like to look at.
Note: We highly recommend that you use the latest versions of any software required by this sample application.
Running on Pivotal Web Services
Log in.
cf login -a https://api.run.pivotal.ioTarget your org / space. An empty space is recommended, to avoid naming collisions.
cf target -o myorg -s myspaceSign up for a cleardb instance.
cf create-service cleardb spark mysqlPush the app. Its manifest assumes you called your ClearDB instance 'mysql'.
cf push -n mysubdomainExport the test host
export HOST=http://mysubdomain.cfapps.ioNow follow the interaction instructions.
NB: By default, the app runs with an insecure, shared SECRET_KEY. If you care about security in your app, you should set this in an environment variable:
cf set-env djangopong SECRET_KEY thesecretkeythatonlyyouknow
cf restage djangopongThe following assumes you have a working, 3.4.x version of Python installed. You'll also need pip, the Python dependency manager. If you installed Python using Homebrew on OSX, you're already set. On Ubuntu, the package you want is 'python3-pip'.
Install and start MySQL:
brew install mysql
mysql.server start
mysql -u rootCreate a database user and table in the MySQL REPL you just opened:
CREATE USER 'djangopong'@'localhost' IDENTIFIED BY 'djangopong';
CREATE DATABASE pong_matcher_django_development;
GRANT ALL ON pong_matcher_django_development.* TO 'djangopong'@'localhost';
exitInstall virtualenv:
pip3 install virtualenvCreate and activate a new Python environment:
virtualenv env
source env/bin/activateInstall the project's dependencies:
pip install -r requirements.txt --allow-external mysql-connector-pythonMigrate the database:
./manage.py migrateStart the application server:
./manage.py runserverExport the test host in another shell, ready to run the interactions.
export HOST=http://localhost:8000Now follow the interaction instructions.
NB: you can also use Foreman to run the migrations and start the app server
with foreman start. However, Foreman defaults to a different port (5000), so
be sure to export the test host with port 5000 instead of 8000.
Start by clearing the database from any previous tests. You should get a 200.
curl -v -X DELETE $HOST/allThen request a match, providing both a request ID and player ID. Again, you should get a 200.
curl -v -H "Content-Type: application/json" -X PUT $HOST/match_requests/firstrequest -d '{"player": "andrew"}'Now pretend to be someone else requesting a match:
curl -v -H "Content-Type: application/json" -X PUT $HOST/match_requests/secondrequest -d '{"player": "navratilova"}'Let's check on the status of our first match request:
curl -v -X GET $HOST/match_requests/firstrequestThe bottom of the output should show you the match_id. You'll need this in the next step.
Now pretend that you've got back to your desk and need to enter the result:
curl -v -H "Content-Type: application/json" -X POST $HOST/results -d '
{
"match_id":"thematchidyoureceived",
"winner":"andrew",
"loser":"navratilova"
}'You should get a 201 Created response.
Future requests with different player IDs should not cause a match with someone who has already played. The program is not yet useful enough to allow pairs who've already played to play again.