Skip to content

Commit ba8dbf0

Browse files
Dennis DeliDennis Deli
authored andcommitted
fixed credit in code creation
1 parent 4d5bd3d commit ba8dbf0

6 files changed

Lines changed: 45 additions & 5 deletions

File tree

app/controllers/courses_controller.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,8 @@ def info_parts(info)
110110
faculty = (info.faculty_abrev.presence || info.faculty_short.presence || info.faculty).to_s.upcase.gsub(/[^A-Z]/, '')
111111
subject = (info.subject_abrev.presence || info.subject).to_s.upcase.gsub(/[^A-Z]/, '')
112112
number = info.course_number.to_s.upcase
113-
credits = info.credit.present? ? sprintf('%.2f', info.credit.to_f) : '0.00'
113+
credit_value = info.credit.presence || '0'
114+
credits = Course.normalize_code_credit(credit_value)
114115
{
115116
faculty: faculty,
116117
subject: subject,

app/controllers/request_wizard_controller.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,8 @@ def parts_from_info(info)
142142
faculty = (info.faculty_abrev.presence || info.faculty_short.presence || info.faculty).to_s.upcase.gsub(/[^A-Z]/, '')
143143
subject = (info.subject_abrev.presence || info.subject).to_s.upcase.gsub(/[^A-Z]/, '')
144144
number = info.course_number.to_s.upcase
145-
credits = info.credit.present? ? format('%.2f', info.credit.to_f) : '0.00'
145+
credit_value = info.credit.presence || '0'
146+
credits = Course.normalize_code_credit(credit_value)
146147
term = normalize_term(info.study_session)
147148
year = info.academic_year.to_s.split('-').first # supports "2024-2025"
148149
section = info.section.to_s.upcase

app/controllers/requests_controller.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,8 @@ def parts_from_info(info)
253253
faculty = (info.faculty_abrev.presence || info.faculty_short.presence || info.faculty).to_s.upcase.gsub(/[^A-Z]/, '')
254254
subject = (info.subject_abrev.presence || info.subject).to_s.upcase.gsub(/[^A-Z]/, '')
255255
number = info.course_number.to_s.upcase
256-
credits = info.credit.present? ? format('%.2f', info.credit.to_f) : '0.00'
256+
credit_value = info.credit.presence || '0'
257+
credits = Course.normalize_code_credit(credit_value)
257258
term = normalize_term(info.study_session)
258259
year = info.academic_year.to_s.split('-').first
259260
section = info.section.to_s.upcase

app/models/course.rb

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,20 @@ class Course < ApplicationRecord
3535
TERM_CREDITS = %w[1 3 4 6 9].freeze
3636
SUBJECTS ||= IO.readlines("#{Rails.root}/lib/course_subjects.txt").collect(&:strip)
3737

38+
def self.normalize_code_credit(value)
39+
str = value.to_s.strip
40+
return '' if str.blank?
41+
42+
numeric_pattern = /\A-?\d+(?:\.\d+)?\z/
43+
return str unless str.match?(numeric_pattern)
44+
45+
integer_part, decimal_part = str.split('.', 2)
46+
return integer_part if decimal_part.blank? || decimal_part.match?(/\A0+\z/)
47+
48+
decimal_part = decimal_part.sub(/0+\z/, '')
49+
decimal_part.blank? ? integer_part : "#{integer_part}.#{decimal_part}"
50+
end
51+
3852
# VALIDATIONS
3953
validates_uniqueness_of :code, message: 'Duplicate Course Code, Someone Has Made a Request For that Course.'
4054

@@ -113,7 +127,7 @@ def credits
113127
end
114128

115129
def credits=(credits)
116-
insert_into_code(6, credits)
130+
insert_into_code(6, self.class.normalize_code_credit(credits))
117131
end
118132

119133
def section
@@ -171,4 +185,5 @@ def update_code_columns
171185
self[:code_credits] = credits
172186
self[:code_section] = section
173187
end
188+
174189
end

test/controllers/requests_controller_test.rb

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ class RequestsControllerTest < ActionDispatch::IntegrationTest
162162

163163
r = get_instance_var(:request)
164164
assert_equal Request::REMOVED, r.status
165-
end
165+
end
166166

167167
should 'destroy request' do
168168
request = create(:request)
@@ -174,6 +174,18 @@ class RequestsControllerTest < ActionDispatch::IntegrationTest
174174
assert_redirected_to requests_path
175175
end
176176

177+
should 'build course code without decimal credit segment' do
178+
info = create(:course_info, credit: 3)
179+
controller = RequestsController.new
180+
181+
parts = controller.send(:parts_from_info, info)
182+
assert_equal '3', parts[:credits], 'Credit part should be sanitized'
183+
184+
code = controller.send(:build_code_from_info, parts, info.instructor_name)
185+
assert_includes code, '__3_', 'Code should embed sanitized credits'
186+
refute_includes code, '__3.00_', 'Code should not contain decimal credits'
187+
end
188+
177189
## ADDITIONAL ACTIONS TESTS ##
178190

179191
should 'change status' do

test/models/course_test.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,16 @@ class CourseTest < ActiveSupport::TestCase
132132
assert_equal '6', course.credits, 'Credits should now be 6'
133133
end
134134

135+
should 'remove trailing zeros when updating credits segment' do
136+
course = create(:course, code: '2013_GL_ECON_S1_2500__3_A')
137+
138+
course.credits = '3.00'
139+
140+
assert_equal '3', course.credits, 'Credits should strip trailing zeros'
141+
assert_includes course.code, '__3_', 'Course code should embed sanitized credits'
142+
refute_includes course.code, '__3.00_', 'Course code should not include decimal credits'
143+
end
144+
135145
should 'set and return a proper section' do
136146
course = create(:course, code: '2013_GL_ECON_S1_2500__3_A')
137147

0 commit comments

Comments
 (0)