Skip to content

Commit

Permalink
Changed some premium service methods to class methods
Browse files Browse the repository at this point in the history
  • Loading branch information
kimenye committed Mar 26, 2015
1 parent 28bd63c commit 800bd67
Show file tree
Hide file tree
Showing 6 changed files with 40 additions and 25 deletions.
3 changes: 1 addition & 2 deletions app/models/agent.rb
Expand Up @@ -37,8 +37,7 @@ def is_airtel?
end

def is_fd
premium_service = PremiumService.new
premium_service.is_fx_code code
PremiumService.is_fx_code code
end

def is_neither_fd_nor_stl
Expand Down
3 changes: 1 addition & 2 deletions app/models/device.rb
Expand Up @@ -96,10 +96,9 @@ def self.month_ranges
end

def get_insurance_value_by_month_and_year (code, month_of_purchase, year_of_purchase)
service = PremiumService.new
time_of_purchase = "#{month_of_purchase} #{year_of_purchase}"
month_ranges = Device.month_ranges
if (service.is_fx_code(code) || service.is_stl_code(code)) && month_ranges[0..12].include?(time_of_purchase)
if (PremiumService.is_fx_code(code) || PremiumService.is_stl_code(code)) && month_ranges[0..12].include?(time_of_purchase)
return catalog_price
else
if month_ranges[0..6].include?(time_of_purchase)
Expand Down
1 change: 1 addition & 0 deletions config/environments/test.rb
Expand Up @@ -36,4 +36,5 @@

# Print deprecation notices to the stderr
config.active_support.deprecation = :stderr
config.eager_load = false
end
14 changes: 7 additions & 7 deletions lib/premium_service.rb
Expand Up @@ -19,9 +19,9 @@ def is_insurable_by_month_and_year month_of_purchase, year_of_purchase
end

def calculate_insurance_value catalog_price, sales_code, year_of_purchase
if is_fx_code(sales_code) || is_stl_code(sales_code)
if PremiumService.is_fx_code(sales_code) || PremiumService.is_stl_code(sales_code)
return catalog_price
elsif !is_fx_code(sales_code) && !is_stl_code(sales_code) && year_of_purchase == Time.now.year
elsif !PremiumService.is_fx_code(sales_code) && !PremiumService.is_stl_code(sales_code) && year_of_purchase == Time.now.year
return 0.875 * catalog_price
else
return 0.375 * catalog_price
Expand Down Expand Up @@ -92,7 +92,7 @@ def calculate_levy premium
end

def calculate_annual_premium agent_code, insurance_value, yop, add_mpesa = true, add_sms_charges = true, round_off = true, add_levy = true
raw = calculate_premium_rate(agent_code, yop) * insurance_value
raw = PremiumService.calculate_premium_rate(agent_code, yop) * insurance_value
raw = raw * 1.0045 if add_levy
raw = [raw.round, minimum_fee(agent_code, yop)].max
raw += 15 if add_sms_charges #sms charges
Expand Down Expand Up @@ -129,15 +129,15 @@ def round_off (number, nearest = 5)

def minimum_fee agent_code, yop
fee = 595
fee = 899 if (is_fx_code(agent_code) && yop == Time.now.year)
fee = 899 if (PremiumService.is_fx_code(agent_code) && yop == Time.now.year)
fee
end

def is_stl_code code
def self.is_stl_code code
!code.nil? && code.start_with?("STL")
end

def is_fx_code code
def self.is_fx_code code
!code.nil? && (code.start_with?("FXP") || code.start_with?("TSK") || code.start_with?("PLK") || code.start_with?("NVS") )
end

Expand Down Expand Up @@ -175,7 +175,7 @@ def get_message_type message
end
end

def calculate_premium_rate agent_code, yop
def self.calculate_premium_rate agent_code, yop
rate = 0.1
rate = 0.095 if (is_fx_code(agent_code) && yop == Time.now.year)
rate
Expand Down
18 changes: 18 additions & 0 deletions test/models/enquiry_test.rb
Expand Up @@ -40,6 +40,24 @@ class EnquiryTest < ActiveSupport::TestCase
assert_equal "+254722123456", enquiry.phone_number
end

