diff --git a/app/controllers/concerns/set_platform.rb b/app/controllers/concerns/set_platform.rb index 54e77d517..66de85f12 100644 --- a/app/controllers/concerns/set_platform.rb +++ b/app/controllers/concerns/set_platform.rb @@ -7,6 +7,6 @@ module SetPlatform private def platform - @platform ||= ApplicationPlatform.new(request.user_agent) + @platform ||= ApplicationPlatform.new(cookies[:x_user_agent].presence || request.user_agent) end end diff --git a/test/controllers/concerns/set_platform_test.rb b/test/controllers/concerns/set_platform_test.rb new file mode 100644 index 000000000..26ce9d66a --- /dev/null +++ b/test/controllers/concerns/set_platform_test.rb @@ -0,0 +1,21 @@ +require "test_helper" + +class SetPlatformTest < ActionDispatch::IntegrationTest + DESKTOP_UA = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" + NATIVE_IOS_UA = "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Hotwire Native iOS/1.0" + + test "uses the request user agent by default" do + sign_in_as :david + + get board_path(boards(:writebook)), headers: { "User-Agent" => DESKTOP_UA } + assert_match 'data-platform="desktop web"', response.body + end + + test "prefers x_user_agent cookie over request user agent" do + sign_in_as :david + + cookies[:x_user_agent] = NATIVE_IOS_UA + get board_path(boards(:writebook)), headers: { "User-Agent" => DESKTOP_UA } + assert_match 'data-platform="native ios"', response.body + end +end