troo 0.0.8 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (316) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -1
  3. data/.ruby-version +1 -1
  4. data/.trooconf.example +18 -0
  5. data/Gemfile.lock +178 -0
  6. data/README.md +77 -21
  7. data/Rakefile +1 -1
  8. data/bin/completion.bash +10 -0
  9. data/bin/completion.zsh +10 -0
  10. data/bin/init.sh +15 -0
  11. data/bin/troo +12 -3
  12. data/config/cucumber.yml +3 -3
  13. data/config/en.yml +29 -0
  14. data/config/trello_api.yml +19 -0
  15. data/features/add/board.feature +3 -19
  16. data/features/add/card.feature +14 -18
  17. data/features/add/comment.feature +14 -14
  18. data/features/add/list.feature +11 -14
  19. data/features/default/board.feature +4 -4
  20. data/features/default/card.feature +4 -4
  21. data/features/default/list.feature +4 -4
  22. data/features/move/card.feature +54 -0
  23. data/features/refresh/all.feature +8 -4
  24. data/features/refresh/board.feature +9 -6
  25. data/features/refresh/card.feature +9 -6
  26. data/features/refresh/list.feature +9 -6
  27. data/features/show/board.feature +7 -7
  28. data/features/show/boards.feature +19 -0
  29. data/features/show/card.feature +86 -15
  30. data/features/show/comment.feature +14 -12
  31. data/features/show/list.feature +19 -14
  32. data/features/status.feature +27 -13
  33. data/features/step_definitions/fabrication_steps.rb +43 -8
  34. data/features/step_definitions/troo_steps.rb +3 -2
  35. data/features/support/env.rb +1 -0
  36. data/features/troo.feature +0 -12
  37. data/lib/troo.rb +32 -29
  38. data/lib/troo/api/client.rb +117 -0
  39. data/lib/troo/api/endpoints.rb +39 -0
  40. data/lib/troo/api/headers.rb +44 -0
  41. data/lib/troo/api/oauth_settings.rb +36 -0
  42. data/lib/troo/api/request.rb +37 -0
  43. data/lib/troo/api/response.rb +31 -0
  44. data/lib/troo/cli/add.rb +8 -12
  45. data/lib/troo/cli/commands/add.rb +95 -0
  46. data/lib/troo/cli/commands/default.rb +44 -0
  47. data/lib/troo/cli/commands/move/card.rb +95 -0
  48. data/lib/troo/cli/commands/refresh.rb +80 -0
  49. data/lib/troo/cli/commands/refresh/all.rb +52 -0
  50. data/lib/troo/cli/commands/show.rb +56 -0
  51. data/lib/troo/cli/commands/show/show_boards.rb +36 -0
  52. data/lib/troo/cli/commands/show/show_comments.rb +54 -0
  53. data/lib/troo/cli/commands/status.rb +68 -0
  54. data/lib/troo/cli/default.rb +3 -3
  55. data/lib/troo/cli/main.rb +60 -9
  56. data/lib/troo/cli/refresh.rb +4 -4
  57. data/lib/troo/cli/show.rb +7 -7
  58. data/lib/troo/cli/thor_fixes.rb +1 -5
  59. data/lib/troo/configuration.rb +53 -0
  60. data/lib/troo/debug.rb +18 -0
  61. data/lib/troo/decorators/member.rb +2 -19
  62. data/lib/troo/decorators/resource.rb +130 -0
  63. data/lib/troo/helpers/decorator_helpers.rb +21 -74
  64. data/lib/troo/helpers/model_helpers.rb +19 -4
  65. data/lib/troo/helpers/remote_model_helpers.rb +54 -0
  66. data/lib/troo/models/board.rb +19 -11
  67. data/lib/troo/models/card.rb +20 -17
  68. data/lib/troo/models/comment.rb +28 -8
  69. data/lib/troo/models/list.rb +22 -14
  70. data/lib/troo/models/member.rb +21 -5
  71. data/lib/troo/models/refresh.rb +3 -4
  72. data/lib/troo/persistence/local.rb +63 -0
  73. data/lib/troo/presentation/formatter.rb +132 -0
  74. data/lib/troo/presentation/template.rb +0 -4
  75. data/lib/troo/presenters/board.rb +32 -51
  76. data/lib/troo/presenters/card.rb +4 -11
  77. data/lib/troo/presenters/comment.rb +30 -16
  78. data/lib/troo/presenters/list.rb +25 -21
  79. data/lib/troo/presenters/member.rb +1 -8
  80. data/lib/troo/remote/all.rb +16 -0
  81. data/lib/troo/remote/board.rb +64 -0
  82. data/lib/troo/remote/card.rb +81 -0
  83. data/lib/troo/remote/comment.rb +70 -0
  84. data/lib/troo/remote/comment_data.rb +11 -0
  85. data/lib/troo/remote/comment_data_board.rb +13 -0
  86. data/lib/troo/remote/comment_data_card.rb +15 -0
  87. data/lib/troo/remote/list.rb +49 -0
  88. data/lib/troo/remote/member.rb +75 -0
  89. data/lib/troo/remote/persistence/board.rb +57 -0
  90. data/lib/troo/remote/persistence/card.rb +59 -0
  91. data/lib/troo/remote/persistence/comment.rb +58 -0
  92. data/lib/troo/remote/persistence/list.rb +57 -0
  93. data/lib/troo/remote/persistence/move_card.rb +85 -0
  94. data/lib/troo/retrieval/local.rb +100 -0
  95. data/lib/troo/retrieval/remote.rb +91 -0
  96. data/lib/troo/troo.rb +42 -42
  97. data/lib/troo/version.rb +1 -1
  98. data/lib/troo/views/card.erb +8 -10
  99. data/lib/troo/views/comments.erb +4 -0
  100. data/test/cassettes/board_by_id.yml +21 -30
  101. data/test/cassettes/boards_all.yml +22 -90
  102. data/test/cassettes/card_by_id.yml +49 -0
  103. data/test/cassettes/cards_by_board_id.yml +22 -90
  104. data/test/cassettes/cards_by_list_id.yml +22 -87
  105. data/test/cassettes/comments_by_board_id.yml +22 -95
  106. data/test/cassettes/comments_by_card_id.yml +22 -87
  107. data/test/cassettes/create_board.yml +20 -32
  108. data/test/cassettes/create_card.yml +21 -35
  109. data/test/cassettes/create_comment.yml +19 -37
  110. data/test/cassettes/create_list.yml +18 -32
  111. data/test/cassettes/list_by_id.yml +46 -0
  112. data/test/cassettes/lists_by_board_id.yml +19 -91
  113. data/test/cassettes/member_by_id.yml +48 -0
  114. data/test/cassettes/members_by_board_id.yml +21 -82
  115. data/test/cassettes/move_card_board.yml +49 -0
  116. data/test/cassettes/move_card_list.yml +49 -0
  117. data/test/lib/troo/api/client_test.rb +75 -0
  118. data/test/lib/troo/api/endpoints_test.rb +48 -0
  119. data/test/lib/troo/api/headers_test.rb +27 -0
  120. data/test/lib/troo/api/oauth_settings_test.rb +10 -0
  121. data/test/lib/troo/api/request_test.rb +63 -0
  122. data/test/lib/troo/api/response_test.rb +15 -0
  123. data/test/lib/troo/cli/add_test.rb +113 -0
  124. data/test/lib/troo/cli/commands/add_test.rb +66 -0
  125. data/test/lib/troo/cli/commands/default_test.rb +39 -0
  126. data/test/lib/troo/cli/commands/move/card_test.rb +86 -0
  127. data/test/lib/troo/cli/commands/refresh/all_test.rb +37 -0
  128. data/test/lib/troo/cli/commands/refresh_test.rb +59 -0
  129. data/test/lib/troo/cli/commands/show/show_boards_test.rb +35 -0
  130. data/test/lib/troo/cli/commands/show/show_comments_test.rb +63 -0
  131. data/test/lib/troo/cli/commands/show_test.rb +65 -0
  132. data/test/lib/troo/cli/commands/status_test.rb +48 -0
  133. data/test/lib/troo/cli/default_test.rb +39 -0
  134. data/test/lib/troo/cli/main_test.rb +102 -0
  135. data/test/lib/troo/cli/refresh_test.rb +43 -0
  136. data/test/lib/troo/cli/show_test.rb +49 -0
  137. data/test/lib/troo/cli/thor_fixes_test.rb +38 -0
  138. data/test/lib/troo/configuration_test.rb +43 -0
  139. data/test/lib/troo/debug_test.rb +25 -0
  140. data/test/lib/troo/decorators/card_test.rb +105 -229
  141. data/test/lib/troo/decorators/member_test.rb +20 -35
  142. data/test/lib/troo/decorators/resource_test.rb +157 -0
  143. data/test/lib/troo/helpers/decorator_helpers_test.rb +10 -19
  144. data/test/lib/troo/helpers/model_helpers_test.rb +18 -8
  145. data/test/lib/troo/helpers/remote_model_helpers_test.rb +68 -0
  146. data/test/lib/troo/models/behaviours/set_default_test.rb +0 -10
  147. data/test/lib/troo/models/board_test.rb +2 -2
  148. data/test/lib/troo/models/card_test.rb +2 -2
  149. data/test/lib/troo/models/comment_test.rb +6 -2
  150. data/test/lib/troo/models/list_test.rb +2 -2
  151. data/test/lib/troo/models/member_test.rb +6 -2
  152. data/test/lib/troo/persistence/local_test.rb +31 -0
  153. data/test/lib/troo/presentation/formatter_test.rb +31 -0
  154. data/test/lib/troo/presentation/sentence_test.rb +0 -12
  155. data/test/lib/troo/presentation/template_test.rb +1 -14
  156. data/test/lib/troo/presenters/board_test.rb +17 -36
  157. data/test/lib/troo/presenters/card_test.rb +1 -31
  158. data/test/lib/troo/presenters/comment_test.rb +19 -19
  159. data/test/lib/troo/presenters/list_test.rb +18 -18
  160. data/test/lib/troo/presenters/member_test.rb +1 -14
  161. data/test/lib/troo/remote/board_test.rb +66 -0
  162. data/test/lib/troo/remote/card_test.rb +81 -0
  163. data/test/lib/troo/remote/comment_data_board.rb +9 -0
  164. data/test/lib/troo/remote/comment_data_card_test.rb +9 -0
  165. data/test/lib/troo/remote/comment_data_test.rb +9 -0
  166. data/test/lib/troo/remote/comment_test.rb +100 -0
  167. data/test/lib/troo/remote/list_test.rb +67 -0
  168. data/test/lib/troo/remote/member_test.rb +70 -0
  169. data/test/lib/troo/remote/persistence/board_test.rb +39 -0
  170. data/test/lib/troo/remote/persistence/card_test.rb +50 -0
  171. data/test/lib/troo/remote/persistence/comment_test.rb +45 -0
  172. data/test/lib/troo/remote/persistence/list_test.rb +45 -0
  173. data/test/lib/troo/remote/persistence/move_card_test.rb +78 -0
  174. data/test/lib/troo/retrieval/local_test.rb +192 -0
  175. data/test/lib/troo/retrieval/remote_test.rb +49 -0
  176. data/test/support/fabrication.rb +17 -17
  177. data/test/support/fake_trello/fake_response.rb +38 -0
  178. data/test/support/fake_trello/server.rb +124 -0
  179. data/test/support/remotes/all_boards.json +41 -0
  180. data/test/support/remotes/board.json +140 -0
  181. data/test/support/remotes/board_by_id.json +75 -0
  182. data/test/support/remotes/card.json +40 -0
  183. data/test/support/remotes/card_by_card_id.json +302 -0
  184. data/test/support/remotes/comment.json +27 -0
  185. data/test/support/remotes/create_board.json +38 -0
  186. data/test/support/remotes/list.json +7 -0
  187. data/test/support/remotes/member.json +50 -0
  188. data/test/system_test.sh +21 -1
  189. data/test/test_helper.rb +2 -1
  190. data/troo.gemspec +28 -20
  191. metadata +376 -269
  192. data/configuration.yml.example +0 -7
  193. data/features/cleanup.feature +0 -13
  194. data/lib/troo/actions/create_board.rb +0 -46
  195. data/lib/troo/actions/create_card.rb +0 -44
  196. data/lib/troo/actions/create_comment.rb +0 -46
  197. data/lib/troo/actions/create_list.rb +0 -42
  198. data/lib/troo/actions/move_card.rb +0 -37
  199. data/lib/troo/adaptors/board.rb +0 -32
  200. data/lib/troo/adaptors/card.rb +0 -67
  201. data/lib/troo/adaptors/comment.rb +0 -42
  202. data/lib/troo/adaptors/list.rb +0 -37
  203. data/lib/troo/adaptors/member.rb +0 -52
  204. data/lib/troo/adaptors/resource.rb +0 -17
  205. data/lib/troo/commands/add/board.rb +0 -26
  206. data/lib/troo/commands/add/card.rb +0 -33
  207. data/lib/troo/commands/add/comment.rb +0 -33
  208. data/lib/troo/commands/add/list.rb +0 -33
  209. data/lib/troo/commands/add/resource.rb +0 -21
  210. data/lib/troo/commands/commands.rb +0 -28
  211. data/lib/troo/commands/default/board.rb +0 -25
  212. data/lib/troo/commands/default/card.rb +0 -25
  213. data/lib/troo/commands/default/list.rb +0 -25
  214. data/lib/troo/commands/default/resource.rb +0 -26
  215. data/lib/troo/commands/refresh/all.rb +0 -41
  216. data/lib/troo/commands/refresh/board.rb +0 -28
  217. data/lib/troo/commands/refresh/card.rb +0 -29
  218. data/lib/troo/commands/refresh/list.rb +0 -29
  219. data/lib/troo/commands/refresh/resource.rb +0 -42
  220. data/lib/troo/commands/show/board.rb +0 -13
  221. data/lib/troo/commands/show/boards.rb +0 -35
  222. data/lib/troo/commands/show/card.rb +0 -13
  223. data/lib/troo/commands/show/comments.rb +0 -21
  224. data/lib/troo/commands/show/list.rb +0 -13
  225. data/lib/troo/commands/show/resource.rb +0 -41
  226. data/lib/troo/commands/status/board.rb +0 -30
  227. data/lib/troo/commands/status/card.rb +0 -30
  228. data/lib/troo/commands/status/list.rb +0 -30
  229. data/lib/troo/commands/status/resource.rb +0 -34
  230. data/lib/troo/decorators/board.rb +0 -66
  231. data/lib/troo/decorators/card.rb +0 -105
  232. data/lib/troo/decorators/comment.rb +0 -36
  233. data/lib/troo/decorators/list.rb +0 -60
  234. data/lib/troo/external/board.rb +0 -31
  235. data/lib/troo/external/card.rb +0 -31
  236. data/lib/troo/external/comment.rb +0 -27
  237. data/lib/troo/external/list.rb +0 -27
  238. data/lib/troo/external/member.rb +0 -27
  239. data/lib/troo/external/resource.rb +0 -42
  240. data/lib/troo/helpers/command_helpers.rb +0 -37
  241. data/lib/troo/models/persistence/board.rb +0 -19
  242. data/lib/troo/models/persistence/card.rb +0 -19
  243. data/lib/troo/models/persistence/comment.rb +0 -19
  244. data/lib/troo/models/persistence/list.rb +0 -19
  245. data/lib/troo/models/persistence/member.rb +0 -19
  246. data/lib/troo/models/persistence/resource.rb +0 -50
  247. data/lib/troo/models/remote/comment.rb +0 -21
  248. data/lib/troo/models/remote/resource.rb +0 -25
  249. data/lib/troo/models/retrieval/board.rb +0 -29
  250. data/lib/troo/models/retrieval/card.rb +0 -33
  251. data/lib/troo/models/retrieval/comment.rb +0 -25
  252. data/lib/troo/models/retrieval/list.rb +0 -29
  253. data/lib/troo/models/retrieval/member.rb +0 -25
  254. data/lib/troo/models/retrieval/resource.rb +0 -36
  255. data/lib/troo/views/comment.erb +0 -3
  256. data/test/cassettes/card_by_card_id.yml +0 -58
  257. data/test/cassettes/comments_by_list_id.yml +0 -109
  258. data/test/cassettes/list_by_list_id.yml +0 -56
  259. data/test/cassettes/member_by_member_id.yml +0 -60
  260. data/test/cassettes/move_card.yml +0 -61
  261. data/test/lib/troo/actions/create_board_test.rb +0 -66
  262. data/test/lib/troo/actions/create_card_test.rb +0 -71
  263. data/test/lib/troo/actions/create_comment_test.rb +0 -71
  264. data/test/lib/troo/actions/create_list_test.rb +0 -65
  265. data/test/lib/troo/actions/move_card_test.rb +0 -54
  266. data/test/lib/troo/adaptors/board_test.rb +0 -38
  267. data/test/lib/troo/adaptors/card_test.rb +0 -49
  268. data/test/lib/troo/adaptors/comment_test.rb +0 -41
  269. data/test/lib/troo/adaptors/list_test.rb +0 -38
  270. data/test/lib/troo/adaptors/member_test.rb +0 -44
  271. data/test/lib/troo/commands/add/board_test.rb +0 -43
  272. data/test/lib/troo/commands/add/card_test.rb +0 -44
  273. data/test/lib/troo/commands/add/comment_test.rb +0 -44
  274. data/test/lib/troo/commands/add/list_test.rb +0 -44
  275. data/test/lib/troo/commands/add/resource_test.rb +0 -25
  276. data/test/lib/troo/commands/default/board_test.rb +0 -37
  277. data/test/lib/troo/commands/default/card_test.rb +0 -37
  278. data/test/lib/troo/commands/default/list_test.rb +0 -37
  279. data/test/lib/troo/commands/default/resource_test.rb +0 -20
  280. data/test/lib/troo/commands/refresh/all_test.rb +0 -39
  281. data/test/lib/troo/commands/refresh/board_test.rb +0 -62
  282. data/test/lib/troo/commands/refresh/card_test.rb +0 -62
  283. data/test/lib/troo/commands/refresh/list_test.rb +0 -62
  284. data/test/lib/troo/commands/refresh/resource_test.rb +0 -20
  285. data/test/lib/troo/commands/show/board_test.rb +0 -65
  286. data/test/lib/troo/commands/show/boards_test.rb +0 -36
  287. data/test/lib/troo/commands/show/card_test.rb +0 -64
  288. data/test/lib/troo/commands/show/comments_test.rb +0 -64
  289. data/test/lib/troo/commands/show/list_test.rb +0 -64
  290. data/test/lib/troo/commands/show/resource_test.rb +0 -25
  291. data/test/lib/troo/commands/status/board_test.rb +0 -43
  292. data/test/lib/troo/commands/status/card_test.rb +0 -43
  293. data/test/lib/troo/commands/status/list_test.rb +0 -43
  294. data/test/lib/troo/commands/status/resource_test.rb +0 -19
  295. data/test/lib/troo/decorators/board_test.rb +0 -129
  296. data/test/lib/troo/decorators/comment_test.rb +0 -74
  297. data/test/lib/troo/decorators/list_test.rb +0 -102
  298. data/test/lib/troo/external/board_test.rb +0 -102
  299. data/test/lib/troo/external/card_test.rb +0 -131
  300. data/test/lib/troo/external/comment_test.rb +0 -109
  301. data/test/lib/troo/external/list_test.rb +0 -94
  302. data/test/lib/troo/external/member_test.rb +0 -94
  303. data/test/lib/troo/external/resource_test.rb +0 -25
  304. data/test/lib/troo/helpers/command_helpers_test.rb +0 -82
  305. data/test/lib/troo/models/persistence/board_test.rb +0 -62
  306. data/test/lib/troo/models/persistence/card_test.rb +0 -61
  307. data/test/lib/troo/models/persistence/comment_test.rb +0 -69
  308. data/test/lib/troo/models/persistence/list_test.rb +0 -60
  309. data/test/lib/troo/models/persistence/member_test.rb +0 -60
  310. data/test/lib/troo/models/remote/comment_test.rb +0 -56
  311. data/test/lib/troo/models/remote/resource_test.rb +0 -26
  312. data/test/lib/troo/models/retrieval/board_test.rb +0 -93
  313. data/test/lib/troo/models/retrieval/card_test.rb +0 -101
  314. data/test/lib/troo/models/retrieval/comment_test.rb +0 -46
  315. data/test/lib/troo/models/retrieval/list_test.rb +0 -93
  316. data/test/lib/troo/models/retrieval/member_test.rb +0 -58
