diff --git a/app/controllers/contest_descriptions_controller.rb b/app/controllers/contest_descriptions_controller.rb index 4d0dbd2a..52cff0af 100644 --- a/app/controllers/contest_descriptions_controller.rb +++ b/app/controllers/contest_descriptions_controller.rb @@ -26,7 +26,22 @@ def create end def update - handle_save(@contest_description.update(contest_description_params), 'updated') + # Check if trying to deactivate with active instances + if contest_description_params[:active] == "0" && @contest_description.active_contest_instances.any? + flash.now[:alert] = "Cannot deactivate contest description while it has active instances. Please deactivate all instances first." + + respond_to do |format| + format.turbo_stream { + render turbo_stream: [ + turbo_stream.replace('flash', partial: 'shared/flash_messages'), + turbo_stream.replace('contest_description_form', partial: 'contest_descriptions/form', locals: { contest_description: @contest_description }) + ], status: :unprocessable_entity + } + format.html { render :edit, status: :unprocessable_entity } + end + else + handle_save(@contest_description.update(contest_description_params), 'updated') + end end def destroy diff --git a/app/controllers/contest_instances_controller.rb b/app/controllers/contest_instances_controller.rb index 5011e151..19e90fa2 100644 --- a/app/controllers/contest_instances_controller.rb +++ b/app/controllers/contest_instances_controller.rb @@ -1,7 +1,7 @@ class ContestInstancesController < ApplicationController before_action :set_container before_action :set_contest_description - before_action :set_contest_instance, only: %i[show edit update destroy send_round_results] + before_action :set_contest_instance, only: %i[show edit update destroy send_round_results deactivate] before_action :authorize_container_access # GET /contest_instances @@ -213,6 +213,21 @@ def export_round_results end end + def deactivate + @contest_instance.update(active: false) + @contest_description = @contest_instance.contest_description + respond_to do |format| + format.turbo_stream do + render turbo_stream: turbo_stream.replace( + 'active-instances-list', + partial: 'contest_descriptions/active_instances_inline', + locals: { contest_description: @contest_description } + ) + end + format.html { redirect_to container_contest_description_path(@contest_description.container, @contest_description), notice: 'Instance deactivated.' } + end + end + private def authorize_container_access diff --git a/app/models/contest_description.rb b/app/models/contest_description.rb index 38ea4aa4..ce798e5d 100644 --- a/app/models/contest_description.rb +++ b/app/models/contest_description.rb @@ -29,6 +29,19 @@ class ContestDescription < ApplicationRecord validates :created_by, presence: true validates :name, presence: true, uniqueness: true + validate :cannot_deactivate_with_active_instances scope :active, -> { where(active: true) } + + def active_contest_instances + contest_instances.where(active: true) + end + + private + + def cannot_deactivate_with_active_instances + if will_save_change_to_active? && !active && contest_instances.where(active: true).exists? + errors.add(:active, 'Cannot deactivate contest description while instances are active.') + end + end end diff --git a/app/models/contest_instance.rb b/app/models/contest_instance.rb index fca1cfe4..934af75c 100644 --- a/app/models/contest_instance.rb +++ b/app/models/contest_instance.rb @@ -56,6 +56,7 @@ class ContestInstance < ApplicationRecord validate :must_have_at_least_one_category validate :only_one_active_per_contest_description validate :date_closed_after_date_open + validate :cannot_activate_if_description_inactive # Scopes scope :active_and_open, -> { @@ -88,6 +89,14 @@ class ContestInstance < ApplicationRecord where.not(id: maxed_out_contest_instance_ids) } + scope :active_for_contest_description, ->(contest_description_id) { + where(active: true, contest_description_id: contest_description_id) + } + + scope :for_contest_description, ->(contest_description_id) { + where(contest_description_id: contest_description_id) + } + def open? active && Time.current.between?(date_open, date_closed) end @@ -171,4 +180,10 @@ def date_closed_after_date_open errors.add(:date_closed, 'must be after date contest opens') end end + + def cannot_activate_if_description_inactive + if active && contest_description && !contest_description.active? + errors.add(:active, 'Cannot activate a contest instance when its contest description is inactive.') + end + end end diff --git a/app/views/containers/_container_detail.html.erb b/app/views/containers/_container_detail.html.erb index 5698d7c3..32cd81e7 100644 --- a/app/views/containers/_container_detail.html.erb +++ b/app/views/containers/_container_detail.html.erb @@ -74,6 +74,11 @@ +
+ This collection has <%= pluralize(container_contest_descriptions.active.count, "active description") %> + and <%= pluralize(container_contest_descriptions.count - container_contest_descriptions.active.count, "inactive description") %>. +
+
<% if container_contest_descriptions.present? %> <%= render 'contest_descriptions_table', diff --git a/app/views/contest_descriptions/_active_instances_inline.html.erb b/app/views/contest_descriptions/_active_instances_inline.html.erb new file mode 100644 index 00000000..adc682eb --- /dev/null +++ b/app/views/contest_descriptions/_active_instances_inline.html.erb @@ -0,0 +1,27 @@ + + <% active_instances = contest_description.active_contest_instances %> + <% if active_instances.any? %> +
+
Active Contest Instances
+
    + <% active_instances.each do |instance| %> +
  • + + <%= instance.display_name %> + [<%= l(instance.date_open, format: :short) %> - <%= l(instance.date_closed, format: :short) %>] + + <%= button_to 'Deactivate', + deactivate_container_contest_description_contest_instance_path( + contest_description.container, contest_description, instance + ), + method: :patch, + data: { turbo_frame: 'active-instances-list' }, + class: 'btn btn-danger btn-sm' %> +
  • + <% end %> +
