diff --git a/app/models/request.rb b/app/models/request.rb index 555659c6..75e83727 100644 --- a/app/models/request.rb +++ b/app/models/request.rb @@ -190,13 +190,6 @@ def date_calculator ) end - # Calculates the new late due date for an extension based on course settings. - # Returns nil if the assignment has no late due date. - # Delegates to AssignmentDateCalculator for the actual calculation. - def calculate_new_late_due_date - date_calculator.late_due_date - end - def reject(processed_user_id) update(status: 'denied', last_processed_by_user_id: processed_user_id.id) # Only send email if the person processing is the same as the request's user @@ -204,25 +197,6 @@ def reject(processed_user_id) true end - # Based on this request, set the right 3 assignment dates - # Always keep the assignment release date the same - # Calculate the delta from the original due date to the requested due date - # Set the due date to the requested due date - # If the current (approval) time is beyond the requested due date, - # then extend the requested due date by the delta with a max of 3 days - # If the flag EXTEND_LATE_DUE_DATE is set, then set the late due date to - # the delta beyond the requested due date, otherwise keep it the same - # If the flag EXTEND_LATE_DUE_DATE is not set, ensure that the late due date - # is at least as late as the requested due date - def calculate_new_assignment_dates - { - release_date: assignment_release_date, - due_date: requested_due_date, - late_due_date: late_due_date, - message: approval_message - } - end - def send_email_response return unless course.course_settings&.enable_emails diff --git a/spec/models/request_spec.rb b/spec/models/request_spec.rb index 65f893b9..0cfb608a 100644 --- a/spec/models/request_spec.rb +++ b/spec/models/request_spec.rb @@ -611,150 +611,6 @@ end end - describe '#calculate_new_late_due_date' do - it 'delegates to AssignmentDateCalculator#late_due_date' do - mock_calculator = instance_double(AssignmentDateCalculator) - expected_date = 5.days.from_now - allow(mock_calculator).to receive(:late_due_date).and_return(expected_date) - allow(request).to receive(:date_calculator).and_return(mock_calculator) - - expect(request.calculate_new_late_due_date).to eq(expected_date) - end - - # Integration tests to ensure the delegation works correctly - context 'integration with AssignmentDateCalculator' do - let(:original_due_date) { Time.zone.parse('2025-01-15 23:59:00') } - let(:original_late_due_date) { Time.zone.parse('2025-01-17 23:59:00') } - let(:requested_due_date) { Time.zone.parse('2025-01-18 23:59:00') } - - let(:assignment_with_late_due_date) do - Assignment.create!( - name: 'Assignment with Late Due Date', - course_to_lms_id: course.course_to_lms(1).id, - external_assignment_id: 'ext2', - enabled: true, - due_date: original_due_date, - late_due_date: original_late_due_date - ) - end - - let(:assignment_without_late_due_date) do - Assignment.create!( - name: 'Assignment without Late Due Date', - course_to_lms_id: course.course_to_lms(1).id, - external_assignment_id: 'ext3', - enabled: true, - due_date: original_due_date, - late_due_date: nil - ) - end - - let(:request_with_late_due_date) do - described_class.create!( - user: user, - course: course, - assignment: assignment_with_late_due_date, - reason: 'Need more time', - requested_due_date: requested_due_date - ) - end - - let(:request_without_late_due_date) do - described_class.create!( - user: user, - course: course, - assignment: assignment_without_late_due_date, - reason: 'Need more time', - requested_due_date: requested_due_date - ) - end - - context 'when assignment has no late due date' do - it 'returns nil' do - expect(request_without_late_due_date.calculate_new_late_due_date).to be_nil - end - end - - context 'when extend_late_due_date setting is true (default)' do - before do - CourseSettings.create!( - course: course, - enable_extensions: true, - extend_late_due_date: true - ) - end - - it 'shifts the late due date by the same delta as the extension' do - # Original due date: Jan 15, Late due date: Jan 17 (2 days later) - # Extension delta: Jan 18 - Jan 15 = 3 days - # New late due date: Jan 17 + 3 days = Jan 20 - result = request_with_late_due_date.calculate_new_late_due_date - expected = Time.zone.parse('2025-01-20 23:59:00') - expect(result).to be_within(1.second).of(expected) - end - end - context 'when extend_late_due_date setting is false' do - before do - CourseSettings.create!( - course: course, - enable_extensions: true, - extend_late_due_date: false - ) - end - - context 'when original late due date is later than extended due date' do - let(:requested_due_date) { Time.zone.parse('2025-01-16 23:59:00') } - - it 'returns the original late due date' do - # Extended due date (Jan 16) is before late due date (Jan 17) - # So return the original late due date - result = request_with_late_due_date.calculate_new_late_due_date - expect(result).to eq(original_late_due_date) - end - end - - context 'when extended due date is later than original late due date' do - let(:requested_due_date) { Time.zone.parse('2025-01-20 23:59:00') } - - it 'returns the extended due date' do - # Extended due date (Jan 20) is after late due date (Jan 17) - # So return the extended due date - result = request_with_late_due_date.calculate_new_late_due_date - expect(result).to eq(requested_due_date) - end - end - end - - context 'when extend_late_due_date setting is nil (defaults to true)' do - before do - # Create settings without explicitly setting extend_late_due_date - # This simulates existing courses before the migration - cs = CourseSettings.create!( - course: course, - enable_extensions: true - ) - # Manually set to nil to simulate pre-migration state - cs.update_column(:extend_late_due_date, nil) - end - - it 'defaults to shifting the late due date by the extension delta' do - result = request_with_late_due_date.calculate_new_late_due_date - expected = Time.zone.parse('2025-01-20 23:59:00') - expect(result).to be_within(1.second).of(expected) - end - end - - context 'when course has no course settings' do - it 'defaults to shifting the late due date (extend_late_due_date = true behavior)' do - # No course settings means nil, which defaults to true - result = request_with_late_due_date.calculate_new_late_due_date - expected = Time.zone.parse('2025-01-20 23:59:00') - expect(result).to be_within(1.second).of(expected) - end - end - end - end - describe '#send_email_response' do before do ENV['DEFAULT_FROM_EMAIL'] = 'flextensions@berkeley.edu' diff --git a/spec/services/assignment_date_calculator_spec.rb b/spec/services/assignment_date_calculator_spec.rb index 06feeee0..3690597b 100644 --- a/spec/services/assignment_date_calculator_spec.rb +++ b/spec/services/assignment_date_calculator_spec.rb @@ -214,27 +214,6 @@ end end - context 'when extend_late_due_date setting is nil (defaults to true)' do - it 'defaults to shifting the late due date by the extension delta' do - # Create settings without explicitly setting extend_late_due_date - cs = CourseSettings.create!( - course: course, - enable_extensions: true - ) - # Manually set to nil to simulate pre-migration state - cs.update_column(:extend_late_due_date, nil) - - calculator = described_class.new( - assignment: assignment_with_late_due_date, - request: request_with_late_due_date, - course_settings: cs - ) - - expected = Time.zone.parse('2025-01-20 23:59:00') - expect(calculator.late_due_date).to be_within(1.second).of(expected) - end - end - context 'when course_settings is nil' do it 'defaults to shifting the late due date (extend_late_due_date = true behavior)' do calculator = described_class.new(