Files
puzzle-scoreboard/spec/features/offline_spec.rb
sto 2c87a5b63c
All checks were successful
CI / scan_ruby (push) Successful in 19s
CI / scan_js (push) Successful in 13s
CI / lint (push) Successful in 14s
CI / test (push) Successful in 38s
Add url helpers & specs for offline participation forms
#5
2025-12-10 15:12:19 +01:00

146 lines
5.8 KiB
Ruby

require 'rails_helper'
RSpec.feature "Users", type: :feature do
context "when the contest doesn't allow offline participation" do
let!(:contest) { create(:contest, user: create(:user)) }
it "shouldn't be possible to load the offline participation form" do
visit offline_form_path(contest)
expect(page).to have_http_status(404)
end
end
context "when the contest allows offline participation" do
let!(:contest) { create(:contest, :offline, user: create(:user)) }
it "should be possible to load the offline participation form" do
visit offline_form_path(contest)
expect(page).to have_http_status(200)
expect(page).to have_content(contest.name)
end
it "shouldn't be possible to validate the form without a pseudo" do
visit offline_form_path(contest)
fill_in I18n.t("activerecord.attributes.offline.name"), with: ""
click_button I18n.t("helpers.buttons.start")
expect(page).to have_http_status(422)
expect(page).to have_content(I18n.t("activerecord.errors.models.offline.attributes.name.blank"))
end
it "shouldn't be possible to validate the form without an image" do
visit offline_form_path(contest)
fill_in I18n.t("activerecord.attributes.offline.name"), with: "my_name"
expect { click_button I18n.t("helpers.buttons.start") }.not_to change { contest.reload.offlines.size }
expect(page).to have_http_status(422)
expect(page).to have_content(I18n.t("activerecord.errors.models.offline.attributes.start_image.blank"))
end
it "should be possible to start the offline participation with a valid name and start image" do
start_image_file = Tempfile.new('start_image')
begin
visit offline_form_path(contest)
fill_in I18n.t("activerecord.attributes.offline.name"), with: "my_name"
attach_file("offline[images]", start_image_file.path)
expect { click_button I18n.t("helpers.buttons.start") }.to change { contest.reload.offlines.size }.to(1)
expect(page).to have_http_status(200)
expect(page).to have_current_path(offline_form_edit_path(contest, contest.offlines[0]))
ensure
start_image_file.close
start_image_file.unlink
end
end
it "shouldn't be possible to complete the offline participation without an end image" do
start_image_file = Tempfile.new('start_image')
begin
visit offline_form_path(contest)
fill_in I18n.t("activerecord.attributes.offline.name"), with: "my_name"
attach_file("offline[images]", start_image_file.path)
click_button I18n.t("helpers.buttons.start")
expect { click_button I18n.t("helpers.buttons.end") }.not_to change { contest.offlines[0].images.size }
expect(page).to have_http_status(422)
expect(page).to have_content(I18n.t("activerecord.errors.models.offline.attributes.end_image.blank"))
ensure
start_image_file.close
start_image_file.unlink
end
end
it "shouldn't be possible to complete the offline participation without remaining pieces count when the puzzle isn't completed" do
start_image_file = Tempfile.new('start_image')
begin
visit offline_form_path(contest)
fill_in I18n.t("activerecord.attributes.offline.name"), with: "my_name"
attach_file("offline[images]", start_image_file.path)
click_button I18n.t("helpers.buttons.start")
expect { click_button I18n.t("helpers.buttons.end") }.not_to change { contest.offlines[0].images.size }
expect(page).to have_http_status(422)
expect(page).to have_content(I18n.t("activerecord.errors.models.offline.attributes.remaining_pieces.blank"))
ensure
start_image_file.close
start_image_file.unlink
end
end
it "should be possible to complete the offline participation with the end image and remaining pieces count when the puzzle isn't completed" do
start_image_file = Tempfile.new('start_image')
end_image_file = Tempfile.new('end_image')
begin
visit offline_form_path(contest)
fill_in I18n.t("activerecord.attributes.offline.name"), with: "my_name"
attach_file("offline[images]", start_image_file.path)
click_button I18n.t("helpers.buttons.start")
fill_in I18n.t("activerecord.attributes.offline.remaining_pieces"), with: "10"
attach_file("offline[end_image]", end_image_file.path)
expect { click_button I18n.t("helpers.buttons.end") }.to change { contest.offlines[0].images.size }.to(2)
expect(page).to have_http_status(200)
expect(page).to have_current_path(offline_form_completed_path(contest, contest.offlines[0]))
ensure
start_image_file.close
start_image_file.unlink
end_image_file.close
end_image_file.unlink
end
end
it "should be possible to complete the offline participation with the end image solely when the puzzle is completed" do
start_image_file = Tempfile.new('start_image')
end_image_file = Tempfile.new('end_image')
begin
visit offline_form_path(contest)
fill_in I18n.t("activerecord.attributes.offline.name"), with: "my_name"
attach_file("offline[images]", start_image_file.path)
click_button I18n.t("helpers.buttons.start")
check I18n.t("activerecord.attributes.offline.completed")
attach_file("offline[end_image]", end_image_file.path)
expect { click_button I18n.t("helpers.buttons.end") }.to change { contest.offlines[0].images.size }.to(2)
expect(page).to have_http_status(200)
expect(page).to have_current_path(offline_form_completed_path(contest, contest.offlines[0]))
ensure
start_image_file.close
start_image_file.unlink
end_image_file.close
end_image_file.unlink
end
end
end
end