@@ -0,0 +1,15 @@
1
+ require_relative '../../../test_helper'
2
+
3
+ module Troo
4
+ module API
5
+ describe Response do
6
+ let(:described_class) { Response }
7
+ let(:parameters) { {} }
8
+ end
9
+
10
+ describe ErrorResponse do
11
+ let(:described_class) { ErrorResponse }
12
+ let(:parameters) { {} }
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,113 @@
1
+ require_relative '../../../test_helper'
2
+
3
+ module Troo
4
+ module CLI
5
+ describe Add do
6
+ let(:described_class) { Add }
7
+
8
+ before do
9
+ Troo::Commands::Add.stubs(:dispatch)
10
+ .returns('could not be created')
11
+ end
12
+
13
+ describe '#board' do
14
+ let(:value) {}
15
+
16
+ subject do
17
+ capture_io { described_class.new.board(value) }.join
18
+ end
19
+
20
+ context 'when a value is provided' do
21
+ let(:value) { 'some value' }
22
+
23
+ it 'returns the output of the command' do
24
+ subject.must_match(/could not be created/)
25
+ end
26
+ end
27
+
28
+ context 'when a value is not provided' do
29
+ before { $stdin.stubs(:gets).returns("some value\n") }
30
+
31
+ it 'returns the output of the command' do
32
+ subject.must_match(/could not be created/)
33
+ end
34
+ end
35
+ end
36
+
37
+ describe '#card' do
38
+ let(:id) {}
39
+ let(:value) {}
40
+
41
+ subject do
42
+ capture_io { described_class.new.card(id, value) }.join
43
+ end
44
+
45
+ context 'when a value is provided' do
46
+ let(:value) { 'some value' }
47
+
48
+ it 'returns the output of the command' do
49
+ subject.must_match(/could not be created/)
50
+ end
51
+ end
52
+
53
+ context 'when a value is not provided' do
54
+ before { $stdin.stubs(:gets).returns("some value\n") }
55
+
56
+ it 'returns the output of the command' do
57
+ subject.must_match(/could not be created/)
58
+ end
59
+ end
60
+ end
61
+
62
+ describe '#comment' do
63
+ let(:id) {}
64
+ let(:value) {}
65
+
66
+ subject do
67
+ capture_io { described_class.new.comment(id, value) }.join
68
+ end
69
+
70
+ context 'when a value is provided' do
71
+ let(:value) { 'some value' }
72
+
73
+ it 'returns the output of the command' do
74
+ subject.must_match(/could not be created/)
75
+ end
76
+ end
77
+
78
+ context 'when a value is not provided' do
79
+ before { $stdin.stubs(:gets).returns("some value\n") }
80
+
81
+ it 'returns the output of the command' do
82
+ subject.must_match(/could not be created/)
83
+ end
84
+ end
85
+ end
86
+
87
+ describe '#list' do
88
+ let(:id) {}
89
+ let(:value) {}
90
+
91
+ subject do
92
+ capture_io { described_class.new.list(id, value) }.join
93
+ end
94
+
95
+ context 'when a value is provided' do
96
+ let(:value) { 'some value' }
97
+
98
+ it 'returns the output of the command' do
99
+ subject.must_match(/could not be created/)
100
+ end
101
+ end
102
+
103
+ context 'when a value is not provided' do
104
+ before { $stdin.stubs(:gets).returns("some value\n") }
105
+
106
+ it 'returns the output of the command' do
107
+ subject.must_match(/could not be created/)
108
+ end
109
+ end
110
+ end
111
+ end
112
+ end
113
+ end
@@ -0,0 +1,66 @@
1
+ require_relative '../../../../test_helper'
2
+
3
+ module Troo
4
+ module Commands
5
+ describe Add do
6
+ let(:described_class) { Add }
7
+ let(:value) {}
8
+ let(:id) {}
9
+ let(:options) { { type: type } }
10
+ let(:type) { :none }
11
+ let(:outcome) { false }
12
+ let(:resource) { stub('resource', external_id: '200') }
13
+
14
+ before do
15
+ ['Board', 'Card', 'List'].each do |type|
16
+ Object.const_get("Troo::#{type}").stubs(:retrieve)
17
+ .returns(resource)
18
+ end
19
+ ['Board', 'Card', 'List', 'Comment'].each do |type|
20
+ Object.const_get("Troo::Remote::Persistence::#{type}")
21
+ .stubs(:with).returns(outcome)
22
+ end
23
+ end
24
+
25
+ describe '.dispatch' do
26
+ subject { described_class.dispatch(value, id, options) }
27
+
28
+ [:board, :card, :list, :comment].each do |test_type|
29
+ context "when the type is #{test_type}" do
30
+ let(:type) { test_type }
31
+
32
+ context 'when the parent resource exists' do
33
+ context 'and the new resource was created' do
34
+ let(:outcome) { true }
35
+
36
+ it 'returns a polite message' do
37
+ subject.must_match(/New/)
38
+ end
39
+ end
40
+
41
+ context 'and the new resource was not created' do
42
+ it 'returns a polite message' do
43
+ subject.must_match(/could not/)
44
+ end
45
+ end
46
+ end
47
+
48
+ context 'when the parent resource does not exist' do
49
+ let(:resource) {}
50
+
51
+ it 'returns a polite message' do
52
+ subject.must_match(/could not/)
53
+ end
54
+ end
55
+ end
56
+ end
57
+
58
+ context 'when the type is not specified' do
59
+ it 'returns a polite message' do
60
+ subject.must_match(/Could not create resource/)
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,39 @@
1
+ require_relative '../../../../test_helper'
2
+
3
+ module Troo
4
+ module Commands
5
+ describe Default do
6
+ let(:described_class) { Default }
7
+ let(:klass) { stub(type: :resource_type) }
8
+ let(:id) {}
9
+ let(:resource) { stub }
10
+ let(:outcome) { true }
11
+ let(:decorator) { stub(name: 'Test') }
12
+
13
+ before do
14
+ API::Client.stubs(:perform)
15
+ klass.stubs(:retrieve).returns(resource)
16
+ resource.stubs(:set_default!).returns(outcome)
17
+ resource.stubs(:decorator).returns(decorator)
18
+ end
19
+
20
+ describe '.dispatch' do
21
+ subject { described_class.dispatch(klass, id) }
22
+
23
+ context 'when the resource exists' do
24
+ it 'sets the default and returns a polite message' do
25
+ subject.must_match(/set as default/)
26
+ end
27
+ end
28
+
29
+ context 'when the resource does not exist' do
30
+ let(:outcome) { false }
31
+
32
+ it 'returns a polite message' do
33
+ subject.must_match(/cannot be found/)
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,86 @@
1
+ require_relative '../../../../../test_helper'
2
+
3
+ module Troo
4
+ module Commands
5
+ module Move
6
+ describe Card do
7
+ let(:described_class) { Card }
8
+ let(:card_id) { '1' }
9
+ let(:list_id) { '2' }
10
+ let(:board_id) {}
11
+ let(:outcome) { false }
12
+ let(:card) { @card }
13
+ let(:list) { @list }
14
+ let(:board) {}
15
+
16
+ before do
17
+ @card = Fabricate.build(:card)
18
+ @list = Fabricate.build(:list, name: 'Another Test List')
19
+ @board = Fabricate.build(:board)
20
+ Troo::Card.stubs(:retrieve).returns(card)
21
+ Troo::List.stubs(:retrieve).returns(list)
22
+ Troo::Board.stubs(:retrieve).returns(board)
23
+ Remote::Persistence::MoveCard.stubs(:with).returns(outcome)
24
+ end
25
+
26
+ describe '#move' do
27
+ subject do
28
+ described_class.dispatch(card_id, list_id, board_id)
29
+ end
30
+
31
+ context 'when the card can be moved' do
32
+ let(:outcome) { true }
33
+
34
+ it 'returns a polite message' do
35
+ subject.must_match(/moved to/)
36
+ end
37
+
38
+ context 'when the optional board is provided' do
39
+ let(:board_id) { '2' }
40
+ let(:board) { @board }
41
+
42
+ it 'returns a polite message' do
43
+ subject.must_match(/Test List\' on \'My/)
44
+ end
45
+ end
46
+ end
47
+
48
+ context 'when the card cannot be moved' do
49
+ context 'when the card does not exist' do
50
+ let(:card) {}
51
+
52
+ it 'returns a polite message' do
53
+ subject.must_match(/Card cannot be found/)
54
+ end
55
+ end
56
+
57
+ context 'when the list does not exist' do
58
+ let(:list) {}
59
+
60
+ it 'returns a polite message' do
61
+ subject.must_match(/List cannot be found/)
62
+ end
63
+ end
64
+
65
+ context 'when the board does not exist' do
66
+ let(:board_id) { '2' }
67
+ let(:board) {}
68
+
69
+ it 'returns a polite message' do
70
+ subject.must_match(/Board cannot be found/)
71
+ end
72
+ end
73
+
74
+ context 'when the move fails for another reason' do
75
+ let(:outcome) { false }
76
+
77
+ it 'returns a polite message' do
78
+ subject.must_match(/could not be moved/)
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,37 @@
1
+ require_relative '../../../../../test_helper'
2
+
3
+ module Troo
4
+ module Commands
5
+ describe RefreshAll do
6
+ def load_mock_trello_response
7
+ json = File.read('./test/support/remotes/board.json')
8
+ hash = Yajl::Parser.parse(json)
9
+ Troo::Remote::Board.new(hash)
10
+ end
11
+ let(:described_class) { RefreshAll }
12
+ let(:resource) { [load_mock_trello_response] }
13
+
14
+ before do
15
+ Retrieval::Remote.stubs(:fetch).returns(resource)
16
+ end
17
+
18
+ describe '.dispatch' do
19
+ subject { described_class.dispatch }
20
+
21
+ context 'when all the resources are refreshed' do
22
+ it 'returns a polite message' do
23
+ subject.must_match(/All local data refreshed/)
24
+ end
25
+ end
26
+
27
+ context 'when all the resources are not refreshed' do
28
+ let(:resource) { [] }
29
+
30
+ it 'returns a polite message' do
31
+ subject.must_match(/Cannot refresh all local data/)
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,59 @@
1
+ require_relative '../../../../test_helper'
2
+
3
+ module Troo
4
+ module Commands
5
+ describe Refresh do
6
+ let(:described_class) { Refresh }
7
+ let(:id) {}
8
+ let(:resource) {}
9
+ let(:retrieved) {}
10
+ let(:klass) do
11
+ stub(type: :resource_type, remote: stub)
12
+ end
13
+
14
+ before do
15
+ API::Client.stubs(:perform)
16
+ @board = Fabricate.build(:board)
17
+ Retrieval::Local.stubs(:retrieve).returns(resource)
18
+ Retrieval::Remote.stubs(:fetch).returns(retrieved)
19
+ end
20
+
21
+ after { database_cleanup }
22
+
23
+ describe '.dispatch' do
24
+ subject { described_class.dispatch(klass, id) }
25
+
26
+ context 'when the resource exists' do
27
+ let(:resource) { @board }
28
+ let(:retrieved) { [@board] }
29
+
30
+ context 'and the resource is refreshed' do
31
+ it 'returns a polite message' do
32
+ subject.must_match(/refreshed/)
33
+ end
34
+ end
35
+
36
+ context 'and multiple resources are refreshed' do
37
+ let(:retrieved) { [@board, @board] }
38
+
39
+ it 'returns a polite message' do
40
+ subject.must_match(/Multiple/)
41
+ end
42
+ end
43
+ end
44
+
45
+ context 'when the resource does not exist' do
46
+ it 'returns a polite message' do
47
+ subject.must_match(/cannot be found/)
48
+ end
49
+ end
50
+
51
+ context 'and the default resource does not exist' do
52
+ it 'returns a polite message' do
53
+ subject.must_match(/to set a default/)
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,35 @@
1
+ require_relative '../../../../../test_helper'
2
+
3
+ module Troo
4
+ module Commands
5
+ describe ShowBoards do
6
+ let(:described_class) { ShowBoards }
7
+ let(:resources) { [] }
8
+
9
+ before do
10
+ API::Client.stubs(:perform)
11
+ @board = Fabricate.build(:board)
12
+ Troo::Board.stubs(:all).returns(resources)
13
+ Presenters::Board.stubs(:all).returns(@board.name)
14
+ end
15
+
16
+ describe '.dispatch' do
17
+ subject { described_class.dispatch }
18
+
19
+ context 'when boards exist' do
20
+ let(:resources) { [@board] }
21
+
22
+ it 'presents the boards' do
23
+ subject.must_match(/#{@board.name}/)
24
+ end
25
+ end
26
+
27
+ context 'when no boards exist' do
28
+ it 'returns a polite message' do
29
+ subject.must_match(/Boards cannot be found/)
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end