#!/usr/bin/env python3
import requests
import json

HOST = "http://localhost:5000"

# Get root
assert 200 == requests.get(HOST + "/").status_code

# Get list of medals as a json object
get_root = requests.get(HOST + "/medal").text

# If the list is currently empty, it cannot interpreted a JSON
if get_root != "[]\n":
    assert json.loads(get_root)

# Post on '/medal' With no data
assert 400 == requests.post(HOST + "/medal").status_code

# Post on '/medal' with uncorrect body
assert 400 == requests.post(
    HOST + "/medal", json={"should": "fail"}).status_code

# Post on '/medal' with uncorrect value of rank

assert 400 == requests.post(
    HOST + "/medal", json={"rank": "fake", "athleteID": 15}).status_code

# Post on '/medal' with correct body
post_request = requests.post(
    HOST + "/medal", json={"rank": "gold", "athleteID": 15})
assert 200 == post_request.status_code
id = json.loads(post_request.text)['id']

# Get newly created object
expected_result = f"""{{
  "athleteID": 15,
  "id": {id},
  "rank": "gold"
}}
"""
assert expected_result == requests.get(HOST + f"/medal/{id}").text

assert 400 == requests.patch(
    HOST + f"/medal/{id}", json={"should": "fail"}).status_code

# Test to patch with incorrect value for rank
assert 400 == requests.patch(
    HOST + f"/medal/{id}", json={"rank": "fkae"}).status_code

# Test to patch object with correct data
assert 200 == requests.patch(
    HOST + f"/medal/{id}", json={"rank": "silver"}).status_code

expected_result = f"""{{
  "athleteID": 15,
  "id": {id},
  "rank": "silver"
}}
"""
assert expected_result == requests.get(HOST + f"/medal/{id}").text

# test delete methode on the newly created medal

assert 200 == requests.delete(HOST + f"/medal/{id}").status_code

# verify that the object don't exist anymore
assert 404 == requests.get(HOST + f"/medal/{id}").status_code