Skip to content

Commit

Permalink
Mount unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
miguelgrinberg committed Feb 3, 2025
1 parent fd7931e commit cd87abb
Show file tree
Hide file tree
Showing 2 changed files with 99 additions and 0 deletions.
3 changes: 3 additions & 0 deletions src/microdot/microdot.py
Original file line number Diff line number Diff line change
Expand Up @@ -898,6 +898,9 @@ def _int_segment(self, value):
except ValueError:
return None, None

def __repr__(self): # pragma: no cover
return 'URLPattern: {}'.format(self.url_pattern)


class HTTPException(Exception):
def __init__(self, status_code, reason=None):
Expand Down
96 changes: 96 additions & 0 deletions tests/test_microdot.py
Original file line number Diff line number Diff line change
Expand Up @@ -915,3 +915,99 @@ def after(req, res):
res = self._run(client.get('/sub/baz'))
self.assertEqual(res.status_code, 405)
self.assertEqual(res.text, '405')

def test_many_mounts(self):
subsubapp = Microdot()

@subsubapp.before_request
def subsubapp_before(req):
req.g.before = 'subsubapp'

@subsubapp.route('/')
def subsubapp_index(req):
return f'{req.g.before}:{req.subapp == subsubapp}:{req.url_prefix}'

subapp = Microdot()

@subapp.before_request
def subapp_before(req):
req.g.before = 'subapp'

@subapp.route('/')
def subapp_index(req):
return f'{req.g.before}:{req.subapp == subapp}:{req.url_prefix}'

app = Microdot()

@app.before_request
def app_before(req):
req.g.before = 'app'

@app.route('/')
def app_index(req):
return f'{req.g.before}:{req.subapp is None}:{req.url_prefix}'

subapp.mount(subsubapp, url_prefix='/subsub')
app.mount(subapp, url_prefix='/sub')

client = TestClient(app)

res = self._run(client.get('/sub/subsub/'))
self.assertEqual(res.status_code, 200)
self.assertEqual(res.text, 'subsubapp:True:/sub/subsub')

res = self._run(client.get('/sub/'))
self.assertEqual(res.status_code, 200)
self.assertEqual(res.text, 'subsubapp:True:/sub')

res = self._run(client.get('/'))
self.assertEqual(res.status_code, 200)
self.assertEqual(res.text, 'subsubapp:True:')

def test_many_local_mounts(self):
subsubapp = Microdot()

@subsubapp.before_request
def subsubapp_before(req):
req.g.before = 'subsubapp'

@subsubapp.route('/')
def subsubapp_index(req):
return f'{req.g.before}:{req.subapp == subsubapp}:{req.url_prefix}'

subapp = Microdot()

@subapp.before_request
def subapp_before(req):
req.g.before = 'subapp'

@subapp.route('/')
def subapp_index(req):
return f'{req.g.before}:{req.subapp == subapp}:{req.url_prefix}'

app = Microdot()

@app.before_request
def app_before(req):
req.g.before = 'app'

@app.route('/')
def app_index(req):
return f'{req.g.before}:{req.subapp is None}:{req.url_prefix}'

subapp.mount(subsubapp, url_prefix='/subsub', local=True)
app.mount(subapp, url_prefix='/sub', local=True)

client = TestClient(app)

res = self._run(client.get('/sub/subsub/'))
self.assertEqual(res.status_code, 200)
self.assertEqual(res.text, 'subsubapp:True:/sub/subsub')

res = self._run(client.get('/sub/'))
self.assertEqual(res.status_code, 200)
self.assertEqual(res.text, 'subapp:True:/sub')

res = self._run(client.get('/'))
self.assertEqual(res.status_code, 200)
self.assertEqual(res.text, 'app:True:')

0 comments on commit cd87abb

Please sign in to comment.