def test_mine_block(client): client.get('get_chain') client.get('mine_block') response = client.get('get_chain') data = json.loads(response.get_data(as_text=True)) chain = data['chain'] length = data['length'] assert response.status_code == 200 assert len(chain) == length assert chain[1]['index'] == 1 assert type(chain[1]['nonce']) == int assert chain[1]['prev_hash'] == chain[0]['hash'] assert chain[1]['transactions'] == []
def test_logged_user_can_access_logout(user, client, configed_app, login): with configed_app.test_request_context(): response = client.get("/logout", follow_redirects=False) assert ( response.status_code == 302 ), f"Logged user does not have access logout. Status code: {response.status_code}"
def test_get_unverified(client): response = client.get('/get_unverified_transactions') assert response.status_code == 200 data = json.loads(response.get_data(as_text=True)) assert data['Transactions'] == []
def test_logged_user_can_access_post_new(client, configed_app, login): with configed_app.test_request_context(): response = client.get("/post/new", follow_redirects=False) assert ( response.status_code == 200 ), f"Logged user does not have access create new post. Status code: {response.status_code}"
def test_logged_user_can_access_user_posts(client, configed_app, login): with configed_app.test_request_context(): response = client.get("/user/test1", follow_redirects=False) assert ( response.status_code == 200 ), f"Logged user does not have access user's posts. Status code: {response.status_code}"
def test_logout_user_can_not_access_post_new(client, configed_app, post): with configed_app.test_request_context(): response = client.get("/post/new", follow_redirects=False) assert ( response.status_code == 403 ), f"Logged out user have access to new post. Status code: {response.status_code}"
def test_logout_user_can_access_about(client, configed_app, post): with configed_app.test_request_context(): response = client.get("/about", follow_redirects=False) assert ( response.status_code == 200 ), f"Logged out user does not have access to about page. Status code: {response.status_code}"
def test_logged_user_can_access_home_page(client, configed_app, login): with configed_app.test_request_context(): response = client.get("/home", follow_redirects=False) assert ( response.status_code == 200 ), f"Logged user does not have access home page. Status code: {response.status_code}"
def test_logout_user_can_access_post_id(client, configed_app, post): with configed_app.test_request_context(): id = str(post.getId()) response = client.get("/post/" + id, follow_redirects=False) assert ( response.status_code == 200 ), f"Logged out user does not have access to post id. Status code: {response.status_code}"
def test_notifications_retrieval_range(client): user_id = random.randint(0, 999999) req = random_notification_insert_values(20, user_id) notifications.insert(req) res = client.get('/notifications/' + str(user_id) + '?range=10_20') assert res.status_code == 200 assert len(res.json["notifications"]) == 10
def test_default(api, client): response_text = "Hello from local host" @api.route("/") def default(request, response): response.text = response_text assert client.get("http://testserver/").text == response_text
def test_delete_song(client): song = new_song_from_api(client) res = client.delete('/songs/' + str(song.id)) assert res.status_code == 204 res = client.get('/songs/' + str(song.id)) assert res.status_code == 404
def test_logged_user_can_access_post_update(user, client, configed_app, login, post): with configed_app.test_request_context(): id = str(post.getId()) response = client.get("/post/" + id + "/update", follow_redirects=False) assert ( response.status_code == 200 ), f"Logged user does not have access update. Status code: {response.status_code}"
def test_logout_user_can_not_access_post_delete(client, configed_app, post): with configed_app.test_request_context(): id = str(post.getId()) response = client.get("/post/" + id + "/delete", follow_redirects=False) assert ( response.status_code == 403 ), f"Logged out user have access to delete post. Status code: {response.status_code}"
def test_notifications_retrieval_no_range(client): user_id = random.randint(0, 999999) req = random_notification_insert_values(40, user_id) notifications.insert(req) res = client.get('/notifications/' + str(user_id)) assert res.status_code == 200 assert len(res.json["notifications"]) == 20 assert res.headers['Content-Range'] == '0-20/40'
def test_home(api, client): response_text = "Django like way to add routes" def home(request, response): response.text = response_text api.add_route("/home", home) assert client.get("http://testserver/home").text == response_text
def test_notifications_retrieval_range_limited(client): user_id = random.randint(0, 999999) req = random_notification_insert_values(15, user_id) notifications.insert(req) res = client.get('/notifications/' + str(user_id) + '?range=10_20') assert res.status_code == 200 assert len(res.json["notifications"]) == 5 assert res.headers['Content-Range'] == '10-15/15'
def test_add_transaction(client, transactions): response = client.post('add_transaction', json=transactions) assert response.status_code == 201 response = client.get('/get_unverified_transactions') assert response.status_code == 200 data = json.loads(response.get_data(as_text=True)) assert data['Transactions'][0] == transactions['transaction']
def test_custom_exception_handler(api, client): def on_exception(request, response, exception): response.text = "AttributeErrorOccured" api.add_exception_handler(on_exception) @api.route("/") def index(request, response): raise AttributeError() response = client.get("http://testserver/") assert response.text == "AttributeErrorOccured"
def test_get_chain(client): response = client.get('/get_chain') data = json.loads(response.get_data(as_text=True)) chain = data['chain'] length = data['length'] assert response.status_code == 200 assert len(chain) == length assert chain[0]['index'] == 0 assert chain[0]['nonce'] == 0 assert chain[0]['prev_hash'] == '0' assert chain[0]['transactions'] == []
def test_template(api, client): @api.route("/html") def html_handler(request, response): response.body = api.get_template("index.html", context={ "title": "Some Title", "name": "Some Name" }).encode() response = client.get("http://testserver/html") assert "text/html" in response.headers["Content-Type"] assert "Some Title" in response.text assert "Some Name" in response.text
def test_notifications_retrieval_daterange(client): user_id = random.randint(0, 999999) req = random_notification_insert_values(30, user_id) notifications.insert(req) dt = datetime.now() dt1 = dt.replace(year=dt.year + 1).date() dt2 = dt.replace(year=dt.year - 1).date() date_range = dt2.isoformat() + '_' + dt1.isoformat() res = client.get('/notifications/' + str(user_id) + '?date-range=' + date_range) assert res.status_code == 200 assert len(res.json["notifications"]) == 30 assert res.headers['Content-Range'] == '*/30'
def test_with_invalid_times(client, numeric_time): result = client.get("{}?numeric_time={}".format(api_path, numeric_time)) body = result.json assert result.status_code == 400 assert body["errorMessage"] is not None
def test_404_returned_for_nonexistent_static_file(client): assert client.get(f"http://testserver/main.css").status_code == 404
def test_default_404_response(client): response = client.get("http://testserver/doesnotexist") assert response.status_code == 404 assert response.text == "Not found."
def test_with_different_time_formats(client, numeric_time): result = client.get("{}?numeric_time={}".format(api_path, numeric_time)) body = result.json assert result.status_code == 200 assert body["humanTime"] == "One o'clock"
def test_with_different_times(client, numeric_time, expected_result): result = client.get("{}?numeric_time={}".format(api_path, numeric_time)) body = result.json assert result.status_code == 200 assert body["humanTime"] == expected_result
def test_with_no_time(client): with freeze_time("2020-08-26 15:00:00.000000"): result = client.get(api_path) body = result.json assert result.status_code == 200 assert body["humanTime"] == "Three o'clock"
def test_get_song(client): song = new_song_from_api(client) res = client.get('/songs/' + str(song.id)) assert res.status_code == 200 assert res.json["id"] == song.id
def test_get_song_none(client): res = client.get('/songs/' + str(0)) assert res.status_code == 404