paradeiser 0.2.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -0
  3. data/Guardfile +1 -0
  4. data/README.md +98 -6
  5. data/TODO.md +22 -6
  6. data/VISION.md +171 -26
  7. data/bin/par +20 -4
  8. data/lib/paradeiser/controllers/breaks_controller.rb +0 -1
  9. data/lib/paradeiser/controllers/controller.rb +15 -1
  10. data/lib/paradeiser/controllers/paradeiser_controller.rb +23 -1
  11. data/lib/paradeiser/controllers/pomodori_controller.rb +23 -1
  12. data/lib/paradeiser/errors.rb +6 -0
  13. data/lib/paradeiser/executor.rb +1 -1
  14. data/lib/paradeiser/initializers/inflections.rb +3 -0
  15. data/lib/paradeiser/models/break.rb +1 -0
  16. data/lib/paradeiser/models/pomodoro.rb +13 -1
  17. data/lib/paradeiser/models/repository.rb +11 -1
  18. data/lib/paradeiser/models/scheduled.rb +7 -1
  19. data/lib/paradeiser/refinements/pluralize.rb +10 -0
  20. data/lib/paradeiser/router.rb +0 -2
  21. data/lib/paradeiser/version.rb +1 -1
  22. data/lib/paradeiser/view.rb +1 -1
  23. data/lib/paradeiser/views/breaks/finish.erb +1 -0
  24. data/lib/paradeiser/views/breaks/start.erb +1 -0
  25. data/lib/paradeiser/views/paradeiser/init.erb +1 -1
  26. data/lib/paradeiser/views/paradeiser/report.erb +10 -4
  27. data/lib/paradeiser/views/paradeiser/status.erb +2 -1
  28. data/lib/paradeiser/views/pomodori/annotate.erb +1 -0
  29. data/lib/paradeiser/views/pomodori/cancel.erb +1 -0
  30. data/lib/paradeiser/views/pomodori/interrupt.erb +1 -0
  31. data/lib/paradeiser/views/pomodori/log.erb +1 -0
  32. data/lib/paradeiser/views/pomodori/start.erb +1 -1
  33. data/paradeiser.gemspec +2 -0
  34. data/test/bin/notify-send +1 -0
  35. data/test/helper.rb +7 -24
  36. data/test/integration/test_annotate.rb +19 -0
  37. data/test/integration/test_finish.rb +9 -0
  38. data/test/integration/test_interrupt.rb +9 -0
  39. data/test/integration/test_log.rb +12 -0
  40. data/test/integration/test_no_args.rb +7 -0
  41. data/test/integration/test_start.rb +7 -0
  42. data/test/integration/test_status.rb +10 -0
  43. data/test/integration/test_unknown.rb +7 -0
  44. data/test/lib/at_mock.rb +1 -1
  45. data/test/lib/controller_test.rb +25 -0
  46. data/test/lib/integration_test.rb +45 -0
  47. data/test/lib/paradeiser_controller_test.rb +7 -0
  48. data/test/lib/view_test.rb +12 -0
  49. data/test/unit/test_break.rb +7 -44
  50. data/test/unit/test_break_view.rb +22 -0
  51. data/test/unit/test_breaks_controller.rb +66 -0
  52. data/test/unit/test_paradeiser_controller_export.rb +107 -0
  53. data/test/unit/test_paradeiser_controller_report.rb +73 -26
  54. data/test/unit/test_paradeiser_controller_status.rb +42 -24
  55. data/test/unit/test_paradeiser_view_init.rb +7 -0
  56. data/test/unit/test_paradeiser_view_report.rb +132 -0
  57. data/test/unit/test_paradeiser_view_status.rb +17 -0
  58. data/test/unit/test_pomodori_controller.rb +241 -33
  59. data/test/unit/test_pomodori_view.rb +26 -13
  60. data/test/unit/test_pomodoro.rb +23 -81
  61. data/test/unit/test_pomodoro_hooks.rb +12 -25
  62. data/test/unit/test_repository.rb +5 -21
  63. data/test/unit/test_scheduler.rb +1 -1
  64. metadata +61 -8
  65. data/test/integration/test_par.rb +0 -17
  66. data/test/unit/test_break_controller.rb +0 -56
  67. data/test/unit/test_paradeiser_view.rb +0 -66
@@ -1,28 +1,41 @@
1
1
  require 'helper'
2
2
 
3
- class TestPomodoriView < MiniTest::Test
3
+ class TestPomodoriView < ViewTest
4
4
  def setup
