diff --git a/app/models/user.rb b/app/models/user.rb index 1d17b60..3045c69 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -43,10 +43,10 @@ class User < ActiveRecord::Base def calculate_frecency num_orders = Rails.application.config.frecency_num_orders - last_timestamps = self.orders.order(created_at: :desc) - .limit(num_orders) - .pluck(:created_at) - self.frecency = last_timestamps.map(&:to_i).sum / num_orders + last_datetimes = self.orders.order(created_at: :desc) + .limit(num_orders) + .pluck(:created_at) + self.frecency = last_datetimes.map(&:to_time).map(&:to_i).sum / num_orders self.save end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 7aab751..f21a132 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -133,4 +133,23 @@ describe User do expect(User.publik).to eq([@user, user]) end end + + describe 'frecency' do + it 'should be recalculated on creating an order' do + expect(@user.frecency).to eq 0 + create :order, user: @user + expect(@user.frecency).to_not eq 0 + end + + it 'should be valid' do + dates = [Date.today.to_time, Date.yesterday.to_time] + dates.each do |date| + create :order, user: @user, created_at: date + end + @user.reload + num_orders = Rails.application.config.frecency_num_orders + frecency = dates.last(num_orders).map(&:to_i).sum/num_orders + expect(@user.frecency).to eq(frecency) + end + end end