Skip to content

Commit fa696cf

Browse files
committed
fix(login): avoid broken default workspace redirect for time tracking
1 parent 2cce6d0 commit fa696cf

2 files changed

Lines changed: 61 additions & 3 deletions

File tree

time_tracking/test_utils.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
from unittest.mock import patch
2+
3+
import frappe
4+
from frappe.tests.utils import FrappeTestCase
5+
6+
from time_tracking.utils import DEFAULT_WORKSPACE_ROUTE, ensure_default_workspace
7+
8+
9+
class TestLoginWorkspaceRedirect(FrappeTestCase):
10+
def tearDown(self):
11+
if hasattr(frappe.local.flags, "home_page"):
12+
del frappe.local.flags.home_page
13+
super().tearDown()
14+
15+
def test_sets_home_page_for_users_without_explicit_workspace(self):
16+
with (
17+
patch.object(frappe.session, "user", "test@example.com"),
18+
patch.object(
19+
frappe.db,
20+
"get_value",
21+
side_effect=["System User", None],
22+
),
23+
patch.object(frappe.db, "exists", return_value=True),
24+
):
25+
ensure_default_workspace()
26+
27+
self.assertEqual(frappe.local.flags.home_page, DEFAULT_WORKSPACE_ROUTE)
28+
29+
def test_sets_home_page_for_existing_time_tracking_default_workspace(self):
30+
with (
31+
patch.object(frappe.session, "user", "test@example.com"),
32+
patch.object(
33+
frappe.db,
34+
"get_value",
35+
side_effect=["System User", "Time Tracking"],
36+
),
37+
patch.object(frappe.db, "exists", return_value=True),
38+
):
39+
ensure_default_workspace()
40+
41+
self.assertEqual(frappe.local.flags.home_page, DEFAULT_WORKSPACE_ROUTE)
42+
43+
def test_keeps_other_explicit_default_workspace(self):
44+
with (
45+
patch.object(frappe.session, "user", "test@example.com"),
46+
patch.object(
47+
frappe.db,
48+
"get_value",
49+
side_effect=["System User", "Accounts"],
50+
),
51+
patch.object(frappe.db, "exists", return_value=True),
52+
):
53+
ensure_default_workspace()
54+
55+
self.assertFalse(hasattr(frappe.local.flags, "home_page"))

time_tracking/utils.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import frappe
22

33
DEFAULT_WORKSPACE = "Time Tracking"
4+
DEFAULT_WORKSPACE_ROUTE = "/desk/time-tracking"
45

56

67
def ensure_default_workspace(login_manager=None):
@@ -12,10 +13,12 @@ def ensure_default_workspace(login_manager=None):
1213
if user_type != "System User":
1314
return
1415

15-
if frappe.db.get_value("User", user, "default_workspace"):
16+
if not frappe.db.exists("Workspace", DEFAULT_WORKSPACE):
1617
return
1718

18-
if not frappe.db.exists("Workspace", DEFAULT_WORKSPACE):
19+
default_workspace = frappe.db.get_value("User", user, "default_workspace")
20+
if default_workspace and default_workspace != DEFAULT_WORKSPACE:
1921
return
2022

21-
frappe.db.set_value("User", user, "default_workspace", DEFAULT_WORKSPACE)
23+
# Work around Frappe's login redirect using `workspace.lower()` instead of a slug.
24+
frappe.local.flags.home_page = DEFAULT_WORKSPACE_ROUTE

0 commit comments

Comments
 (0)