5
- @pom = Pomodoro.new
5
+ @pom = produce(Pomodoro)
6
6
  @pom.id = 1
7
7
  end
8
8
 
9
9
  def test_start
10
- out, err = render(:start)
11
- assert_match(/^Starting pomodoro #1\.$/m, out)
12
- assert_empty(err)
10
+ assert_match(/^Started pomodoro #1\.$/m, render(:start))
13
11
  end
14
12
 
15
13
  def test_finish
16
- start!
17
- out, err = render(:finish)
18
- assert_match(/^Finished pomodoro #1 after .* minutes\.$/m, out)
14
+ assert_match(/^Finished pomodoro #1 after .* minutes\.$/m, render(:finish))
19
15
  end
20
16
 
21
- private
17
+ def test_cancel
18
+ cancel!
19
+ assert_match(/^Canceled pomodoro #1 after .* minutes\.$/m, render(:cancel))
20
+ end
21
+
22
+ def test_interrupt_internal
23
+ @interrupt_type = 'internally'
24
+ assert_match(/^Marked pomodoro #1 as internally interrupted\.$/m, render(:interrupt))
25
+ end
26
+
27
+ def test_interrupt_external
28
+ @interrupt_type = 'externally'
29
+ assert_match(/^Marked pomodoro #1 as externally interrupted\.$/m, render(:interrupt))
30
+ end
31
+
32
+ def test_annotate
33
+ assert_match(/^Successfully annotated pomodoro #1\.$/m, render(:annotate))
34
+ end
35
+
36
+ protected
22
37
 
23
- def render(method)
24
- capture_io do
25
- View.new('Pomodori', method).render(binding)
26
- end
38
+ def model
39
+ 'Pomodoro'
27
40
  end
28
41
  end
@@ -2,27 +2,10 @@ require 'helper'
2
2
 
3
3
  class TestPomodoro < MiniTest::Test
4
4
  def setup
5
- @pom = Pomodoro.new
6
- end
7
-
8
- def test_virgin
9
- assert_equal(:idle, @pom.status_name)
10
- refute(@pom.started_at)
11
- refute(@pom.canceled_at)
12
- refute(@pom.finished_at)
13
- end
14
-
15
- def test_finish_idle
16
- assert_raises StateMachine::InvalidTransition do
17
- finish!
18
- end
19
- refute(@pom.started_at)
20
- refute(@pom.canceled_at)
21
- refute(@pom.finished_at)
5
+ @pom = produce(Pomodoro)
22
6
  end
23
7
 
24
8
  def test_finish_active
25
- start!
26
9
  assert_equal(:active, @pom.status_name)
27
10
 
28
11
  now = srand
@@ -37,7 +20,6 @@ class TestPomodoro < MiniTest::Test
37
20
  end
38
21
 
39
22
  def test_finish_finished
40
- start!
41
23
  finish!
42
24
  assert_raises StateMachine::InvalidTransition do
43
25
  finish!
@@ -46,7 +28,6 @@ class TestPomodoro < MiniTest::Test
46
28
  end
47
29
 
48
30
  def test_finish_canceled
49
- start!
50
31
  cancel!
51
32
  assert_raises StateMachine::InvalidTransition do
52
33
  finish!
@@ -58,77 +39,46 @@ class TestPomodoro < MiniTest::Test
58
39
  assert_equal(25 * 60, @pom.length)
59
40
  end
60
41
 
61
- def test_duration_idle
62
- assert_equal(0, @pom.duration)
63
- end
64
-
65
42
  def test_duration_started
66
- now = srand
67
-
68
- Time.stub :now, Time.at(now) do
69
- start!
70
- end
71
-
72
- later = now + rand(42)
43
+ later = @started + rand(42)
73
44
 
74
45
  Time.stub :now, Time.at(later) do
75
- assert_equal(later - now, @pom.duration)
46
+ assert_equal(later - @started, @pom.duration)
76
47
  end
77
48
  end
78
49
 
79
50
  def test_duration_finished
80
- now = srand
81
-
82
- Time.stub :now, Time.at(now) do
83
- start!
84
- end
85
-
86
- later = now + rand(42)
51
+ later = @started + rand(42)
87
52
 
88
53
  Time.stub :now, Time.at(later) do
89
54
  finish!
90
55
  end
91
56
 
92
- assert_equal(later - now, @pom.duration)
57
+ assert_equal(later - @started, @pom.duration)
93
58
  end
94
59
 
95
60
  def test_duration_canceled
96
- now = srand
97
-
98
- Time.stub :now, Time.at(now) do
99
- start!
100
- end
101
-
102
- later = now + rand(42)
61
+ later = @started + rand(42)
103
62
 
104
63
  Time.stub :now, Time.at(later) do
105
64
  cancel!
106
65
  end
107
66
 
108
- assert_equal(later - now, @pom.duration)
67
+ assert_equal(later - @started, @pom.duration)
109
68
  end
110
69
 
111
70
  def test_start
112
- now = srand
113
-
114
- Time.stub :now, Time.at(now) do
115
- start!
116
- end
117
-
118
71
  assert_equal(:active, @pom.status_name)
119
- assert_equal(now, @pom.started_at.to_i)
72
+ assert_equal(@started, @pom.started_at.to_i)
120
73
  end
121
74
 
122
75
  def test_remaining_active
123
- now = srand
124
-
125
- Time.stub :now, Time.at(now) do
126
- start!
76
+ Time.stub :now, Time.at(@started) do
127
77
  assert_equal(Pomodoro::MINUTES_25 * 60, @pom.remaining)
128
78
  end
129
79
 
130
80
  delta = 600
131
- later = now + delta
81
+ later = @started + delta
132
82
 
133
83
  Time.stub :now, Time.at(later) do
134
84
  assert_equal(Pomodoro::MINUTES_25 * 60 - delta, @pom.remaining)
@@ -136,7 +86,6 @@ class TestPomodoro < MiniTest::Test
136
86
  end
137
87
 
138
88
  def test_interrupt
139
- start!
140
89
  assert_equal(0, @pom.interrupts.size)
141
90
 
142
91
  now = srand
@@ -153,7 +102,6 @@ class TestPomodoro < MiniTest::Test
153
102
  end
154
103
 
155
104
  def test_interrupt_internal
156
- start!
157
105
  interrupt!(:internal)
158
106
  assert_equal(1, @pom.interrupts.size)
159
107
  int = @pom.interrupts.first
@@ -161,7 +109,6 @@ class TestPomodoro < MiniTest::Test
161
109
  end
162
110
 
163
111
  def test_interrupt_external
164
- start!
165
112
  interrupt!(:external)
166
113
  assert_equal(1, @pom.interrupts.size)
167
114
  int = @pom.interrupts.first
@@ -169,20 +116,12 @@ class TestPomodoro < MiniTest::Test
169
116
  end
170
117
 
171
118
  def test_interrupt_unknown
172
- start!
173
119
  assert_raises InvalidTypeError do
174
120
  interrupt!(:unknown)
175
121
  end
176
122
  end
177
123
 
178
- def test_interrupt_idle
179
- assert_raises StateMachine::InvalidTransition do
180
- interrupt!
181
- end
182
- end
183
-
184
124
  def test_interrupt_finished
185
- start!
186
125
  finish!
187
126
  assert_raises StateMachine::InvalidTransition do
188
127
  interrupt!
@@ -190,23 +129,13 @@ class TestPomodoro < MiniTest::Test
190
129
  end
191
130
 
192
131
  def test_interrupt_canceled
193
- start!
194
132
  cancel!
195
133
  assert_raises StateMachine::InvalidTransition do
196
134
  interrupt!
197
135
  end
198
136
  end
199
137
 
200
- def test_cancel_idle
201
- assert_raises StateMachine::InvalidTransition do
202
- cancel!
203
- end
204
- refute(@pom.finished_at)
205
- refute(@pom.canceled_at)
206
- end
207
-
208
138
  def test_cancel_active
209
- start!
210
139
  assert_equal(:active, @pom.status_name)
211
140
 
212
141
  now = srand
@@ -219,4 +148,17 @@ class TestPomodoro < MiniTest::Test
219
148
  assert_equal(now, @pom.canceled_at.to_i)
220
149
  refute(@pom.finished_at)
221
150
  end
151
+
152
+ def test_annotate_active
153
+ annotations = @pom.annotations
154
+ assert(annotations)
155
+ assert_empty(annotations)
156
+
157
+ text = 'foobar something'
158
+ @pom.annotate(text)
159
+
160
+ assert_equal(:active, @pom.status_name)
161
+ refute_empty(@pom.annotations)
162
+ assert_equal(text, @pom.annotations.first)
163
+ end
222
164
  end
@@ -16,20 +16,18 @@ class TestPomodoroHooks < MiniTest::Test
16
16
 
17
17
  def test_before_start_pomodoro_success
18
18
  hook_name = 'before-start-pomodoro'
19
- pom = Pomodoro.new
20
19
  token_file = create_hook('Pomodoro', hook_name)
21
20
  refute_path_exists(token_file, "Token file must not exist before #{hook_name} hook is executed")
22
- pom.start
21
+ pom = produce(Pomodoro)
23
22
  assert_path_exists(token_file, "#{hook_name} hook should have created a token file")
24
23
  assert_equal(:active, pom.status_name)
25
- assert_equal("Pomodoro #{Repository.next_id} #{pom.started_at.strftime('%H:%M')}", File.read(token_file).chomp)
24
+ assert_match(/Pomodoro \d \d{1,2}:\d{1,2}/ , File.read(token_file).chomp)
26
25
  end
27
26
 
28
27
  def test_before_finish_pomodoro_success
29
28
  hook_name = 'before-finish-pomodoro'
30
- pom = Pomodoro.new
29
+ pom = produce(Pomodoro)
31
30
  pom.id = SecureRandom.random_number(1000)
32
- pom.start
33
31
  token_file = create_hook('Pomodoro', hook_name)
34
32
  refute_path_exists(token_file, "Token file must not exist before #{hook_name} hook is executed")
35
33
  pom.finish
@@ -40,9 +38,8 @@ class TestPomodoroHooks < MiniTest::Test
40
38
 
41
39
  def test_before_finish_pomodoro_error
42
40
  hook_name = 'before-finish-pomodoro'
43
- pom = Pomodoro.new
41
+ pom = produce(Pomodoro)
44
42
  pom.id = SecureRandom.random_number(1000)
45
- pom.start
46
43
  token_file = create_hook('Pomodoro', hook_name, false)
47
44
  refute_path_exists(token_file, "Token file must not exist before #{hook_name} hook is executed")
48
45
 
@@ -58,7 +55,6 @@ class TestPomodoroHooks < MiniTest::Test
58
55
  hook_name = 'before-finish-break'
59
56
  br3ak = Break.new
60
57
  br3ak.id = SecureRandom.random_number(1000)
61
- br3ak.start
62
58
  token_file = create_hook('Break', hook_name)
63
59
  refute_path_exists(token_file, "Token file must not exist before #{hook_name} hook is executed")
64
60
  br3ak.finish
@@ -71,7 +67,6 @@ class TestPomodoroHooks < MiniTest::Test
71
67
  hook_name = 'before-finish-break'
72
68
  br3ak = Break.new
73
69
  br3ak.id = SecureRandom.random_number(1000)
74
- br3ak.start
75
70
  token_file = create_hook('Break', hook_name, false)
76
71
  refute_path_exists(token_file, "Token file must not exist before #{hook_name} hook is executed")
77
72
 
@@ -85,8 +80,7 @@ class TestPomodoroHooks < MiniTest::Test
85
80
 
86
81
  def test_before_interrupt_success
87
82
  hook_name = 'before-interrupt-pomodoro'
88
- pom = Pomodoro.new
89
- pom.start
83
+ pom = produce(Pomodoro)
90
84
  token_file = create_hook('Pomodoro', hook_name)
91
85
  refute_path_exists(token_file, "Token file must not exist before #{hook_name} hook is executed")
92
86
  pom.interrupt
@@ -97,8 +91,7 @@ class TestPomodoroHooks < MiniTest::Test
97
91
 
98
92
  def test_before_interrupt_error
99
93
  hook_name = 'before-interrupt-pomodoro'
100
- pom = Pomodoro.new
101
- pom.start
94
+ pom = produce(Pomodoro)
102
95
  token_file = create_hook('Pomodoro', hook_name, false)
103
96
  refute_path_exists(token_file, "Token file must not exist before #{hook_name} hook is executed")
104
97
 
@@ -112,8 +105,7 @@ class TestPomodoroHooks < MiniTest::Test
112
105
 
113
106
  def test_after_interrupt_success
114
107
  hook_name = 'after-interrupt-pomodoro'
115
- pom = Pomodoro.new
116
- pom.start
108
+ pom = produce(Pomodoro)
117
109
  token_file = create_hook('Pomodoro', hook_name, false)
118
110
  refute_path_exists(token_file, "Token file must not exist before #{hook_name} hook is executed")
119
111
 
@@ -127,8 +119,7 @@ class TestPomodoroHooks < MiniTest::Test
127
119
 
128
120
  def test_after_interrupt_error
129
121
  hook_name = 'after-interrupt-pomodoro'
130
- pom = Pomodoro.new
131
- pom.start
122
+ pom = produce(Pomodoro)
132
123
  token_file = create_hook('Pomodoro', hook_name)
133
124
  refute_path_exists(token_file, "Token file must not exist before #{hook_name} hook is executed")
134
125
  pom.interrupt
@@ -139,8 +130,7 @@ class TestPomodoroHooks < MiniTest::Test
139
130
 
140
131
  def test_before_cancel_success
141
132
  hook_name = 'before-cancel-pomodoro'
142
- pom = Pomodoro.new
143
- pom.start
133
+ pom = produce(Pomodoro)
144
134
  token_file = create_hook('Pomodoro', hook_name)
145
135
  refute_path_exists(token_file, "Token file must not exist before #{hook_name} hook is executed")
146
136
  pom.cancel
@@ -151,8 +141,7 @@ class TestPomodoroHooks < MiniTest::Test
151
141
 
152
142
  def test_before_cancel_error
153
143
  hook_name = 'before-cancel-pomodoro'
154
- pom = Pomodoro.new
155
- pom.start
144
+ pom = produce(Pomodoro)
156
145
  token_file = create_hook('Pomodoro', hook_name, false)
157
146
  refute_path_exists(token_file, "Token file must not exist before #{hook_name} hook is executed")
158
147
 
@@ -166,8 +155,7 @@ class TestPomodoroHooks < MiniTest::Test
166
155
 
167
156
  def test_after_cancel_success
168
157
  hook_name = 'after-cancel-pomodoro'
169
- pom = Pomodoro.new
170
- pom.start
158
+ pom = produce(Pomodoro)
171
159
  token_file = create_hook('Pomodoro', hook_name, false)
172
160
  refute_path_exists(token_file, "Token file must not exist before #{hook_name} hook is executed")
173
161
 
@@ -181,8 +169,7 @@ class TestPomodoroHooks < MiniTest::Test
181
169
 
182
170
  def test_after_cancel_error
183
171
  hook_name = 'after-cancel-pomodoro'
184
- pom = Pomodoro.new
185
- pom.start
172
+ pom = produce(Pomodoro)
186
173
  token_file = create_hook('Pomodoro', hook_name)
187
174
  refute_path_exists(token_file, "Token file must not exist before #{hook_name} hook is executed")
188
175
  pom.cancel
@@ -5,19 +5,8 @@ class TestRepository < MiniTest::Test
5
5
  @backend = PStoreMock.new
6
6
  end
7
7
 
8
- def test_save_idle
9
- pom = Pomodoro.new
10
-
11
- assert_raises IllegalStatusError do
12
- invoke(:save, pom)
13
- end
14
-
15
- assert_equal(0, @backend.size)
16
- end
17
-
18
8
  def test_save_active
19
- pom = Pomodoro.new
20
- start!(pom)
9
+ pom = produce(Pomodoro)
21
10
 
22
11
  invoke(:save, pom)
23
12
 
@@ -25,11 +14,8 @@ class TestRepository < MiniTest::Test
25
14
  end
26
15
 
27
16
  def test_save_second_active
28
- pom1 = Pomodoro.new
29
- start!(pom1)
30
-
31
- pom2 = Pomodoro.new
32
- start!(pom2)
17
+ pom1 = produce(Pomodoro)
18
+ pom2 = produce(Pomodoro)
33
19
 
34
20
  invoke(:save, pom1)
35
21
 
@@ -41,8 +27,7 @@ class TestRepository < MiniTest::Test
41
27
  end
42
28
 
43
29
  def test_save_finished
44
- pom = Pomodoro.new
45
- start!(pom)
30
+ pom = produce(Pomodoro)
46
31
  finish!(pom)
47
32
 
48
33
  invoke(:save, pom)
@@ -51,8 +36,7 @@ class TestRepository < MiniTest::Test
51
36
  end
52
37
 
53
38
  def test_save_active_finish_save
54
- pom = Pomodoro.new
55
- start!(pom)
39
+ pom = produce(Pomodoro)
56
40
 
57
41
  invoke(:save, pom)
58
42
  finish!(pom)
@@ -4,7 +4,7 @@ class TestScheduler < MiniTest::Test
4
4
  def setup
5
5
  if Scheduler.list.any?
6
6
  @do_not_clear = true
7
- raise "The at queue 't' is not empty. Clean it up before running this test again."
7
+ raise "The at queue '#{queue}' is not empty. Clean it up before running this test again."
8
8
  end
9
9
  end
10
10