require 'test_helper' module Workarea module Admin module Insights class ProductViewModelTest < TestCase def test_average_price_data Metrics::ProductByDay.inc( key: { product_id: 'foo' }, at: Time.zone.local(2018, 10, 26), orders: 1, units_sold: 2, merchandise: 10.to_m, discounts: 0.to_m, revenue: 10.to_m ) Metrics::ProductByDay.inc( key: { product_id: 'foo' }, at: Time.zone.local(2018, 10, 27), orders: 1, units_sold: 2, merchandise: 10.to_m, discounts: 0.to_m, revenue: 10.to_m ) Metrics::ProductByDay.inc( key: { product_id: 'foo' }, at: Time.zone.local(2018, 10, 28), orders: 2, units_sold: 4, merchandise: 20.to_m, discounts: -5.to_m, revenue: 15.to_m ) Metrics::ProductByDay.inc( key: { product_id: 'foo' }, at: Time.zone.local(2018, 10, 29), orders: 3, units_sold: 6, merchandise: 30.to_m, discounts: -3.to_m, revenue: 27.to_m ) Metrics::ProductByDay.inc( key: { product_id: 'bar' }, at: Time.zone.local(2018, 10, 27), orders: 2, units_sold: 3, merchandise: 11.to_m, discounts: 0.to_m, revenue: 11.to_m ) Metrics::ProductByDay.inc( key: { product_id: 'bar' }, at: Time.zone.local(2018, 10, 28), orders: 3, units_sold: 5, merchandise: 21.to_m, discounts: -6.to_m, revenue: 15.to_m ) Metrics::ProductByDay.inc( key: { product_id: 'bar' }, at: Time.zone.local(2018, 10, 29), orders: 4, units_sold: 7, merchandise: 31.to_m, discounts: -4.to_m, revenue: 27.to_m ) product = create_product(id: 'foo') view_model = ProductViewModel.wrap(product, starts_at: '2018-10-28', ends_at: '2018-10-29') assert_equal(11.6, view_model.average_price) assert_equal(10, view_model.previous_average_price) assert_in_delta(15.999, view_model.average_price_percent_change) view_model = ProductViewModel.wrap(product, starts_at: '2018-10-29', ends_at: '2018-10-30') assert_equal(11, view_model.average_price) assert_in_delta(11.666, view_model.previous_average_price) assert_in_delta(-5.714, view_model.average_price_percent_change) end end end end end