oneshot
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
defmodule Rsh26pool.JSTTest do
|
||||
use ExUnit.Case, async: true
|
||||
|
||||
alias Rsh26pool.JST
|
||||
|
||||
describe "parse_local/1" do
|
||||
test "interprets the input as wall-clock JST and returns UTC (-9h)" do
|
||||
assert JST.parse_local("2026-07-04T18:00") == {:ok, ~U[2026-07-04 09:00:00Z]}
|
||||
end
|
||||
|
||||
test "accepts a value that already carries seconds" do
|
||||
assert JST.parse_local("2026-07-04T18:00:30") == {:ok, ~U[2026-07-04 09:00:30Z]}
|
||||
end
|
||||
|
||||
test "shifts across the date boundary when JST wall time is early morning" do
|
||||
# 2026-07-04 05:00 JST is the previous UTC day at 20:00.
|
||||
assert JST.parse_local("2026-07-04T05:00") == {:ok, ~U[2026-07-03 20:00:00Z]}
|
||||
end
|
||||
|
||||
test "returns :error on unparseable text" do
|
||||
assert JST.parse_local("garbage") == :error
|
||||
end
|
||||
|
||||
test "returns :error for non-binary input" do
|
||||
assert JST.parse_local(nil) == :error
|
||||
assert JST.parse_local(1234) == :error
|
||||
end
|
||||
end
|
||||
|
||||
describe "to_local/1 and format/1" do
|
||||
test "to_local shifts a stored UTC datetime forward by 9 hours" do
|
||||
assert JST.to_local(~U[2026-07-04 09:00:00Z]) == ~U[2026-07-04 18:00:00Z]
|
||||
end
|
||||
|
||||
test "format renders the stored UTC datetime as JST wall time" do
|
||||
assert JST.format(~U[2026-07-04 09:00:00Z]) == "2026/07/04 18:00"
|
||||
end
|
||||
|
||||
test "format(nil) is the empty string" do
|
||||
assert JST.format(nil) == ""
|
||||
end
|
||||
end
|
||||
|
||||
describe "parse_local |> format round-trip" do
|
||||
test "is the identity on the wall clock at minute precision" do
|
||||
wall_times = [
|
||||
"2026-07-04T18:00",
|
||||
"2026-01-01T00:00",
|
||||
"2026-12-31T23:59",
|
||||
"2026-03-15T09:05",
|
||||
"2026-07-04T05:00"
|
||||
]
|
||||
|
||||
for wall <- wall_times do
|
||||
assert {:ok, utc} = JST.parse_local(wall)
|
||||
expected = wall |> String.replace("-", "/") |> String.replace("T", " ")
|
||||
assert JST.format(utc) == expected
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user