+
+ <% else %> +
No active contest instances.
+ <% end %> +
diff --git a/app/views/contest_descriptions/_form.html.erb b/app/views/contest_descriptions/_form.html.erb index 57a49f80..a8dacf87 100644 --- a/app/views/contest_descriptions/_form.html.erb +++ b/app/views/contest_descriptions/_form.html.erb @@ -1,5 +1,8 @@
- <%= simple_form_for([@container, @contest_description], html: { id: 'new_contest_description_form' }) do |f| %> + <%= simple_form_for([@container, @contest_description], + html: { + id: 'new_contest_description_form' + }) do |f| %> <%= f.error_notification %> <%= f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present? %> @@ -18,3 +21,5 @@
<% end %>
+ +<%= render 'contest_descriptions/active_instances_inline', contest_description: @contest_description %> diff --git a/app/views/contest_descriptions/edit.html.erb b/app/views/contest_descriptions/edit.html.erb index 8a29312a..667893df 100644 --- a/app/views/contest_descriptions/edit.html.erb +++ b/app/views/contest_descriptions/edit.html.erb @@ -6,4 +6,4 @@
<%= render 'form' %> -
\ No newline at end of file + diff --git a/app/views/contest_instances/index.html.erb b/app/views/contest_instances/index.html.erb index ac97b501..b41dd3f5 100644 --- a/app/views/contest_instances/index.html.erb +++ b/app/views/contest_instances/index.html.erb @@ -47,6 +47,10 @@ Show only Active contest instances +
+ This contest has <%= pluralize(@contest_instances.active_for_contest_description(@contest_description.id).count, "active instance") %> + and <%= pluralize(@contest_instances.for_contest_description(@contest_description.id).count - @contest_instances.active_for_contest_description(@contest_description.id).count, "inactive instance") %>. +
diff --git a/config/routes.rb b/config/routes.rb index 84f7a14a..e8ba039b 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -46,6 +46,7 @@ post 'send_round_results' get :export_entries get :export_round_results + patch :deactivate end resources :judging_rounds do member do diff --git a/spec/controllers/contest_instances_controller_spec.rb b/spec/controllers/contest_instances_controller_spec.rb index 677c62fd..e811233d 100644 --- a/spec/controllers/contest_instances_controller_spec.rb +++ b/spec/controllers/contest_instances_controller_spec.rb @@ -7,7 +7,7 @@ let(:department) { create(:department) } let(:user) { create(:user, :axis_mundi) } # Admin user with full privileges let(:container) { create(:container, department: department) } - let(:contest_description) { create(:contest_description, container: container) } + let(:contest_description) { create(:contest_description, :active, container: container) } let(:contest_instance) { create(:contest_instance, contest_description: contest_description) } let(:judging_round) { create(:judging_round, contest_instance: contest_instance, completed: true) } @@ -72,7 +72,7 @@ let(:department) { create(:department) } let(:user) { create(:user, :axis_mundi) } # Admin user with full privileges let(:container) { create(:container, department: department) } - let(:contest_description) { create(:contest_description, container: container) } + let(:contest_description) { create(:contest_description, :active, container: container) } let(:contest_instance) { create(:contest_instance, contest_description: contest_description) } before do @@ -243,7 +243,7 @@ describe 'GET #export_entries' do let(:department) { create(:department) } let(:container) { create(:container, department: department) } - let(:contest_description) { create(:contest_description, container: container) } + let(:contest_description) { create(:contest_description, :active, container: container) } context 'with authorized users' do let(:user) { create(:user, :axis_mundi) } @@ -514,7 +514,7 @@ describe 'GET #export_round_results' do let(:department) { create(:department) } let(:container) { create(:container, department: department) } - let(:contest_description) { create(:contest_description, container: container) } + let(:contest_description) { create(:contest_description, :active, container: container) } let(:contest_instance) { create(:contest_instance, contest_description: contest_description) } let(:judging_round) { create(:judging_round, contest_instance: contest_instance, completed: true) } diff --git a/spec/controllers/entry_rankings_controller_spec.rb b/spec/controllers/entry_rankings_controller_spec.rb index 2b999790..fa9ece59 100644 --- a/spec/controllers/entry_rankings_controller_spec.rb +++ b/spec/controllers/entry_rankings_controller_spec.rb @@ -2,7 +2,7 @@ RSpec.describe EntryRankingsController, type: :controller do let(:container) { create(:container) } - let(:contest_description) { create(:contest_description, container: container) } + let(:contest_description) { create(:contest_description, :active, container: container) } let(:contest_instance) { create(:contest_instance, contest_description: contest_description) } let(:judging_round) { create(:judging_round, contest_instance: contest_instance) } let(:entry) { create(:entry, contest_instance: contest_instance) } diff --git a/spec/controllers/judge_dashboard_controller_spec.rb b/spec/controllers/judge_dashboard_controller_spec.rb index 821e7626..5274ee6a 100644 --- a/spec/controllers/judge_dashboard_controller_spec.rb +++ b/spec/controllers/judge_dashboard_controller_spec.rb @@ -2,7 +2,7 @@ RSpec.describe JudgeDashboardController, type: :controller do let(:container) { create(:container) } - let(:contest_description) { create(:contest_description, container: container) } + let(:contest_description) { create(:contest_description, :active, container: container) } # Start at a known point in time before(:all) do diff --git a/spec/controllers/judging_assignments_controller_spec.rb b/spec/controllers/judging_assignments_controller_spec.rb index 3ecdebc4..b0b818f6 100644 --- a/spec/controllers/judging_assignments_controller_spec.rb +++ b/spec/controllers/judging_assignments_controller_spec.rb @@ -2,7 +2,7 @@ RSpec.describe JudgingAssignmentsController, type: :controller do let(:container) { create(:container) } - let(:contest_description) { create(:contest_description, container: container) } + let(:contest_description) { create(:contest_description, :active, container: container) } let(:contest_instance) { create(:contest_instance, contest_description: contest_description) } let(:admin) { create(:user) } let!(:judge_role) { create(:role, kind: 'Judge') } diff --git a/spec/controllers/judging_rounds_controller_spec.rb b/spec/controllers/judging_rounds_controller_spec.rb index 240bad03..ea25c104 100644 --- a/spec/controllers/judging_rounds_controller_spec.rb +++ b/spec/controllers/judging_rounds_controller_spec.rb @@ -2,7 +2,7 @@ RSpec.describe JudgingRoundsController, type: :controller do let(:container) { create(:container) } - let(:contest_description) { create(:contest_description, container: container) } + let(:contest_description) { create(:contest_description, :active, container: container) } let(:contest_instance) { create(:contest_instance, contest_description: contest_description) } let(:judging_round) { create(:judging_round, contest_instance: contest_instance) } let(:admin) { create(:user) } diff --git a/spec/features/bulk_contest_instance_creation_spec.rb b/spec/features/bulk_contest_instance_creation_spec.rb index 95fca3ad..956474c3 100644 --- a/spec/features/bulk_contest_instance_creation_spec.rb +++ b/spec/features/bulk_contest_instance_creation_spec.rb @@ -11,8 +11,8 @@ end it "shows only contest descriptions that have existing instances" do - description1 = create(:contest_description, container: @container) - description2 = create(:contest_description, container: @container) + description1 = create(:contest_description, :active, container: @container) + description2 = create(:contest_description, :active, container: @container) create(:contest_instance, contest_description: description1) create(:contest_instance, contest_description: description2) @@ -22,13 +22,13 @@ expect(page).to have_content(description2.name) # Create a new contest description without instances - new_description = create(:contest_description, container: @container) + new_description = create(:contest_description, :active, container: @container) expect(page).to have_no_content(new_description.name) end it "allows selection of multiple contest descriptions" do - description1 = create(:contest_description, container: @container) - description2 = create(:contest_description, container: @container) + description1 = create(:contest_description, :active, container: @container) + description2 = create(:contest_description, :active, container: @container) create(:contest_instance, contest_description: description1) create(:contest_instance, contest_description: description2) @@ -42,7 +42,7 @@ end it "requires date selection" do - description = create(:contest_description, container: @container) + description = create(:contest_description, :active, container: @container) create(:contest_instance, contest_description: description) visit new_container_bulk_contest_instance_path(@container) @@ -55,7 +55,7 @@ end it "creates new instances based on most recent existing instances" do - description = create(:contest_description, container: @container) + description = create(:contest_description, :active, container: @container) existing_instance = create(:contest_instance, contest_description: description) new_open_date = 1.month.from_now new_close_date = 2.months.from_now @@ -78,7 +78,7 @@ end it "validates date ranges" do - description = create(:contest_description, container: @container) + description = create(:contest_description, :active, container: @container) create(:contest_instance, contest_description: description) visit new_container_bulk_contest_instance_path(@container) diff --git a/spec/features/judging_round_selection_spec.rb b/spec/features/judging_round_selection_spec.rb index ac736a73..85afd56c 100644 --- a/spec/features/judging_round_selection_spec.rb +++ b/spec/features/judging_round_selection_spec.rb @@ -2,7 +2,7 @@ RSpec.describe 'Judging Round Selection', type: :system do let(:container) { create(:container) } - let(:contest_description) { create(:contest_description, container: container) } + let(:contest_description) { create(:contest_description, :active, container: container) } let(:contest_instance) { create(:contest_instance, contest_description: contest_description) } let(:judging_round) do create(:judging_round, diff --git a/spec/mailers/results_mailer_spec.rb b/spec/mailers/results_mailer_spec.rb index 505e5b6b..6b02f3b2 100644 --- a/spec/mailers/results_mailer_spec.rb +++ b/spec/mailers/results_mailer_spec.rb @@ -7,7 +7,7 @@ let(:profile) { create(:profile, user: user) } let(:department) { create(:department) } let(:container) { create(:container, name: 'Test Container', department: department, contact_email: 'contact@example.com') } - let(:contest_description) { create(:contest_description, name: 'Test Contest', container: container) } + let(:contest_description) { create(:contest_description, :active, name: 'Test Contest', container: container) } let(:contest_instance) { create(:contest_instance, contest_description: contest_description, date_open: 2.months.ago, date_closed: 1.month.ago) } let(:category) { create(:category, kind: 'Poetry') } let(:entry) { create(:entry, title: 'Test Entry', profile: profile, contest_instance: contest_instance, category: category, pen_name: 'Writer Pen') } diff --git a/spec/models/container_spec.rb b/spec/models/container_spec.rb index e2ab38e9..524dc457 100644 --- a/spec/models/container_spec.rb +++ b/spec/models/container_spec.rb @@ -162,12 +162,22 @@ end it 'excludes entries from inactive contest descriptions' do - inactive_desc = create(:contest_description, container: container, active: false) - inactive_instance = create(:contest_instance, contest_description: inactive_desc, active: true) - create(:entry, profile: create(:profile, campus: campus1), contest_instance: inactive_instance) + # Create an active contest description with an active instance and entry + active_desc = create(:contest_description, container: container, active: true) + active_instance = create(:contest_instance, contest_description: active_desc, active: true) + create(:entry, profile: create(:profile, campus: campus1), contest_instance: active_instance) + # Verify the entry is included initially summary = container.entries_summary - expect(summary.find { |s| s.campus_descr == 'Campus A' }.entry_count).to eq(2) + expect(summary.find { |s| s.campus_descr == 'Campus A' }.entry_count).to eq(3) # 2 from setup + 1 new + + # Deactivate both the instance and description (business rule: must deactivate instance first) + active_instance.update!(active: false) + active_desc.update!(active: false) + + # Now verify that entries from the deactivated contest description are excluded + summary = container.entries_summary + expect(summary.find { |s| s.campus_descr == 'Campus A' }.entry_count).to eq(2) # Back to original 2 end end diff --git a/spec/models/contest_description_spec.rb b/spec/models/contest_description_spec.rb index 3223f01c..f7174550 100644 --- a/spec/models/contest_description_spec.rb +++ b/spec/models/contest_description_spec.rb @@ -64,4 +64,27 @@ end end end + + describe 'deactivation with active instances' do + let(:container) { create(:container) } + let!(:description) { create(:contest_description, container: container, active: true) } + let!(:active_instance) { create(:contest_instance, contest_description: description, active: true) } + let!(:inactive_instance) { create(:contest_instance, contest_description: description, active: false) } + + it 'is not valid to deactivate if any contest_instance is active' do + description.active = false + expect(description).not_to be_valid + expect(description.errors[:active]).to include('Cannot deactivate contest description while instances are active.') + end + + it 'is valid to deactivate if all contest_instances are inactive' do + active_instance.update!(active: false) + description.active = false + expect(description).to be_valid + end + + it 'returns only active contest_instances from #active_contest_instances' do + expect(description.active_contest_instances).to contain_exactly(active_instance) + end + end end diff --git a/spec/models/contest_instance_spec.rb b/spec/models/contest_instance_spec.rb index 90bcc15f..845257ad 100644 --- a/spec/models/contest_instance_spec.rb +++ b/spec/models/contest_instance_spec.rb @@ -252,4 +252,19 @@ end end end + + describe 'activation with inactive contest_description' do + let(:description) { create(:contest_description, active: false) } + let(:instance) { build(:contest_instance, contest_description: description, active: true) } + + it 'is not valid to activate if contest_description is inactive' do + expect(instance).not_to be_valid + expect(instance.errors[:active]).to include('Cannot activate a contest instance when its contest description is inactive.') + end + + it 'is valid to activate if contest_description is active' do + description.update!(active: true) + expect(instance).to be_valid + end + end end diff --git a/spec/policies/contest_instance_policy_spec.rb b/spec/policies/contest_instance_policy_spec.rb index 03a6ef6c..03c384b7 100644 --- a/spec/policies/contest_instance_policy_spec.rb +++ b/spec/policies/contest_instance_policy_spec.rb @@ -4,7 +4,7 @@ subject { described_class.new(user, contest_instance) } let(:container) { create(:container) } - let(:contest_description) { create(:contest_description, container: container) } + let(:contest_description) { create(:contest_description, :active, container: container) } let(:contest_instance) { create(:contest_instance, contest_description: contest_description) } let(:container_admin_role) { create(:role, kind: 'Collection Administrator') } let(:axis_mundi_role) { create(:role, kind: 'Axis Mundi') } diff --git a/spec/system/email_preferences_spec.rb b/spec/system/email_preferences_spec.rb index 9621dcca..edf4962a 100644 --- a/spec/system/email_preferences_spec.rb +++ b/spec/system/email_preferences_spec.rb @@ -4,7 +4,7 @@ let(:department) { create(:department, name: 'Test Department') } let(:admin_user) { create(:user, :axis_mundi) } let(:container) { create(:container, name: 'Test Container', department: department, contact_email: 'admin@example.com') } - let(:contest_description) { create(:contest_description, name: 'Test Contest', container: container) } + let(:contest_description) { create(:contest_description, :active, name: 'Test Contest', container: container) } let(:contest_instance) { create(:contest_instance, contest_description: contest_description, date_open: 4.months.ago, date_closed: 3.months.ago) } # Create applicant user and entry diff --git a/spec/system/judge_dashboard_spec.rb b/spec/system/judge_dashboard_spec.rb index b121c3e5..1b45b40d 100644 --- a/spec/system/judge_dashboard_spec.rb +++ b/spec/system/judge_dashboard_spec.rb @@ -14,7 +14,7 @@ def last_entry_title let(:judge) { create(:user, first_name: 'John', last_name: 'Doe', email: 'judge+gmail.com@umich.edu') } let(:judge_role) { create(:role, :judge) } let(:container) { create(:container) } - let(:contest_description) { create(:contest_description, container: container, name: 'Test Contest') } + let(:contest_description) { create(:contest_description, :active, container: container, name: 'Test Contest') } let(:contest_instance) { create(:contest_instance, contest_description: contest_description, date_open: 2.months.ago, @@ -120,7 +120,7 @@ def last_entry_title it 'only shows assigned contests' do # Create another contest that the judge is not assigned to other_container = create(:container) - other_contest_description = create(:contest_description, container: other_container, name: 'Other Contest') + other_contest_description = create(:contest_description, :active, container: other_container, name: 'Other Contest') unassigned_contest = create(:contest_instance, contest_description: other_contest_description, date_open: 2.months.ago, @@ -163,7 +163,7 @@ def last_entry_title context 'when attempting to access unassigned contest data' do let(:unassigned_container) { create(:container) } - let(:unassigned_contest_description) { create(:contest_description, container: unassigned_container, name: 'Unassigned Contest') } + let(:unassigned_contest_description) { create(:contest_description, :active, container: unassigned_container, name: 'Unassigned Contest') } let(:unassigned_contest) { create(:contest_instance, contest_description: unassigned_contest_description, date_open: 2.months.ago, diff --git a/spec/system/judge_management_spec.rb b/spec/system/judge_management_spec.rb index 820d2ea6..c3a3718c 100644 --- a/spec/system/judge_management_spec.rb +++ b/spec/system/judge_management_spec.rb @@ -2,7 +2,7 @@ RSpec.describe 'Judge Management', type: :system do let(:container) { create(:container) } - let(:contest_description) { create(:contest_description, container: container) } + let(:contest_description) { create(:contest_description, :active, container: container) } let(:contest_instance) { create(:contest_instance, contest_description: contest_description) } let(:admin_user) { create(:user) } let(:admin_role) { create(:role, kind: 'Collection Administrator') } diff --git a/spec/system/judge_round_visibility_spec.rb b/spec/system/judge_round_visibility_spec.rb index 81dbde3b..f6ff55e9 100644 --- a/spec/system/judge_round_visibility_spec.rb +++ b/spec/system/judge_round_visibility_spec.rb @@ -4,7 +4,7 @@ include ApplicationHelper let(:container) { create(:container) } - let(:contest_description) { create(:contest_description, container: container) } + let(:contest_description) { create(:contest_description, :active, container: container) } let(:contest_instance) { create(:contest_instance, contest_description: contest_description, date_open: 5.days.ago, diff --git a/spec/system/judging_results_email_spec.rb b/spec/system/judging_results_email_spec.rb index 6ca16d80..2c6f6ef9 100644 --- a/spec/system/judging_results_email_spec.rb +++ b/spec/system/judging_results_email_spec.rb @@ -18,7 +18,7 @@ let(:department) { create(:department, name: 'Test Department') } let(:admin_user) { create(:user, :axis_mundi) } let(:container) { create(:container, name: 'Test Container', department: department, contact_email: 'admin@example.com') } - let(:contest_description) { create(:contest_description, name: 'Test Contest', container: container) } + let(:contest_description) { create(:contest_description, :active, name: 'Test Contest', container: container) } let(:contest_instance) { create(:contest_instance, contest_description: contest_description, date_open: 4.months.ago, date_closed: 3.months.ago) } # Create applicant user and entry diff --git a/spec/system/judging_rounds_spec.rb b/spec/system/judging_rounds_spec.rb index 2a3bd94a..287a1d30 100644 --- a/spec/system/judging_rounds_spec.rb +++ b/spec/system/judging_rounds_spec.rb @@ -5,7 +5,7 @@ let(:admin) { create(:user) } let(:container) { create(:container) } - let(:contest_description) { create(:contest_description, container: container) } + let(:contest_description) { create(:contest_description, :active, container: container) } let(:contest_instance) { create(:contest_instance, contest_description: contest_description, date_open: 2.days.ago, diff --git a/spec/system/profile_access_spec.rb b/spec/system/profile_access_spec.rb index 142af47a..c273754f 100644 --- a/spec/system/profile_access_spec.rb +++ b/spec/system/profile_access_spec.rb @@ -2,7 +2,7 @@ RSpec.describe 'Profile Access', type: :system do let(:container) { create(:container) } - let(:contest_description) { create(:contest_description, container: container) } + let(:contest_description) { create(:contest_description, :active, container: container) } let(:contest_instance) { create(:contest_instance, contest_description: contest_description) } let(:profile) { create(:profile) } let(:profile_owner) { profile.user }