Skip to content

Commit e2d3ac8

Browse files
committed
Refactor SessionUtil to use new method and add test coverage
1 parent 1b440b9 commit e2d3ac8

File tree

2 files changed

+84
-8
lines changed

2 files changed

+84
-8
lines changed

lib/shopify_api/utils/session_utils.rb

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,7 @@ def current_session_id(auth_header, cookies, online)
2525
raise Errors::MissingJwtTokenError, "Missing Bearer token in authorization header"
2626
end
2727

28-
jwt_payload = Auth::JwtPayload.new(T.must(matches[1]))
29-
shop = jwt_payload.shop
30-
31-
if online
32-
jwt_session_id(shop, jwt_payload.sub)
33-
else
34-
offline_session_id(shop)
35-
end
28+
session_id_from_shopify_id_token(id_token: T.must(matches[1]), online: online)
3629
else
3730
# falling back to session cookie
3831
raise Errors::CookieNotFoundError, "JWT token or Session cookie not found for app" unless

test/utils/session_utils_test.rb

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ def setup
2424
}
2525

2626
@jwt_token = JWT.encode(@jwt_payload, ShopifyAPI::Context.api_secret_key, "HS256")
27+
@auth_header = "Bearer #{@jwt_token}"
2728
end
2829

2930
def test_gets_online_session_id_from_shopify_id_token
@@ -47,6 +48,88 @@ def test_session_id_from_shopify_id_token_raises_invalid_jwt_errors
4748
ShopifyAPI::Utils::SessionUtils.session_id_from_shopify_id_token(id_token: "invalid_token", online: true)
4849
end
4950
end
51+
52+
def test_non_embedded_app_current_session_id_raises_cookie_not_found_error
53+
ShopifyAPI::Context.stubs(:embedded?).returns(false)
54+
55+
[
56+
nil,
57+
{},
58+
{ "not-session-cookie-name": "not-this-cookie" },
59+
].each do |cookies|
60+
error = assert_raises(ShopifyAPI::Errors::CookieNotFoundError) do
61+
ShopifyAPI::Utils::SessionUtils.current_session_id(nil, cookies, true)
62+
end
63+
assert_equal("Session cookie not found for app", error.message)
64+
end
65+
end
66+
67+
def test_non_embedded_app_current_session_id_returns_id_from_cookie
68+
ShopifyAPI::Context.stubs(:embedded?).returns(false)
69+
expected_session_id = "cookie_value"
70+
cookies = { ShopifyAPI::Auth::Oauth::SessionCookie::SESSION_COOKIE_NAME => expected_session_id }
71+
72+
assert_equal(
73+
expected_session_id,
74+
ShopifyAPI::Utils::SessionUtils.current_session_id(nil, cookies, true),
75+
)
76+
end
77+
78+
def test_embedded_app_current_session_id_raises_cookie_not_found_error
79+
ShopifyAPI::Context.stubs(:embedded?).returns(true)
80+
81+
[
82+
nil,
83+
{},
84+
{ "not-session-cookie-name": "not-this-cookie" },
85+
].each do |cookies|
86+
error = assert_raises(ShopifyAPI::Errors::CookieNotFoundError) do
87+
ShopifyAPI::Utils::SessionUtils.current_session_id(nil, cookies, true)
88+
end
89+
assert_equal("JWT token or Session cookie not found for app", error.message)
90+
end
91+
end
92+
93+
def test_embedded_app_current_session_id_raises_missing_jwt_token_error
94+
ShopifyAPI::Context.stubs(:embedded?).returns(true)
95+
96+
error = assert_raises(ShopifyAPI::Errors::MissingJwtTokenError) do
97+
ShopifyAPI::Utils::SessionUtils.current_session_id("", nil, true)
98+
end
99+
100+
assert_equal("Missing Bearer token in authorization header", error.message)
101+
end
102+
103+
def test_embedded_app_current_session_id_returns_online_id_from_auth_header
104+
ShopifyAPI::Context.stubs(:embedded?).returns(true)
105+
expected_session_id = "#{@shop}_#{@user_id}"
106+
107+
assert_equal(
108+
expected_session_id,
109+
ShopifyAPI::Utils::SessionUtils.current_session_id(@auth_header, nil, true),
110+
)
111+
end
112+
113+
def test_embedded_app_current_session_id_returns_offline_id_from_auth_header
114+
ShopifyAPI::Context.stubs(:embedded?).returns(true)
115+
expected_session_id = "offline_#{@shop}"
116+
117+
assert_equal(
118+
expected_session_id,
119+
ShopifyAPI::Utils::SessionUtils.current_session_id(@auth_header, nil, false),
120+
)
121+
end
122+
123+
def test_embedded_app_current_session_id_returns_id_from_auth_header_even_with_cookies
124+
ShopifyAPI::Context.stubs(:embedded?).returns(true)
125+
cookies = { ShopifyAPI::Auth::Oauth::SessionCookie::SESSION_COOKIE_NAME => "cookie_value" }
126+
expected_session_id = "#{@shop}_#{@user_id}"
127+
128+
assert_equal(
129+
expected_session_id,
130+
ShopifyAPI::Utils::SessionUtils.current_session_id(@auth_header, cookies, true),
131+
)
132+
end
50133
end
51134
end
52135
end

0 commit comments

Comments
 (0)