Skip to content

Commit badecf9

Browse files
Merge pull request #324 from MasoniteFramework/master
Next Minor
2 parents 1823ca2 + b1e3990 commit badecf9

File tree

5 files changed

+38
-3
lines changed

5 files changed

+38
-3
lines changed

masonite.db-journal

8.52 KB
Binary file not shown.

src/masonite/__version__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
__title__ = 'masonite'
33
__description__ = 'The core for the Masonite framework'
44
__url__ = 'https://github.com/MasoniteFramework/masonite'
5-
__version__ = '2.3.15'
5+
__version__ = '2.3.16'
66
__author__ = 'Joseph Mancuso'
77
__author_email__ = '[email protected]'
88
__licence__ = 'MIT'

src/masonite/helpers/view_helpers.py

+6-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,12 @@ def back(location=None):
2626
"""
2727
if location is None:
2828
from wsgi import container
29-
location = container.make('Request').path
29+
request = container.make('Request')
30+
intended_route = request.session.get('__intend')
31+
if intended_route:
32+
location = intended_route
33+
else:
34+
location = request.path
3035

3136
return Markup("<input type='hidden' name='__back' value='{0}'>".format(location))
3237

src/masonite/request.py

+14
Original file line numberDiff line numberDiff line change
@@ -943,13 +943,27 @@ def back(self, default=None):
943943
self.with_input()
944944

945945
redirect_url = self.input('__back')
946+
946947
if not redirect_url and default:
947948
return self.redirect(default)
948949
elif not redirect_url and not default:
949950
return self.redirect(self.path) # Some global default?
950951

951952
return self.redirect(redirect_url)
952953

954+
def then_back(self):
955+
self.session.set('__intend', self.path)
956+
return self
957+
958+
def redirect_intended(self, default=None):
959+
if self.session.get('__intend'):
960+
self.redirect(self.session.get('__intend'))
961+
self.session.delete('__intend')
962+
else:
963+
self.redirect(default)
964+
965+
return self
966+
953967
def flash_inputs_to_session(self):
954968
if not hasattr(self, 'session'):
955969
return

tests/core/test_session.py

+17-1
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,12 @@ class TestSession(TestCase):
77

88
def setUp(self):
99
super().setUp()
10-
self.container.make('Request').load_environ(generate_wsgi())
10+
self.container.make('Request').load_environ(generate_wsgi()).load_app(self.container)
1111
self.container.bind('SessionMemoryDriver', SessionMemoryDriver)
1212
self.container.bind('SessionCookieDriver', SessionCookieDriver)
1313
self.container.bind('SessionManager', SessionManager(self.container))
14+
self.container.make('Request').session = self.container.make('SessionManager').driver('cookie')
15+
self.container.bind('StatusCode', 200)
1416

1517
def test_session_request(self):
1618
for driver in ('memory', 'cookie'):
@@ -151,3 +153,17 @@ def test_can_redirect_with_bytes_inputs(self):
151153
request.with_input()
152154
self.assertFalse(session.has('byte'))
153155
self.assertTrue(session.has('key2'))
156+
157+
def test_intended_returns_correct_url(self):
158+
request = self.container.make('Request')
159+
request.redirect('/dashboard')
160+
self.assertEqual(request.redirect_url, '/dashboard')
161+
162+
request.path = '/test'
163+
164+
request.redirect('/dashboard').then_back()
165+
self.assertEqual(request.session.get('__intend'), '/test')
166+
167+
# Assert redirect intended method resets the redirection
168+
request.redirect_intended()
169+
self.assertEqual(request.session.get('__intend'), None)

0 commit comments

Comments
 (0)