mirror of
https://github.com/discourse/discourse.git
synced 2024-12-03 15:23:47 +08:00
c7dce90f43
Previously we were patching ember-cli so that it would split the test bundle into two halves: the helpers, and the tests themselves. This was done so that we could use the helpers for `/theme-qunit` without needing to load all the core tests. This patch has proven problematic to maintain, and will become even harder under Embroider. This commit removes the patch, so that ember-cli goes back to generating a single `tests.js` bundle. This means that core test definitions will now be included in the bundle when using `/theme-qunit`, and so this commit also updates our test module filter to exclude them from the run. This is the same way that we handle plugin tests on the regular `/tests` route, and is fully supported by qunit. For now, this keeps `/theme-qunit` working in both development and production environments. However, we are very likely to drop support in production as part of the move to Embroider.
111 lines
4.2 KiB
Ruby
111 lines
4.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
RSpec.describe QunitController do
|
|
describe "#theme" do
|
|
let(:theme) { Fabricate(:theme, name: "main-theme") }
|
|
let(:component) { Fabricate(:theme, component: true, name: "enabled-component") }
|
|
let(:disabled_component) do
|
|
Fabricate(:theme, component: true, enabled: false, name: "disabled-component")
|
|
end
|
|
let(:theme_without_tests) { Fabricate(:theme, name: "no-tests-guy") }
|
|
|
|
before do
|
|
Theme.destroy_all
|
|
theme.set_default!
|
|
component.add_relative_theme!(:parent, theme)
|
|
disabled_component.add_relative_theme!(:parent, theme)
|
|
[theme, component, disabled_component].each do |t|
|
|
t.set_field(
|
|
target: :extra_js,
|
|
type: :js,
|
|
name: "discourse/initializers/my-#{t.id}-initializer.js",
|
|
value: "console.log(#{t.id});",
|
|
)
|
|
t.set_field(
|
|
target: :tests_js,
|
|
type: :js,
|
|
name: "acceptance/some-test-#{t.id}.js",
|
|
value: "assert.ok(#{t.id});",
|
|
)
|
|
t.save!
|
|
end
|
|
end
|
|
|
|
context "with non-admin users on production" do
|
|
before do
|
|
# We need to call sign_in before stubbing the method because SessionController#become
|
|
# checks for the current env when the file is loaded.
|
|
# We need to make sure become is called once before stubbing, or the method
|
|
# wont'be available for future tests if this one runs first.
|
|
sign_in(Fabricate(:user))
|
|
Rails.env.stubs(:production?).returns(true)
|
|
end
|
|
|
|
it "regular users cannot see the page" do
|
|
get "/theme-qunit"
|
|
expect(response.status).to eq(404)
|
|
end
|
|
|
|
it "anons cannot see the page" do
|
|
sign_out
|
|
get "/theme-qunit"
|
|
expect(response.status).to eq(404)
|
|
end
|
|
end
|
|
|
|
context "with admin users" do
|
|
before { sign_in(Fabricate(:admin)) }
|
|
|
|
context "when no theme is specified" do
|
|
it "renders a list of themes and components that have tests" do
|
|
get "/theme-qunit"
|
|
expect(response.status).to eq(200)
|
|
[theme, component, disabled_component].each do |t|
|
|
expect(response.body).to include(t.name)
|
|
expect(response.body).to include("/theme-qunit?id=#{t.id}")
|
|
end
|
|
expect(response.body).not_to include(theme_without_tests.name)
|
|
expect(response.body).not_to include("/theme-qunit?id=#{theme_without_tests.id}")
|
|
end
|
|
end
|
|
|
|
it "can specify theme by id" do
|
|
get "/theme-qunit?id=#{theme.id}"
|
|
expect(response.status).to eq(200)
|
|
expect(response.body).to include("/theme-javascripts/tests/#{theme.id}-")
|
|
end
|
|
|
|
it "can specify theme by name" do
|
|
get "/theme-qunit?name=#{theme.name}"
|
|
expect(response.status).to eq(200)
|
|
expect(response.body).to include("/theme-javascripts/tests/#{theme.id}-")
|
|
end
|
|
|
|
it "can specify theme by url" do
|
|
theme.build_remote_theme(remote_url: "git@github.com:discourse/discourse.git").save!
|
|
theme.save!
|
|
get "/theme-qunit?url=#{theme.remote_theme.remote_url}"
|
|
expect(response.status).to eq(200)
|
|
expect(response.body).to include("/theme-javascripts/tests/#{theme.id}-")
|
|
end
|
|
|
|
it "themes qunit page includes all the JS/CSS it needs" do
|
|
get "/theme-qunit?id=#{theme.id}"
|
|
expect(response.status).to eq(200)
|
|
expect(response.body).to include("/stylesheets/color_definitions_base_")
|
|
expect(response.body).to include("/stylesheets/desktop_")
|
|
expect(response.body).to include("* https://qunitjs.com/") # inlined QUnit CSS
|
|
expect(response.body).to include("/assets/locales/en.js")
|
|
expect(response.body).to include("/test-support.js")
|
|
expect(response.body).to include("/tests.js")
|
|
expect(response.body).to include("/test-site-settings.js")
|
|
expect(response.body).to include("/assets/markdown-it-bundle.js")
|
|
expect(response.body).to include("/assets/discourse.js")
|
|
expect(response.body).to include("/assets/admin.js")
|
|
expect(response.body).to match(/\/theme-javascripts\/\h{40}\.js/)
|
|
expect(response.body).to include("/theme-javascripts/tests/#{theme.id}-")
|
|
end
|
|
end
|
|
end
|
|
end
|