-
Notifications
You must be signed in to change notification settings - Fork 2
/
timer_test.exs
101 lines (74 loc) 路 3.32 KB
/
timer_test.exs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
defmodule App.TimerTest do
use App.DataCase
alias App.{Item, Person, Timer}
setup [:create_person]
describe "timers" do
@valid_item_attrs %{text: "some text", person_id: 1}
test "Timer.start/1 returns timer that has been started" do
{:ok, %{model: item, version: _version}} = Item.create_item(@valid_item_attrs)
assert Item.get_item!(item.id).text == item.text
started = NaiveDateTime.utc_now()
{:ok, timer} =
Timer.start(%{item_id: item.id, person_id: 1, start: started})
assert NaiveDateTime.diff(timer.start, started) == 0
end
test "Timer.stop/1 stops the timer that had been started" do
{:ok, %{model: item, version: _version}} = Item.create_item(@valid_item_attrs)
assert Item.get_item!(item.id).text == item.text
{:ok, started} =
NaiveDateTime.new(Date.utc_today(), Time.add(Time.utc_now(), -1))
{:ok, timer} =
Timer.start(%{item_id: item.id, person_id: 1, start: started})
assert NaiveDateTime.diff(timer.start, started) == 0
ended = NaiveDateTime.utc_now()
{:ok, timer} = Timer.stop(%{id: timer.id, stop: ended})
assert NaiveDateTime.diff(timer.stop, timer.start) == 1
end
test "stop_timer_for_item_id(item_id) should stop the active timer (happy path)" do
{:ok, %{model: item, version: _version}} = Item.create_item(@valid_item_attrs)
{:ok, seven_seconds_ago} =
NaiveDateTime.new(Date.utc_today(), Time.add(Time.utc_now(), -7))
# Start the timer 7 seconds ago:
{:ok, timer} =
Timer.start(%{item_id: item.id, person_id: 1, start: seven_seconds_ago})
# 聽stop the timer based on it's item_id
Timer.stop_timer_for_item_id(item.id)
stopped_timer = Timer.get_timer!(timer.id)
assert NaiveDateTime.diff(stopped_timer.start, seven_seconds_ago) == 0
assert NaiveDateTime.diff(stopped_timer.stop, stopped_timer.start) == 7
end
test "stop_timer_for_item_id(item_id) should not explode if there is no timer (unhappy path)" do
# random int
zero_item_id = 0
Timer.stop_timer_for_item_id(zero_item_id)
assert "Don't stop believing!"
end
test "stop_timer_for_item_id(item_id) should not melt down if item_id is nil (sad path)" do
# random int
nil_item_id = nil
Timer.stop_timer_for_item_id(nil_item_id)
assert "Keep on truckin'"
end
test "update_timer(%{id: id, start: start, stop: stop}) should update the timer" do
start = ~N[2022-10-27 00:00:00]
stop = ~N[2022-10-27 05:00:00]
{:ok, %{model: item, version: _version}} = Item.create_item(@valid_item_attrs)
{:ok, seven_seconds_ago} =
NaiveDateTime.new(Date.utc_today(), Time.add(Time.utc_now(), -7))
# Start the timer 7 seconds ago:
{:ok, timer} =
Timer.start(%{item_id: item.id, person_id: 1, start: seven_seconds_ago})
# Stop the timer based on its item_id
Timer.stop_timer_for_item_id(item.id)
# Update timer to specific datetimes
Timer.update_timer(%{id: timer.id, start: start, stop: stop})
updated_timer = Timer.get_timer!(timer.id)
assert updated_timer.start == start
assert updated_timer.stop == stop
end
end
defp create_person(_) do
person = Person.create_person(%{"person_id" => 1, "name" => "guest"})
%{person: person}
end
end