From 83dc967a66caacb9c0b07e19edd4b8b6cefed33d Mon Sep 17 00:00:00 2001 From: Wilco van Beijnum Date: Fri, 11 Oct 2024 18:46:24 +0200 Subject: [PATCH 1/7] Fix user archival --- app/jobs/user_archive_job.rb | 13 ++++++++++++- app/models/form/response.rb | 2 +- spec/models/form/response_spec.rb | 16 ++++++++++++++++ 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/app/jobs/user_archive_job.rb b/app/jobs/user_archive_job.rb index 3a67d642..d254dd90 100644 --- a/app/jobs/user_archive_job.rb +++ b/app/jobs/user_archive_job.rb @@ -33,7 +33,18 @@ def migrate_keep_entities(user) key = entity_key(entity) records = entity.where({ key => user }) - records.each { |r| r.update({ key => global_archive_user }) && r.versions.destroy_all } + migrate_keep_entity_records(key, records) + end + end + + def migrate_keep_entity_records(key, records) + records.each do |r| + unless r.update({ key => global_archive_user }) + raise ActiveRecord::RecordInvalid.new(r), + "Failed to update #{r.class} record (ID: #{r.id})" + end + + r.versions.destroy_all end end diff --git a/app/models/form/response.rb b/app/models/form/response.rb index ad8016b9..052553ad 100644 --- a/app/models/form/response.rb +++ b/app/models/form/response.rb @@ -8,7 +8,7 @@ class Response < ApplicationRecord has_many :closed_question_answers, dependent: :destroy has_many :closed_questions, through: :closed_question_answers, source: :question - validates :user, uniqueness: { scope: :form } + validates :user, uniqueness: { scope: :form, unless: -> { user_id.zero? } } validate :form_allows_responses? after_create :update_completed_status! diff --git a/spec/models/form/response_spec.rb b/spec/models/form/response_spec.rb index 431c278f..4174ecb9 100644 --- a/spec/models/form/response_spec.rb +++ b/spec/models/form/response_spec.rb @@ -28,6 +28,22 @@ it { expect(another_response).not_to be_valid } end + context 'when the user is archived' do + let(:archived_user) { create(:user, id: 0) } + let(:another_response) do + build(:response, form: form, user: archived_user) + end + let(:form) { create(:form) } + + before do + create(:response, form: form, user: archived_user) + end + + it 'allows multiple responses' do + expect(another_response).to be_valid + end + end + context 'when form is not published' do before do response.form.update(respond_from: 2.days.ago, respond_until: Date.yesterday) From 82f2e039cb45f446b02ba86e0717d99c2bb84b6d Mon Sep 17 00:00:00 2001 From: Wilco van Beijnum Date: Fri, 11 Oct 2024 19:32:42 +0200 Subject: [PATCH 2/7] Fix method call on nil --- app/models/form/response.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/form/response.rb b/app/models/form/response.rb index 052553ad..36709d83 100644 --- a/app/models/form/response.rb +++ b/app/models/form/response.rb @@ -8,7 +8,7 @@ class Response < ApplicationRecord has_many :closed_question_answers, dependent: :destroy has_many :closed_questions, through: :closed_question_answers, source: :question - validates :user, uniqueness: { scope: :form, unless: -> { user_id.zero? } } + validates :user, uniqueness: { scope: :form, unless: -> { user_id == 0 } } validate :form_allows_responses? after_create :update_completed_status! From 77e3e392a8bc4aa836b8ece4afaf4bacd211ddfd Mon Sep 17 00:00:00 2001 From: Wilco van Beijnum Date: Fri, 11 Oct 2024 19:48:39 +0200 Subject: [PATCH 3/7] Fix null error --- app/models/form/response.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/form/response.rb b/app/models/form/response.rb index 36709d83..052553ad 100644 --- a/app/models/form/response.rb +++ b/app/models/form/response.rb @@ -8,7 +8,7 @@ class Response < ApplicationRecord has_many :closed_question_answers, dependent: :destroy has_many :closed_questions, through: :closed_question_answers, source: :question - validates :user, uniqueness: { scope: :form, unless: -> { user_id == 0 } } + validates :user, uniqueness: { scope: :form, unless: -> { user_id.zero? } } validate :form_allows_responses? after_create :update_completed_status! From bcd313cde6ddd18725dcb50e3e0befd181520a5b Mon Sep 17 00:00:00 2001 From: Wilco van Beijnum Date: Fri, 11 Oct 2024 20:01:40 +0200 Subject: [PATCH 4/7] Fix validation --- app/models/form/response.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/form/response.rb b/app/models/form/response.rb index 052553ad..1db4d073 100644 --- a/app/models/form/response.rb +++ b/app/models/form/response.rb @@ -8,7 +8,7 @@ class Response < ApplicationRecord has_many :closed_question_answers, dependent: :destroy has_many :closed_questions, through: :closed_question_answers, source: :question - validates :user, uniqueness: { scope: :form, unless: -> { user_id.zero? } } + validates :user, uniqueness: { scope: :form, unless: -> { !user.id.nil? && user.id.zero? } } validate :form_allows_responses? after_create :update_completed_status! From 4e599395564a9c98445d1243858ea041340ef177 Mon Sep 17 00:00:00 2001 From: Wilco van Beijnum Date: Fri, 11 Oct 2024 20:16:25 +0200 Subject: [PATCH 5/7] Fix user nil --- app/models/form/response.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/form/response.rb b/app/models/form/response.rb index 1db4d073..6fe497a2 100644 --- a/app/models/form/response.rb +++ b/app/models/form/response.rb @@ -8,7 +8,7 @@ class Response < ApplicationRecord has_many :closed_question_answers, dependent: :destroy has_many :closed_questions, through: :closed_question_answers, source: :question - validates :user, uniqueness: { scope: :form, unless: -> { !user.id.nil? && user.id.zero? } } + validates :user, uniqueness: { scope: :form, unless: -> { !user.nil? && !user.id.nil? && user.id.zero? } } validate :form_allows_responses? after_create :update_completed_status! From e5f78fc665091b6e985e190d55f9b0f20bf94e4c Mon Sep 17 00:00:00 2001 From: Wilco van Beijnum Date: Fri, 11 Oct 2024 21:01:06 +0200 Subject: [PATCH 6/7] Fix lint again --- app/models/form/response.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/models/form/response.rb b/app/models/form/response.rb index 6fe497a2..f5d769ec 100644 --- a/app/models/form/response.rb +++ b/app/models/form/response.rb @@ -8,7 +8,9 @@ class Response < ApplicationRecord has_many :closed_question_answers, dependent: :destroy has_many :closed_questions, through: :closed_question_answers, source: :question - validates :user, uniqueness: { scope: :form, unless: -> { !user.nil? && !user.id.nil? && user.id.zero? } } + validates :user, uniqueness: { scope: :form, unless: lambda { + !user.nil? && !user.id.nil? && user.id.zero? + } } validate :form_allows_responses? after_create :update_completed_status! From 12d4c7c6190c038021e9ffd6714b1cd143a5cca1 Mon Sep 17 00:00:00 2001 From: Wilco van Beijnum Date: Fri, 11 Oct 2024 21:54:56 +0200 Subject: [PATCH 7/7] Disable lint on line --- app/models/form/response.rb | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/models/form/response.rb b/app/models/form/response.rb index f5d769ec..38120719 100644 --- a/app/models/form/response.rb +++ b/app/models/form/response.rb @@ -8,9 +8,7 @@ class Response < ApplicationRecord has_many :closed_question_answers, dependent: :destroy has_many :closed_questions, through: :closed_question_answers, source: :question - validates :user, uniqueness: { scope: :form, unless: lambda { - !user.nil? && !user.id.nil? && user.id.zero? - } } + validates :user, uniqueness: { scope: :form, unless: -> { user_id == 0 } } # rubocop:disable Style/NumericPredicate validate :form_allows_responses? after_create :update_completed_status!