Skip to content

Commit 6200dee

Browse files
committed
Add tests for DateScale and DateTimeScale start/step options
1 parent 957e40c commit 6200dee

3 files changed

Lines changed: 65 additions & 4 deletions

File tree

lib/plox/date_time_scale.ex

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ defmodule Plox.DateTimeScale do
7171
7272
## Options
7373
74-
* `:step` - The step interval. Can be an integer number of seconds,
74+
* `:step` - The step interval. Can be a non-zero integer number of seconds,
7575
or a tuple of `{integer, :second | :minute | :hour | :day}`.
7676
Defaults to `{60, :second}`.
7777
@@ -93,14 +93,14 @@ defmodule Plox.DateTimeScale do
9393
def values(%{first: %date_time_module{}} = scale, opts) do
9494
step_seconds =
9595
case Map.get(opts, :step, {60, :second}) do
96-
seconds when is_integer(seconds) -> seconds
96+
seconds when is_integer(seconds) and seconds > 0 -> seconds
9797
{seconds, :second} -> seconds
9898
{minutes, :minute} -> minutes * 60
9999
{hours, :hour} -> hours * 3600
100100
{days, :day} -> days * 86_400
101101
_ ->
102102
raise ArgumentError,
103-
message: "DateTimeScale: step must be an integer or a {integer, :second | :minute | :hour | :day} tuple"
103+
message: "DateTimeScale: step must be a non-zero integer or a {integer, :second | :minute | :hour | :day} tuple"
104104
end
105105

106106
if date_time_module == DateTime and scale.first.time_zone != "Etc/UTC" and

test/plox/date_scale_test.exs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ defmodule Plox.DateScaleTest do
3838
describe "values/2" do
3939
test "with default step (1d)" do
4040
scale = DateScale.new(Date.range(~D[2019-01-01], ~D[2019-01-03]))
41-
assert %Date.Range{first: ~D[2019-01-01], last: ~D[2019-01-03], step: 1} = Scale.values(scale)
41+
assert Scale.values(scale) == Date.range(~D[2019-01-01], ~D[2019-01-03], 1)
4242
end
4343

4444
test "with positive custom step in days" do
@@ -58,6 +58,24 @@ defmodule Plox.DateScaleTest do
5858
Scale.values(scale, %{step: 0})
5959
end
6060
end
61+
62+
test "with default start" do
63+
scale = DateScale.new(Date.range(~D[2019-01-01], ~D[2019-01-05]))
64+
assert Scale.values(scale) == Date.range(~D[2019-01-01], ~D[2019-01-05])
65+
end
66+
67+
test "with custom start" do
68+
scale = DateScale.new(Date.range(~D[2019-01-01], ~D[2019-01-05]))
69+
assert Scale.values(scale, %{start: ~D[2019-01-03]}) == Date.range(~D[2019-01-03], ~D[2019-01-05])
70+
end
71+
72+
test "raises an error with start outside range" do
73+
scale = DateScale.new(Date.range(~D[2019-01-01], ~D[2019-01-05]))
74+
75+
assert_raise ArgumentError, fn ->
76+
Scale.values(scale, %{start: ~D[2018-12-31]})
77+
end
78+
end
6179
end
6280

6381
describe "convert_to_range/3" do

test/plox/date_time_scale_test.exs

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,49 @@ defmodule Plox.DateTimeScaleTest do
9494
~N[2019-01-01 00:00:03]
9595
]
9696
end
97+
98+
test "raises an error with zero step" do
99+
scale = DateTimeScale.new(~N[2019-01-01 00:00:00], ~N[2019-01-01 00:02:00])
100+
101+
assert_raise ArgumentError, fn ->
102+
Scale.values(scale, %{step: 0})
103+
end
104+
end
105+
106+
test "raises an error with invalid step" do
107+
scale = DateTimeScale.new(~N[2019-01-01 00:00:00], ~N[2019-01-01 00:02:00])
108+
109+
assert_raise ArgumentError, fn ->
110+
Scale.values(scale, %{step: {-500, :invalid}})
111+
end
112+
end
113+
114+
test "with default start" do
115+
scale = DateTimeScale.new(~N[2019-01-01 00:00:00], ~N[2019-01-01 00:02:00])
116+
117+
assert Scale.values(scale) == [
118+
~N[2019-01-01 00:00:00],
119+
~N[2019-01-01 00:01:00],
120+
~N[2019-01-01 00:02:00]
121+
]
122+
end
123+
124+
test "with custom start" do
125+
scale = DateTimeScale.new(~N[2019-01-01 00:00:00], ~N[2019-01-01 00:02:00])
126+
127+
assert Scale.values(scale, %{start: ~N[2019-01-01 00:01:00]}) == [
128+
~N[2019-01-01 00:01:00],
129+
~N[2019-01-01 00:02:00]
130+
]
131+
end
132+
133+
test "raises an error with start outside range" do
134+
scale = DateTimeScale.new(~N[2019-01-01 00:00:00], ~N[2019-01-01 00:02:00])
135+
136+
assert_raise ArgumentError, fn ->
137+
Scale.values(scale, %{start: ~N[2019-01-01 00:03:00]})
138+
end
139+
end
97140
end
98141

99142
describe "convert_to_range/3" do

0 commit comments

Comments
 (0)