Skip to content

Commit 56f9b9a

Browse files
committed
TICKET-578: Change tags and split_pdf_logs to restrict_with_exception
1 parent 34b11c0 commit 56f9b9a

2 files changed

Lines changed: 38 additions & 7 deletions

File tree

app/models/instructor.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,6 @@ class Instructor < Role
99
has_many :annotation_texts, dependent: :nullify, inverse_of: :creator, foreign_key: :creator_id
1010
has_many :annotations, dependent: :nullify, inverse_of: :creator, foreign_key: :creator_id
1111
has_many :notes, dependent: :restrict_with_exception, inverse_of: :role, foreign_key: :creator_id
12-
has_many :tags, dependent: :destroy, foreign_key: :role_id, inverse_of: :role
13-
has_many :split_pdf_logs, dependent: :destroy, foreign_key: :role_id, inverse_of: :role
12+
has_many :tags, dependent: :restrict_with_exception, foreign_key: :role_id, inverse_of: :role
13+
has_many :split_pdf_logs, dependent: :restrict_with_exception, foreign_key: :role_id, inverse_of: :role
1414
end

spec/controllers/instructors_controller_spec.rb

Lines changed: 36 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -178,11 +178,46 @@
178178
end
179179
end
180180

181+
context 'when instructor has associated tags' do
182+
let(:admin) { create(:admin_user) }
183+
let(:target_instructor) { create(:instructor, course: course) }
184+
185+
before do
186+
create(:tag, role: target_instructor)
187+
delete_as admin, :destroy, params: { course_id: course.id, id: target_instructor.id }
188+
end
189+
190+
it 'does not delete the instructor and returns a conflict response' do
191+
expect(Instructor.exists?(target_instructor.id)).to be(true)
192+
expect(flash[:error]).to contain_message(
193+
I18n.t('flash.instructors.destroy.restricted', user_name: target_instructor.user_name, message: '')
194+
)
195+
expect(response).to have_http_status(:conflict)
196+
end
197+
end
198+
199+
context 'when instructor has associated split_pdf_logs' do
200+
let(:admin) { create(:admin_user) }
201+
let(:target_instructor) { create(:instructor, course: course) }
202+
203+
before do
204+
create(:split_pdf_log, role: target_instructor)
205+
delete_as admin, :destroy, params: { course_id: course.id, id: target_instructor.id }
206+
end
207+
208+
it 'does not delete the instructor and returns a conflict response' do
209+
expect(Instructor.exists?(target_instructor.id)).to be(true)
210+
expect(flash[:error]).to contain_message(
211+
I18n.t('flash.instructors.destroy.restricted', user_name: target_instructor.user_name, message: '')
212+
)
213+
expect(response).to have_http_status(:conflict)
214+
end
215+
end
216+
181217
context 'succeeds for instructor deletion' do
182218
let(:admin) { create(:admin_user) }
183219
let!(:target_instructor) { create(:instructor, course: course) }
184220
let!(:annotation) { create(:text_annotation, creator: target_instructor) }
185-
let!(:tag) { create(:tag, role: target_instructor) }
186221

187222
before do
188223
delete_as admin, :destroy, params: { course_id: course.id, id: target_instructor.id }
@@ -201,10 +236,6 @@
201236
expect(annotation.creator_id).to be_nil
202237
expect(Annotation.exists?(annotation.id)).to be(true)
203238
end
204-
205-
it 'deletes associated tags' do
206-
expect(Tag.exists?(tag.id)).to be(false)
207-
end
208239
end
209240
end
210241

0 commit comments

Comments
 (0)