mirror of
https://github.com/maybe-finance/maybe.git
synced 2025-07-24 15:49:39 +02:00
Refactor TimeSeries
artifacts (#651)
* Reindent TimeSeries classes * Fix spacing in time series tests * Remove trend tests where current is nil I think if we've gotten this far with a nil value for current, there's a data integrity problem. If we allow this, we'll have to be very defensive in our code. Best to raise and fix early. * Reindent Money class * Refactor TimeSeries artifacts * Use as_json in TimeSeries * Bring back tests for trends where current is nil * Bring back trend test * Correctly enumerate trend test * Use favorable_direction for trend_styles helper * Make trend public in TimeSeries::Value * Allow nil current values in trends I think I might've gotten it wrong before, nils might appear in trends if values are unavailable for snapshots * Clean up TimeSeries::Trend * Skip trend values same class validations if any values are nil * Refactor Money * Remove object parsing in TimeSeries::Value We're only every passing hashes
This commit is contained in:
parent
fe2a2ac3f9
commit
fc3ade392a
9 changed files with 258 additions and 206 deletions
|
@ -6,7 +6,7 @@ class TimeSeriesTest < ActiveSupport::TestCase
|
|||
|
||||
assert_equal Money.new(100), series.first.value
|
||||
assert_equal Money.new(200), series.last.value
|
||||
assert_equal :normal, series.type
|
||||
assert_equal "up", series.favorable_direction
|
||||
assert_equal "up", series.trend.direction
|
||||
assert_equal Money.new(100), series.trend.value
|
||||
assert_equal 100.0, series.trend.percent
|
||||
|
@ -18,21 +18,18 @@ class TimeSeriesTest < ActiveSupport::TestCase
|
|||
assert_equal 100, series.first.value
|
||||
assert_equal 200, series.last.value
|
||||
assert_equal 100, series.on(1.day.ago.to_date).value
|
||||
assert_equal :normal, series.type
|
||||
assert_equal "up", series.favorable_direction
|
||||
assert_equal "up", series.trend.direction
|
||||
assert_equal 100, series.trend.value
|
||||
assert_equal 100.0, series.trend.percent
|
||||
end
|
||||
|
||||
test "when nil or empty array passed, it returns empty series" do
|
||||
series = TimeSeries.new(nil)
|
||||
assert_equal [], series.values
|
||||
|
||||
test "when empty array passed, it returns empty series" do
|
||||
series = TimeSeries.new([])
|
||||
|
||||
assert_nil series.first
|
||||
assert_nil series.last
|
||||
assert_equal({ values: [], trend: { type: "normal", direction: "flat", value: 0, percent: 0.0 }, type: "normal" }.to_json, series.to_json)
|
||||
assert_equal({ values: [], trend: { favorable_direction: "up", direction: "flat", value: 0, percent: 0.0 }, favorable_direction: "up" }.to_json, series.to_json)
|
||||
end
|
||||
|
||||
test "money series can be serialized to json" do
|
||||
|
@ -41,16 +38,16 @@ class TimeSeriesTest < ActiveSupport::TestCase
|
|||
{
|
||||
date: 1.day.ago.to_date,
|
||||
value: { amount: "100.0", currency: "USD" },
|
||||
trend: { type: "normal", direction: "flat", value: { amount: "0.0", currency: "USD" }, percent: 0.0 }
|
||||
trend: { favorable_direction: "up", direction: "flat", value: { amount: "0.0", currency: "USD" }, percent: 0.0 }
|
||||
},
|
||||
{
|
||||
date: Date.current,
|
||||
value: { amount: "200.0", currency: "USD" },
|
||||
trend: { type: "normal", direction: "up", value: { amount: "100.0", currency: "USD" }, percent: 100.0 }
|
||||
trend: { favorable_direction: "up", direction: "up", value: { amount: "100.0", currency: "USD" }, percent: 100.0 }
|
||||
}
|
||||
],
|
||||
trend: { type: "normal", direction: "up", value: { amount: "100.0", currency: "USD" }, percent: 100.0 },
|
||||
type: "normal"
|
||||
trend: { favorable_direction: "up", direction: "up", value: { amount: "100.0", currency: "USD" }, percent: 100.0 },
|
||||
favorable_direction: "up"
|
||||
}.to_json
|
||||
|
||||
series = TimeSeries.new([ { date: 1.day.ago.to_date, value: Money.new(100) }, { date: Date.current, value: Money.new(200) } ])
|
||||
|
@ -60,12 +57,12 @@ class TimeSeriesTest < ActiveSupport::TestCase
|
|||
|
||||
test "numeric series can be serialized to json" do
|
||||
expected_values = {
|
||||
values: [
|
||||
{ date: 1.day.ago.to_date, value: 100, trend: { type: "normal", direction: "flat", value: 0, percent: 0.0 } },
|
||||
{ date: Date.current, value: 200, trend: { type: "normal", direction: "up", value: 100, percent: 100.0 } }
|
||||
],
|
||||
trend: { type: "normal", direction: "up", value: 100, percent: 100.0 },
|
||||
type: "normal"
|
||||
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"
|
||||
}.to_json
|
||||
|
||||
series = TimeSeries.new([ { date: 1.day.ago.to_date, value: 100 }, { date: Date.current, value: 200 } ])
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue