otwarchive-symphonyarchive/features/step_definitions/skin_steps.rb
2026-03-11 22:22:11 +00:00

287 lines
9.5 KiB
Ruby

# Make sure that the methods in SkinCacheHelper are available to steps in this
# file (specifically, the steps checking cache expiration):
World(SkinCacheHelper)
DEFAULT_CSS = "\"#title { text-decoration: blink;}\""
Given /^basic skins$/ do
assert Skin.default
assert WorkSkin.basic_formatting
end
Given "the skin {string} by {string}" do |skin_name, login|
user = ensure_user(login)
FactoryBot.create(:skin, title: skin_name, author_id: user.id)
end
Given /^I set up the skin "([^"]*)"$/ do |skin_name|
visit new_skin_path
fill_in("Title", with: skin_name)
fill_in("Description", with: "Random description")
fill_in("CSS", with: "#title { text-decoration: blink;}")
end
Given /^I set up the skin "([^"]*)" with some css$/ do |skin_name|
step %{I set up the skin "#{skin_name}" with css #{DEFAULT_CSS}}
end
Given /^I set up the skin "([^"]*)" with css "([^"]*)"$/ do |skin_name, css|
step "I set up the skin \"#{skin_name}\""
fill_in("CSS", with: css)
end
Given /^I create the skin "([^"]*)" with css "([^"]*)"$/ do |skin_name, css|
step "I set up the skin \"#{skin_name}\" with css \"#{css}\""
step %{I submit}
end
Given /^I create the skin "([^"]*)" with some css$/ do |skin_name, css|
step "I set up the skin \"#{skin_name}\" with css \"#{css}\""
step %{I submit}
end
Given /^I create the skin "([^"]*)"$/ do |skin_name|
step "I create the skin \"#{skin_name}\" with css #{DEFAULT_CSS}"
end
Given /^I edit the skin "([^"]*)"$/ do |skin_name|
skin = Skin.find_by(title: skin_name)
visit edit_skin_path(skin)
end
Given /^the unapproved public skin "([^"]*)" with css "([^"]*)"$/ do |skin_name, css|
# Delay to make sure all skins have at least 1 second of separation in their
# creation dates, so that they will be listed in the right order:
step "it is currently 1 second from now"
step %{I am logged in as "skinner"}
step %{I set up the skin "#{skin_name}" with css "#{css}"}
attach_file("skin_icon", "features/fixtures/skin_test_preview.png")
check("skin_public")
step %{I submit}
step %{I should see "Skin was successfully created"}
end
Given /^the unapproved public skin "([^"]*)"$/ do |skin_name|
step "the unapproved public skin \"#{skin_name}\" with css #{DEFAULT_CSS}"
end
Given /^I approve the skin "([^"]*)"$/ do |skin_name|
step %{I am logged in as a "superadmin" admin}
visit admin_skins_url
check("make_official_#{skin_name.downcase.gsub(/\s/, '_')}")
step %{I submit}
end
Given /^I unapprove the skin "([^"]*)"$/ do |skin_name|
step %{I am logged in as a "superadmin" admin}
visit admin_skins_url
step "I follow \"Approved Skins\""
check("make_unofficial_#{skin_name.downcase.gsub(/\s/, '_')}")
step %{I submit}
end
Given /^I have loaded site skins$/ do
Skin.load_site_css
end
Given "the approved public skin {string} with css {string}" do |skin_name, css|
step %{the unapproved public skin "#{skin_name}" with css "#{css}"}
step %{I approve the skin "#{skin_name}"}
step "I am logged out"
end
Given /^the approved public skin "([^"]*)"$/ do |skin_name|
step "the approved public skin \"#{skin_name}\" with css #{DEFAULT_CSS}"
end
Given "the approved public skin {string} has reserved words in the title" do |skin_name|
# Admins can't create skins, so we have to create it this way.
FactoryBot.build(:skin, title: skin_name, public: true).save!(validate: false)
step %{I approve the skin "#{skin_name}"}
step "I am logged out"
end
Given /^"([^"]*)" is using the approved public skin "([^"]*)" with css "([^"]*)"$/ do |login, skin_name, css|
step "the approved public skin \"public skin\" with css \"#{css}\""
step "I am logged in as \"#{login}\""
step "I am on #{login}'s preferences page"
select(skin_name, from: "preference_skin_id")
step %{I submit}
end
Given /^"([^"]*)" is using the approved public skin "([^"]*)"$/ do |login, skin_name|
step "\"#{login}\" is using the approved public skin with css #{DEFAULT_CSS}"
end
Given /^I have a skin "(.*?)" with a parent "(.*?)"$/ do |child_title, parent_title|
step %{I set up the skin "#{parent_title}"}
click_button("Submit")
step %{I set up the skin "#{child_title}"}
click_button("Submit")
child = Skin.find_by(title: child_title)
parent = Skin.find_by(title: parent_title)
child.skin_parents.create(position: 1, parent_skin: parent)
end
### WHEN
When /^I change my skin to "([^\"]*)"$/ do |skin_name|
step %{I follow "My Dashboard"}
step %{I follow "Preferences"}
step %{I select "#{skin_name}" from "preference_skin_id"}
step %{I submit}
step %{I should see "Your preferences were successfully updated."}
end
When /^I create and use a skin to make the header pink$/ do
visit new_skin_url(wizard: true)
fill_in("skin_title", with: "Pink header")
fill_in("skin_headercolor", with: "pink")
click_button("Submit")
click_button("Use")
end
When /^I create and use a skin to change the accent color$/ do
visit new_skin_url(wizard: true)
fill_in("skin_title", with: "Blue accent")
fill_in("skin_accent_color", with: "blue")
click_button("Submit")
click_button("Use")
end
When /^I edit the skin "([^\"]*)" with the wizard$/ do |skin_name|
skin = Skin.find_by(title: skin_name)
visit edit_skin_path(skin, wizard: true)
end
When /^I edit my pink header skin to have a purple logo$/ do
skin = Skin.find_by(title: "Pink header")
visit edit_skin_path(skin)
fill_in("CSS", with: "#header .heading a {color: purple;}")
click_button("Update")
end
When /^I view the skin "([^\"]*)"$/ do |skin|
skin = Skin.find_by(title: skin)
visit skin_url(skin)
end
When /^the skin "([^\"]*)" is in the chooser$/ do |skin_name|
skin = Skin.find_by(title: skin_name)
skin.in_chooser = true
skin.save!
end
When /^the skin "([^\"]*)" is cached$/ do |skin_name|
skin = Skin.find_by(title: skin_name)
skin.cached = true
skin.save!
skin.cache!
end
When /^I preview the skin "([^\"]*)"$/ do |skin_name|
skin = Skin.find_by(title: skin_name)
visit preview_skin_path(skin)
end
When /^I set the skin "([^\"]*)" for this session$/ do |skin_name|
skin = Skin.find_by(title: skin_name)
visit set_skin_path(skin)
end
### THEN
Then "I should see a parent skin text field" do
step %{I should see "Parent #"}
end
Then "I should see {string} in the page style" do |css|
expect(page).to have_css("style", text: css, visible: false)
end
Then "I should not see {string} in the page style" do |css|
expect(page).not_to have_css("style", text: css, visible: false)
end
Then "the page should have the cached skin {string}" do |skin_name|
skin = Skin.find_by(title: skin_name)
expect(page).to have_css("link[href*='#{skin.skin_dirname}']", visible: false)
end
Then "the page should not have the cached skin {string}" do |skin_name|
skin = Skin.find_by(title: skin_name)
expect(page).not_to have_css("link[href*='#{skin.skin_dirname}']", visible: false)
end
Then "I should see a pink header" do
step %{I should see "#header .primary" in the page style}
step %{I should see "background-image: none; background-color: pink;" in the page style}
end
Then "I should see a different accent color" do
step %{I should see "fieldset, form dl, fieldset dl dl" in the page style}
step %{I should see "background: blue; border-color: blue;" in the page style}
end
Then "the page should have a skin with the media query {string}" do |query|
expect(page).to have_css("style[media='#{query}']", visible: false)
end
Then /^the cache of the skin on "([^\"]*)" should expire after I save the skin$/ do |title|
skin = Skin.find_by(title: title)
orig_cache_version = skin_cache_version(skin)
visit edit_skin_path(skin)
fill_in("CSS", with: "#random { text-decoration: blink;}")
click_button("Update")
assert orig_cache_version != skin_cache_version(skin), "Cache version #{orig_cache_version} matches #{skin_cache_version(skin)}."
end
Then(/^the cache of the skin on "(.*?)" should not expire after I save "(.*?)"$/) do |arg1, arg2|
skin = Skin.find_by(title: arg1)
save_me = Skin.find_by(title: arg2)
orig_skin_version = skin_cache_version(skin)
orig_save_me_version = skin_cache_version(save_me)
visit edit_skin_path(save_me)
fill_in("CSS", with: "#random { text-decoration: blink;}")
click_button("Update")
assert orig_save_me_version != skin_cache_version(save_me), "Cache version #{orig_save_me_version} matches #{skin_cache_version(save_me)}"
assert orig_skin_version == skin_cache_version(skin), "Cache version #{orig_skin_version} does not match #{skin_cache_version(skin)}"
end
Then(/^the cache of the skin on "(.*?)" should expire after I save a parent skin$/) do |arg1|
skin = Skin.find_by(title: arg1)
orig_skin_version = skin_cache_version(skin)
parent_id = SkinParent.where(child_skin_id: skin.id).last.parent_skin_id
parent = Skin.find(parent_id)
parent.save!
assert orig_skin_version != skin_cache_version(skin), "Cache version #{orig_skin_version} matches #{skin_cache_version(skin)}"
end
Then "I should see a purple logo" do
step %|I should see "#header .heading a { color: purple; }" in the page style|
end
Then /^I should see the skin "(.*?)" in the skin chooser$/ do |skin|
with_scope("#footer .menu") do
expect(page).to have_content(skin)
end
end
Then /^I should not see the skin chooser$/ do
expect(page).not_to have_content("Customize")
end
Then /^the filesystem cache of the skin "(.*?)" should include "(.*?)"$/ do |title, contents|
skin = Skin.find_by(title: title)
expect(skin.cached?).to be_truthy
directory = Skin.skins_dir + skin.skin_dirname
style = Skin.skin_dir_entries(directory, /.css$/).map do |filename|
File.read(directory + filename)
end.join("\n")
expect(style).to include(contents)
end