Compare commits

..

2 commits

Author SHA1 Message Date
6b10ee6093 Fix missing head request support 2018-06-09 21:49:44 +02:00
ef2046b610 Add test for head requests 2018-06-09 21:49:19 +02:00
2 changed files with 14 additions and 4 deletions

View file

@ -5,10 +5,11 @@ from urllib.parse import urlparse
app = Flask(__name__) app = Flask(__name__)
# HEAD is implicit with flask
@app.route('/', methods=['GET', 'POST']) @app.route('/', methods=['GET', 'POST'])
@app.route('/<shortLink>', methods=['GET', 'POST']) @app.route('/<shortLink>', methods=['GET', 'POST'])
def short(shortLink=""): def short(shortLink=""):
if request.method == "GET": if request.method == "GET" or request.method == "HEAD":
if shortLink: if shortLink:
noauto = shortLink[-1] == "+" noauto = shortLink[-1] == "+"
if noauto: shortLink = shortLink[:-1] if noauto: shortLink = shortLink[:-1]
@ -36,11 +37,10 @@ def short(shortLink=""):
else: else:
return render_template("index.html", name=shortLink) # Landing page return render_template("index.html", name=shortLink) # Landing page
elif request.method == "POST": # Someone submitted a new link to short elif request.method == "POST": # Someone submitted a new link to short
longUrl = request.form.get("url", "") longUrl = request.form["url"] # required, accept the exception if the key does not exist
wishId = request.form.get("wishId") wishId = request.form.get("wishId")
if len(longUrl) <= 0: if len(longUrl) <= 0:
abort(400) abort(400)
databaseId = insertIdUnique(longUrl, idToCheck=wishId) databaseId = insertIdUnique(longUrl, idToCheck=wishId)
return request.url_root + databaseId # Short link in plain text return request.url_root + databaseId # Short link in plain text

View file

@ -17,6 +17,11 @@ class WebTestCase(object):
self.assertEqual(req.status_code, 200, msg="Get request unsuccessful") self.assertEqual(req.status_code, 200, msg="Get request unsuccessful")
return req return req
def assertHeadReq(self, url):
req = requests.head(url)
self.assertEqual(req.status_code, 301, msg="Head request unsuccessful")
return req
def assertGetStatusReq(self, expected_status, url, params = {}): def assertGetStatusReq(self, expected_status, url, params = {}):
req = requests.get(url, params=params, allow_redirects=False) req = requests.get(url, params=params, allow_redirects=False)
self.assertEqual(req.status_code, expected_status, msg="Returned status code does not match the expected one") self.assertEqual(req.status_code, expected_status, msg="Returned status code does not match the expected one")
@ -51,7 +56,7 @@ class SchortRegressionTests(unittest.TestCase, WebTestCase):
req = requests.post(BASE_URL + "/", data={"url": ""}) req = requests.post(BASE_URL + "/", data={"url": ""})
self.assertEqual(req.status_code, 400, msg="Could not handle a request with empty url") self.assertEqual(req.status_code, 400, msg="Could not handle a request with empty url")
req = requests.post(BASE_URL + "/", data={}) req = requests.post(BASE_URL + "/", data={})
self.assertEqual(req.status_code, 400, msg="Could not handle a request without a url at all") self.assertEqual(req.status_code, 400, msg="Could not handle a request with url at all")
class SchortShortLinkCase(object): class SchortShortLinkCase(object):
@ -77,6 +82,11 @@ class SchortShortLinkCase(object):
req = self.assertGetReq(BASE_URL + "/" + self.shortID, params = {"resolve" : ""}) req = self.assertGetReq(BASE_URL + "/" + self.shortID, params = {"resolve" : ""})
self.assertEqual(req.text, self.shortDest) self.assertEqual(req.text, self.shortDest)
def test_head_resolve(self):
"""Test resolving by using a HEAD request"""
req = self.assertHeadReq(BASE_URL + "/" + self.shortID)
self.assertEqual(req.headers.get("Location", ""), self.shortDest)
def test_HTMLresolve(self): def test_HTMLresolve(self):
"""Test HTML displaying of the shortened URL""" """Test HTML displaying of the shortened URL"""
HTML_keyword = "+" HTML_keyword = "+"