2
0
Fork 0
mirror of https://github.com/discourse/discourse.git synced 2026-03-04 01:15:08 +08:00
discourse/spec/system/script_encoding_spec.rb
David Taylor e65395cce4
PERF: Use correctly-encoded JS files for webpack chunks on S3 (#35444)
Co-authored-by: Jarek Radosz <jradosz@gmail.com>
2025-10-16 16:41:21 +01:00

91 lines
2.8 KiB
Ruby

# frozen_string_literal: true
describe "script encoding" do
let(:js_cdn_requests) { [] }
before { stub_and_log_cdn_requests }
def stub_and_log_cdn_requests
page.driver.with_playwright_page do |page|
page.route(
"http://cdn.example.com/**/*",
->(route, request) do
js_cdn_requests << request.url if request.url.end_with?(".js")
origin_uri = URI(request.frame.url)
request_uri = URI(request.url)
# We don't actually have .br.js files or a CDN, so invisibly
# rewrite the request to the regular assets
mocked_result =
URI::HTTP.build(
scheme: origin_uri.scheme,
host: origin_uri.host,
port: origin_uri.port,
path: request_uri.path.sub(".br.js", ".js"),
)
route.continue(url: mocked_result.to_s)
end,
)
end
end
context "without s3 assets" do
before { set_cdn_url "http://cdn.example.com" }
it "loads JS chunks with the .js extension" do
user = Fabricate(:admin)
sign_in user
visit "/latest"
expect(page).to have_css("#site-logo")
expect(js_cdn_requests.length).to be > 1
expect(js_cdn_requests.any? { |r| r.end_with?(".br.js") }).to eq(false)
expect(js_cdn_requests.all? { |r| r.end_with?(".js") }).to eq(true)
js_cdn_requests.clear
# Use the composer to trigger an async chunk load
find("#create-topic").click
find(".d-editor-input").fill_in(with: "This is a test")
expect(page).to have_css(".d-editor-preview", text: "This is a test")
expect(js_cdn_requests.length).to be > 1
expect(js_cdn_requests.any? { |r| r.end_with?(".br.js") }).to eq(false)
expect(js_cdn_requests.all? { |r| r.end_with?(".js") }).to eq(true)
end
end
context "with s3 assets" do
before do
global_setting :s3_bucket, "test_bucket"
global_setting :s3_region, "ap-australia"
global_setting :s3_access_key_id, "123"
global_setting :s3_secret_access_key, "123"
global_setting :s3_cdn_url, "http://cdn.example.com"
end
it "loads JS chunks with the .br.js extension" do
user = Fabricate(:admin)
sign_in user
visit "/latest"
expect(page).to have_css("#site-logo")
expect(js_cdn_requests.length).to be > 1
expect(js_cdn_requests.all? { |r| r.end_with?(".br.js") }).to eq(true)
js_cdn_requests.clear
# Use the composer to trigger an async chunk load
find("#create-topic").click
find(".d-editor-input").fill_in(with: "This is a test")
expect(page).to have_css(".d-editor-preview", text: "This is a test")
expect(js_cdn_requests.length).to be > 1
expect(js_cdn_requests.all? { |r| r.end_with?(".br.js") }).to eq(true)
end
end
end