2024-03-19 09:10:40 -04:00
|
|
|
require "test_helper"
|
|
|
|
|
|
|
|
class TimeSeriesTest < ActiveSupport::TestCase
|
|
|
|
test "it can accept array of money values" do
|
|
|
|
series = TimeSeries.new([ { date: 1.day.ago.to_date, value: Money.new(100) }, { date: Date.current, value: Money.new(200) } ])
|
|
|
|
|
|
|
|
assert_equal Money.new(100), series.first.value
|
|
|
|
assert_equal Money.new(200), series.last.value
|
2024-04-22 06:30:42 -06:00
|
|
|
assert_equal "up", series.favorable_direction
|
2024-03-19 09:10:40 -04:00
|
|
|
assert_equal "up", series.trend.direction
|
|
|
|
assert_equal Money.new(100), series.trend.value
|
|
|
|
assert_equal 100.0, series.trend.percent
|
|
|
|
end
|
|
|
|
|
|
|
|
test "it can accept array of numeric values" do
|
|
|
|
series = TimeSeries.new([ { date: 1.day.ago.to_date, value: 100 }, { date: Date.current, value: 200 } ])
|
|
|
|
|
|
|
|
assert_equal 100, series.first.value
|
|
|
|
assert_equal 200, series.last.value
|
|
|
|
assert_equal 100, series.on(1.day.ago.to_date).value
|
2024-04-22 06:30:42 -06:00
|
|
|
assert_equal "up", series.favorable_direction
|
2024-03-19 09:10:40 -04:00
|
|
|
assert_equal "up", series.trend.direction
|
|
|
|
assert_equal 100, series.trend.value
|
|
|
|
assert_equal 100.0, series.trend.percent
|
|
|
|
end
|
|
|
|
|
2024-04-22 06:30:42 -06:00
|
|
|
test "when empty array passed, it returns empty series" do
|
2024-03-19 09:10:40 -04:00
|
|
|
series = TimeSeries.new([])
|
|
|
|
|
|
|
|
assert_nil series.first
|
|
|
|
assert_nil series.last
|
2024-04-22 06:30:42 -06:00
|
|
|
assert_equal({ values: [], trend: { favorable_direction: "up", direction: "flat", value: 0, percent: 0.0 }, favorable_direction: "up" }.to_json, series.to_json)
|
2024-03-19 09:10:40 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
test "money series can be serialized to json" do
|
|
|
|
expected_values = {
|
|
|
|
values: [
|
|
|
|
{
|
2024-03-19 14:34:35 -05:00
|
|
|
date: 1.day.ago.to_date,
|
2024-03-19 09:10:40 -04:00
|
|
|
value: { amount: "100.0", currency: "USD" },
|
2024-04-22 06:30:42 -06:00
|
|
|
trend: { favorable_direction: "up", direction: "flat", value: { amount: "0.0", currency: "USD" }, percent: 0.0 }
|
2024-03-19 09:10:40 -04:00
|
|
|
},
|
|
|
|
{
|
2024-03-19 14:34:35 -05:00
|
|
|
date: Date.current,
|
2024-03-19 09:10:40 -04:00
|
|
|
value: { amount: "200.0", currency: "USD" },
|
2024-04-22 06:30:42 -06:00
|
|
|
trend: { favorable_direction: "up", direction: "up", value: { amount: "100.0", currency: "USD" }, percent: 100.0 }
|
2024-03-19 09:10:40 -04:00
|
|
|
}
|
|
|
|
],
|
2024-04-22 06:30:42 -06:00
|
|
|
trend: { favorable_direction: "up", direction: "up", value: { amount: "100.0", currency: "USD" }, percent: 100.0 },
|
|
|
|
favorable_direction: "up"
|
2024-03-19 09:10:40 -04:00
|
|
|
}.to_json
|
|
|
|
|
|
|
|
series = TimeSeries.new([ { date: 1.day.ago.to_date, value: Money.new(100) }, { date: Date.current, value: Money.new(200) } ])
|
|
|
|
|
|
|
|
assert_equal expected_values, series.to_json
|
|
|
|
end
|
|
|
|
|
|
|
|
test "numeric series can be serialized to json" do
|
|
|
|
expected_values = {
|
2024-04-22 06:30:42 -06:00
|
|
|
values: [
|
|
|
|
{ date: 1.day.ago.to_date, value: 100, trend: { favorable_direction: "up", direction: "flat", value: 0, percent: 0.0 } },
|
|
|
|
{ date: Date.current, value: 200, trend: { favorable_direction: "up", direction: "up", value: 100, percent: 100.0 } }
|
|
|
|
],
|
|
|
|
trend: { favorable_direction: "up", direction: "up", value: 100, percent: 100.0 },
|
|
|
|
favorable_direction: "up"
|
2024-03-19 09:10:40 -04:00
|
|
|
}.to_json
|
|
|
|
|
|
|
|
series = TimeSeries.new([ { date: 1.day.ago.to_date, value: 100 }, { date: Date.current, value: 200 } ])
|
|
|
|
|
|
|
|
assert_equal expected_values, series.to_json
|
|
|
|
end
|
|
|
|
end
|