App which allows to create and store users
Requirements:
docker -v
Docker version 18.06.1-ce, build e68fc7a
docker-compose -v
docker-compose version 1.22.0, build f46880f
Run the app:
docker-compose up --build -d
Terminate the app:
docker-compose down
Requirements:
python --version
Python 3.7.0
pip --version
pip 18.0
postgres --version
postgres (PostgreSQL) 10.3
You have to have a configured pg database. Default credentials postgresql://mapillary:mapillary@localhost:5432/mapillary.
You can change the db settings by editing DevelopmentConfig.SQLALCHEMY_DATABASE_URI in config.py
Install required packages:
pip install --no-cache-dir -r requirements.txt
Run db migrations:
flask db upgrade
Run the app:
python app.py
http://localhost:5000/
appfolder contains forms, models, routes and templatesmigrationsfolder contains migration scripts to set up databasetestfolder contains:apifolder with API testswebfolder with web testspagesfolder with web pages locators and methods
common.pycontains common API methods which are useful for testsconfig.pyconfig for testsconftest.pycontains common pytest fixturesdata.pycontains data which is common for tests
app.pyinit script for the appconfig.pycontains configurations for docker and development environments
curl -X GET http://localhost:5000/api/v1/users
{
"users": [
{
"address": "NY",
"birthdate": "2018-09-23",
"email": "tom@example.com",
"username": "Tom Smith"
}
]
}
curl -X POST http://localhost:5000/api/v1/users -d '{"address": "NY", "birthdate": "2018-09-23", "email": "ts@example.com", "username": "Tom Smith"}' -H "Content-type: application/json"
{
"user": {
"address": "NY",
"birthdate": "2018-09-23",
"email": "ts@example.com",
"username": "Tom Smith"
}
}
Fields validation example:
curl -X POST http://localhost:5000/api/v1/users -d '{"address": "NY", "birthdate": "2018-09-23", "email": "ts@example.com", "username": "Tom Smith"}' -H "Content-type: application/json"
{
"error": "Email is already in use"
}
curl -X POST http://localhost:5000/api/v1/automation/clean_up_users
{
"success": true
}
http://localhost:5000/
http://localhost:5000/create_user
pip install --no-cache-dir -r test_requirements.txt
chromedriver -v
ChromeDriver 2.42.591059 (a3d9684d10d61aa0c45f6723b327283be1ebaad8)
pytest -v
test/api/test_create_user.py::TestCreateUser::test_create_user[simple_user-user0] PASSED [ 3%]
test/api/test_create_user.py::TestCreateUser::test_create_user[cyrillic_user-user1] PASSED [ 6%]
test/api/test_create_user.py::TestCreateUser::test_create_user[chinese_user-user2] PASSED [ 10%]
test/api/test_create_user.py::TestCreateUser::test_create_user[max_length_user-user3] PASSED [ 13%]
test/api/test_create_user.py::TestCreateUser::test_user_is_invalid[username_is_empty_str-user_params0-Username is required] PASSED [ 16%]
test/api/test_create_user.py::TestCreateUser::test_user_is_invalid[email_is_empty_str-user_params1-Email is required] PASSED [ 20%]
test/api/test_create_user.py::TestCreateUser::test_user_is_invalid[birthdate_is_empty_str-user_params2-Birthdate is required] PASSED [ 23%]
test/api/test_create_user.py::TestCreateUser::test_user_is_invalid[address_is_empty_str-user_params3-Address is required] PASSED [ 26%]
test/api/test_create_user.py::TestCreateUser::test_user_is_invalid[username_is_empty_str-user_params4-Username is required] PASSED [ 30%]
test/api/test_create_user.py::TestCreateUser::test_user_is_invalid[email_is_empty_str-user_params5-Email is required] PASSED [ 33%]
test/api/test_create_user.py::TestCreateUser::test_user_is_invalid[birthdate_is_empty_str-user_params6-Birthdate is required] PASSED [ 36%]
test/api/test_create_user.py::TestCreateUser::test_user_is_invalid[address_is_empty_str-user_params7-Address is required] PASSED [ 40%]
test/api/test_create_user.py::TestCreateUser::test_user_is_invalid[username_is_too_long-user_params8-Username is too long] PASSED [ 43%]
test/api/test_create_user.py::TestCreateUser::test_user_is_invalid[email_is_too_long-user_params9-Email is too long] PASSED [ 46%]
test/api/test_create_user.py::TestCreateUser::test_user_is_invalid[birtdate_is_too_long-user_params10-Birthdate is too long] PASSED [ 50%]
test/api/test_create_user.py::TestCreateUser::test_user_is_invalid[address_is_too_long-user_params11-Address is too long] PASSED [ 53%]
test/api/test_create_user.py::TestCreateUser::test_user_is_invalid[email_is_invalid_1-user_params12-Email format is invalid] PASSED [ 56%]
test/api/test_create_user.py::TestCreateUser::test_user_is_invalid[email_is_invalid_2-user_params13-Email format is invalid] PASSED [ 60%]
test/api/test_create_user.py::TestCreateUser::test_user_is_invalid[email_is_invalid_3-user_params14-Email format is invalid] PASSED [ 63%]
test/api/test_create_user.py::TestCreateUser::test_user_is_invalid[birthdate_is_invalid_1-user_params15-Incorrect birthdate format, use YYYY-MM-DD] PASSED [ 66%]
test/api/test_create_user.py::TestCreateUser::test_user_is_invalid[birthdate_is_invalid_2-user_params16-Incorrect birthdate format, use YYYY-MM-DD] PASSED [ 70%]
test/api/test_create_user.py::TestCreateUser::test_email_already_exists PASSED [ 73%]
test/api/test_get_users.py::TestGetUsers::test_get_users[no_user-create_users0] PASSED [ 76%]
test/api/test_get_users.py::TestGetUsers::test_get_users[simple_user-create_users1] PASSED [ 80%]
test/api/test_get_users.py::TestGetUsers::test_get_users[cyrillic_user-create_users2] PASSED [ 83%]
test/api/test_get_users.py::TestGetUsers::test_get_users[chinese_user-create_users3] PASSED [ 86%]
test/api/test_get_users.py::TestGetUsers::test_get_users[max_length_user-create_users4] PASSED [ 90%]
test/api/test_get_users.py::TestGetUsers::test_get_users[multiple_users-create_users5] PASSED [ 93%]
test/web/test_create_user.py::TestUsersList::test_user_list PASSED [ 96%]
test/web/test_users_list.py::TestUsersList::test_user_list PASSED
Default host is http://localhost:5000. In order to change the default host you can set TEST_HOST env variable.