test 'Returns correct ID types' do
enq = Enquiry.new({ id_type: 'Passport' })
assert enq.is_passport?

enq.id_type = 'National ID'
assert enq.is_id?
end

test 'Returns correct name' do
enq = Enquiry.new()
assert_equal 'Enquiry', enq.name
end

test 'Returns whether enquiry is an airtel enquiry' do
enq = Enquiry.new({ enquiry_type: 'Airtel' })
assert enq.is_airtel?
end

# test "Should prepend insured device phone numbers with a +" do
# enquiry = Enquiry.new(phone_number: " 254 722123456 ", source: "SMS")
# enquiry.save!
Expand Down
26 changes: 12 additions & 14 deletions test/unit/premium_service_test.rb
Expand Up @@ -24,17 +24,16 @@ class PremiumServiceTest < ActiveSupport::TestCase
end

test "Should return true for Fone Direct outlets" do
service = PremiumService.new
result = service.is_fx_code "FXP002"
result = PremiumService.is_fx_code "FXP002"
assert_equal result, true, "Should return true for FX codes"

result = service.is_fx_code "TSK001"
result = PremiumService.is_fx_code "TSK001"
assert_equal result, true, "Should return true for TSK codes"

result = service.is_fx_code "NVS008"
result = PremiumService.is_fx_code "NVS008"
assert_equal result, true, "Should return true for NVS codes"

result = service.is_fx_code "PLK004"
result = PremiumService.is_fx_code "PLK004"
assert_equal result, true, "Should return true for PLK codes"
end

Expand All @@ -45,9 +44,8 @@ class PremiumServiceTest < ActiveSupport::TestCase
end

test "An STL code starts with STL" do
service = PremiumService.new
assert_equal true, service.is_stl_code("STL001")
assert_equal false, service.is_stl_code("FXP000")
assert_equal true, PremiumService.is_stl_code("STL001")
assert_equal false, PremiumService.is_stl_code("FXP000")
end

test "Should not insure phones purchased more than a year ago if no sales code is provided" do
Expand Down Expand Up @@ -85,7 +83,7 @@ class PremiumServiceTest < ActiveSupport::TestCase
percentage_after_discount = (100 - agent.discount) / 100
insurance_value = service.calculate_insurance_value(800, agent.code , yop)
annual_premium = service.calculate_annual_premium(agent.code, insurance_value, yop)
raw = service.calculate_premium_rate(agent.code, yop) * insurance_value
raw = PremiumService.calculate_premium_rate(agent.code, yop) * insurance_value
raw = 1.0045 * raw
raw = [raw.round, service.minimum_fee(agent.code, yop)].max
raw += 15
Expand All @@ -101,18 +99,18 @@ class PremiumServiceTest < ActiveSupport::TestCase
end

test "The correct premium rate is returned based on the sales agent code and year of purchase" do
service = PremiumService.new
# service = PremiumService.new

rate = service.calculate_premium_rate "FXP000", Time.now.year
rate = PremiumService.calculate_premium_rate "FXP000", Time.now.year
assert rate == 0.095, "Premium rate should be 9.5% for FX codes if year of purchase is current year"

rate = service.calculate_premium_rate "83000", Time.now.year
rate = PremiumService.calculate_premium_rate "83000", Time.now.year
assert rate == 0.1, "Premium rate should be 10% for non FX codes"

rate = service.calculate_premium_rate nil, Time.now.year
rate = PremiumService.calculate_premium_rate nil, Time.now.year
assert rate == 0.1, "Premium rate should be 10% for empty"

rate = service.calculate_premium_rate "FXP000", (Time.now.year - 1)
rate = PremiumService.calculate_premium_rate "FXP000", (Time.now.year - 1)
assert rate == 0.1, "Premium rate should be 10% for FX codes if year of purchase is previous year"
end

Expand Down

0 comments on commit 800bd67

Please sign in to comment.