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,63 @@
1
+ require_relative '../../../../../test_helper'
2
+
3
+ module Troo
4
+ module Commands
5
+ describe ShowComments do
6
+ let(:described_class) { ShowComments }
7
+ let(:type) { :comments }
8
+ let(:id) { '1' }
9
+ let(:default) { false }
10
+ let(:resource) {}
11
+ let(:presenter) { stub }
12
+
13
+ before do
14
+ API::Client.stubs(:perform)
15
+ @card = Fabricate.build(:card, default: default)
16
+ Troo::Card.stubs(:retrieve).returns(resource)
17
+ Presenters::Comment.stubs(:new).returns(presenter)
18
+ presenter.stubs(:show).returns(@card.name)
19
+ end
20
+
21
+ after { database_cleanup }
22
+
23
+ describe '.dispatch' do
24
+ subject { described_class.dispatch(id) }
25
+
26
+ context 'when a resource ID is provided' do
27
+ context 'and the resource exists' do
28
+ let(:resource) { @card }
29
+
30
+ it 'presents the comments' do
31
+ subject.must_match(/#{@card.name}/)
32
+ end
33
+ end
34
+
35
+ context 'but the resource does not exist' do
36
+ it 'returns a polite message' do
37
+ subject.must_match(/Card cannot be found/)
38
+ end
39
+ end
40
+ end
41
+
42
+ context 'when a resource ID is not provided' do
43
+ let(:id) {}
44
+
45
+ context 'and a default resource is set' do
46
+ let(:default) { true }
47
+ let(:resource) { @card }
48
+
49
+ it 'presents the comments' do
50
+ subject.must_match(/#{@card.name}/)
51
+ end
52
+ end
53
+
54
+ context 'and a default resource is not set' do
55
+ it 'returns a polite message' do
56
+ subject.must_match(/to set a default card first/)
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,65 @@
1
+ require_relative '../../../../test_helper'
2
+
3
+ module Troo
4
+ module Commands
5
+ describe Show do
6
+ let(:described_class) { Show }
7
+ let(:klass) { stub(type: :resource_type) }
8
+ let(:id) {}
9
+ let(:type) { :card }
10
+ let(:id) { '1' }
11
+ let(:default) { false }
12
+ let(:resource) {}
13
+ let(:presenter) { stub }
14
+
15
+ before do
16
+ API::Client.stubs(:perform)
17
+ @card = Fabricate.build(:card, default: default)
18
+ klass.stubs(:retrieve).returns(resource)
19
+ Presenters::Card.stubs(:new).returns(presenter)
20
+ presenter.stubs(:show).returns(@card.name)
21
+ end
22
+
23
+ after { database_cleanup }
24
+
25
+ describe '.dispatch' do
26
+ subject { described_class.dispatch(klass, id) }
27
+
28
+ context 'when a resource ID is provided' do
29
+ context 'and the resource exists' do
30
+ let(:resource) { @card }
31
+
32
+ it 'presents the cards' do
33
+ subject.must_match(/#{@card.name}/)
34
+ end
35
+ end
36
+
37
+ context 'but the resource does not exist' do
38
+ it 'returns a polite message' do
39
+ subject.must_match(/cannot be found/)
40
+ end
41
+ end
42
+ end
43
+
44
+ context 'when a resource ID is not provided' do
45
+ let(:id) {}
46
+
47
+ context 'and a default resource is set' do
48
+ let(:default) { true }
49
+ let(:resource) { @card }
50
+
51
+ it 'presents the cards' do
52
+ subject.must_match(/#{@card.name}/)
53
+ end
54
+ end
55
+
56
+ context 'and a default resource is not set' do
57
+ it 'returns a polite message' do
58
+ subject.must_match(/to set a default/)
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,48 @@
1
+ require_relative '../../../../test_helper'
2
+
3
+ module Troo
4
+ module Commands
5
+ describe Status do
6
+ let(:described_class) { Status }
7
+ let(:klass) { Troo::Board }
8
+ let(:default) { true }
9
+
10
+ before { API::Client.stubs(:perform) }
11
+
12
+ describe '.dispatch' do
13
+ subject { described_class.dispatch(klass) }
14
+
15
+ before { @board = Fabricate(:board, default: default) }
16
+ after { database_cleanup }
17
+
18
+ context 'when a default is set' do
19
+ it 'returns a polite message' do
20
+ subject.must_match(/1 board found/)
21
+ end
22
+
23
+ it 'returns the name of the resource' do
24
+ subject.must_match(/My Test Board/)
25
+ end
26
+ end
27
+
28
+ context 'when no default is set' do
29
+ let(:default) { false }
30
+
31
+ context 'and the resource exists' do
32
+ it 'returns a polite message' do
33
+ subject.must_match(/No default board set/)
34
+ end
35
+ end
36
+
37
+ context 'and no resources exist' do
38
+ before { klass.stubs(:count).returns(0) }
39
+
40
+ it 'returns a polite message' do
41
+ subject.must_match(/No boards found/)
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,39 @@
1
+ require_relative '../../../test_helper'
2
+
3
+ module Troo
4
+ module CLI
5
+ describe Default do
6
+ let(:described_class) { Default }
7
+
8
+ describe '#board' do
9
+ let(:id) {}
10
+
11
+ subject { capture_io { described_class.new.board(id) }.join }
12
+
13
+ it 'returns the output of the command' do
14
+ subject.must_match(/Board cannot be found/)
15
+ end
16
+ end
17
+
18
+ describe '#card' do
19
+ let(:id) {}
20
+
21
+ subject { capture_io { described_class.new.card(id) }.join }
22
+
23
+ it 'returns the output of the command' do
24
+ subject.must_match(/Card cannot be found/)
25
+ end
26
+ end
27
+
28
+ describe '#list' do
29
+ let(:id) {}
30
+
31
+ subject { capture_io { described_class.new.list(id) }.join }
32
+
33
+ it 'returns the output of the command' do
34
+ subject.must_match(/List cannot be found/)
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,102 @@
1
+ require_relative '../../../test_helper'
2
+
3
+ module Troo
4
+ module CLI
5
+ describe Main do
6
+ let(:described_class) { Main }
7
+
8
+ describe '#init' do
9
+ let(:exists) { false }
10
+
11
+ before do
12
+ File.stubs(:exist?).returns(exists)
13
+ FileUtils.stubs(:cp)
14
+ end
15
+
16
+ subject { capture_io { described_class.new.init }.join }
17
+
18
+ context 'when a configuration file exists' do
19
+ let(:exists) { true }
20
+
21
+ it 'returns the output of the command' do
22
+ subject.must_match(/already exists/)
23
+ end
24
+ end
25
+
26
+ context 'when a configuration file does not exist' do
27
+ it 'returns the output of the command' do
28
+ subject.must_match(/does not exist/)
29
+ end
30
+ end
31
+ end
32
+
33
+ describe '#status' do
34
+ before { Commands::Status.stubs(:dispatch) }
35
+
36
+ subject { capture_io { described_class.new.status }.join }
37
+
38
+ it 'returns the output of the command' do
39
+ subject.must_match(/Status/)
40
+ end
41
+
42
+ it 'returns the last refresh time' do
43
+ subject.must_match(/Last refreshed/)
44
+ end
45
+ end
46
+
47
+ describe '#config' do
48
+ subject { capture_io { described_class.new.config }.join }
49
+
50
+ it 'returns the current configuration' do
51
+ subject.must_match(/Current configuration/)
52
+ end
53
+ end
54
+
55
+ describe '#cleanup' do
56
+ let(:confirm) { "y\n" }
57
+
58
+ before { $stdin.stubs(:gets).returns(confirm) }
59
+
60
+ subject { capture_io { described_class.new.cleanup }.join }
61
+
62
+ context 'when the user confirms the operation' do
63
+ it 'returns the output of the command' do
64
+ subject.must_match(/All local data has been removed/)
65
+ end
66
+ end
67
+
68
+ context 'when the user cancels the operation' do
69
+ let(:confirm) { "n\n" }
70
+
71
+ it 'returns the output of the command' do
72
+ subject.must_match(/No local data has been removed/)
73
+ end
74
+ end
75
+ end
76
+
77
+ describe '#version' do
78
+ subject { capture_io { described_class.new.version }.join }
79
+
80
+ it 'returns the output of the command' do
81
+ subject.must_match(/#{Troo::VERSION}/)
82
+ end
83
+ end
84
+
85
+ describe '#move' do
86
+ let(:card_id) {}
87
+ let(:list_id) {}
88
+ let(:board_id) {}
89
+
90
+ subject do
91
+ capture_io do
92
+ described_class.new.move(card_id, list_id, board_id)
93
+ end.join
94
+ end
95
+
96
+ it 'returns the output of the command' do
97
+ subject.must_match(/Card cannot be found/)
98
+ end
99
+ end
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,43 @@
1
+ require_relative '../../../test_helper'
2
+
3
+ module Troo
4
+ module CLI
5
+ describe Refresh do
6
+ let(:described_class) { Refresh }
7
+
8
+ describe '#all' do
9
+ before { Retrieval::Remote.stubs(:fetch).returns([]) }
10
+
11
+ subject { capture_io { described_class.new.all }.join }
12
+
13
+ it 'returns the output of the command' do
14
+ subject.must_match(/Cannot refresh all local data/)
15
+ end
16
+ end
17
+
18
+ describe '#board' do
19
+ subject { capture_io { described_class.new.board }.join }
20
+
21
+ it 'returns the output of the command' do
22
+ subject.must_match(/Board cannot be found/)
23
+ end
24
+ end
25
+
26
+ describe '#card' do
27
+ subject { capture_io { described_class.new.card }.join }
28
+
29
+ it 'returns the output of the command' do
30
+ subject.must_match(/Card cannot be found/)
31
+ end
32
+ end
33
+
34
+ describe '#list' do
35
+ subject { capture_io { described_class.new.list }.join }
36
+
37
+ it 'returns the output of the command' do
38
+ subject.must_match(/List cannot be found/)
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,49 @@
1
+ require_relative '../../../test_helper'
2
+
3
+ module Troo
4
+ module CLI
5
+ describe Show do
6
+ let(:described_class) { Show }
7
+
8
+ describe '#boards' do
9
+ subject { capture_io { described_class.new.boards }.join }
10
+
11
+ it 'returns the output of the command' do
12
+ subject.must_match(/Boards cannot be found/)
13
+ end
14
+ end
15
+
16
+ describe '#board' do
17
+ subject { capture_io { described_class.new.board }.join }
18
+
19
+ it 'returns the output of the command' do
20
+ subject.must_match(/Board cannot be found/)
21
+ end
22
+ end
23
+
24
+ describe '#list' do
25
+ subject { capture_io { described_class.new.list }.join }
26
+
27
+ it 'returns the output of the command' do
28
+ subject.must_match(/List cannot be found/)
29
+ end
30
+ end
31
+
32
+ describe '#card' do
33
+ subject { capture_io { described_class.new.card }.join }
34
+
35
+ it 'returns the output of the command' do
36
+ subject.must_match(/Card cannot be found/)
37
+ end
38
+ end
39
+
40
+ describe '#comments' do
41
+ subject { capture_io { described_class.new.comments }.join }
42
+
43
+ it 'returns the output of the command' do
44
+ subject.must_match(/Card cannot be found/)
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,38 @@
1
+ require_relative '../../../test_helper'
2
+
3
+ module Troo
4
+ module CLI
5
+ describe ThorFixes do
6
+ let(:described_class) { ThorFixes }
7
+ let(:command) { stub(usage: 'usage') }
8
+ let(:namespace) {}
9
+ let(:subcommand) {}
10
+ let(:package_name) {}
11
+
12
+ describe '.banner' do
13
+ before do
14
+ described_class
15
+ .instance_variable_set('@package_name', package_name)
16
+ end
17
+
18
+ subject do
19
+ described_class.banner(command, namespace, subcommand)
20
+ end
21
+
22
+ context 'when executing a subcommand' do
23
+ let(:package_name) { 'show' }
24
+
25
+ it 'package_name has a leading space' do
26
+ subject.must_match(/show usage/)
27
+ end
28
+ end
29
+
30
+ context 'when executing a top-level command' do
31
+ it 'package_name does not have a leading space' do
32
+ subject.must_match(/\s{1}usage/)
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end