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
@@ -1,94 +0,0 @@
1
- require_relative '../../../test_helper'
2
-
3
- module Troo
4
- module External
5
- describe List do
6
- let(:described_class) { List }
7
-
8
- describe 'when the mode is board' do
9
- before do
10
- VCR.insert_cassette(:lists_by_board_id,
11
- decode_compressed_response: true)
12
- end
13
- after { VCR.eject_cassette }
14
-
15
- let(:board_id) { '526d8e130a14a9d846001d96' }
16
- let(:options) { { mode: :board } }
17
-
18
- subject { described_class.fetch(board_id, options) }
19
-
20
- it 'returns multiple lists' do
21
- subject.size.must_equal(4)
22
- end
23
-
24
- context 'when the board cannot be found' do
25
- before { Trello::Board.stubs(:find).raises(Trello::Error) }
26
-
27
- it 'returns an empty collection' do
28
- subject.must_equal([])
29
- end
30
- end
31
-
32
- context 'when the access token is invalid' do
33
- before do
34
- Trello::Board.stubs(:find)
35
- .raises(Trello::InvalidAccessToken)
36
- end
37
-
38
- subject { described_class.new(board_id, options).fetch }
39
-
40
- it 'catches the exception and re-raises' do
41
- proc { subject }.must_raise(Troo::InvalidAccessToken)
42
- end
43
- end
44
- end
45
-
46
- describe 'when the mode is list' do
47
- before do
48
- VCR.insert_cassette(:list_by_list_id,
49
- decode_compressed_response: true)
50
- end
51
- after { VCR.eject_cassette }
52
-
53
- let(:list_id) { '526d8e130a14a9d846001d97' }
54
- let(:options) { { mode: :list } }
55
-
56
- subject { described_class.fetch(list_id, options) }
57
-
58
- it 'returns a list with the list_id' do
59
- subject.size.must_equal(1)
60
- end
61
-
62
- context 'when the list cannot be found' do
63
- before { Trello::List.stubs(:find).raises(Trello::Error) }
64
-
65
- it 'returns an empty collection' do
66
- subject.must_equal([])
67
- end
68
- end
69
- end
70
-
71
- describe 'when the mode is card' do
72
- let(:card_id) { '526d8f19ddb279532e005259' }
73
- let(:options) { { mode: :card } }
74
-
75
- subject { described_class.fetch(card_id, options) }
76
-
77
- it 'returns an empty collection' do
78
- subject.must_equal([])
79
- end
80
- end
81
-
82
- describe 'when the mode is member' do
83
- let(:member_id) { '5195fdb5a8c01a2318004f5d' }
84
- let(:options) { { mode: :member } }
85
-
86
- subject { described_class.fetch(member_id, options) }
87
-
88
- it 'returns an empty collection' do
89
- subject.must_equal([])
90
- end
91
- end
92
- end
93
- end
94
- end
@@ -1,94 +0,0 @@
1
- require_relative '../../../test_helper'
2
-
3
- module Troo
4
- module External
5
- describe Member do
6
- let(:described_class) { Member }
7
-
8
- describe 'when the mode is board' do
9
- before do
10
- VCR.insert_cassette(:members_by_board_id,
11
- decode_compressed_response: true)
12
- end
13
- after { VCR.eject_cassette }
14
-
15
- let(:board_id) { '526d8e130a14a9d846001d96' }
16
- let(:options) { { mode: :board } }
17
-
18
- subject { described_class.fetch(board_id, options) }
19
-
20
- it 'returns multiple members' do
21
- subject.size.must_equal(1)
22
- end
23
-
24
- context 'when the board cannot be found' do
25
- before { Trello::Board.stubs(:find).raises(Trello::Error) }
26
-
27
- it 'returns an empty collection' do
28
- subject.must_equal([])
29
- end
30
- end
31
-
32
- context 'when the access token is invalid' do
33
- before do
34
- Trello::Board.stubs(:find)
35
- .raises(Trello::InvalidAccessToken)
36
- end
37
-
38
- subject { described_class.new(board_id, options).fetch }
39
-
40
- it 'catches the exception and re-raises' do
41
- proc { subject }.must_raise(Troo::InvalidAccessToken)
42
- end
43
- end
44
- end
45
-
46
- describe 'when the mode is list' do
47
- let(:list_id) { '526d8e130a14a9d846001d97' }
48
- let(:options) { { mode: :list } }
49
-
50
- subject { described_class.fetch(list_id, options) }
51
-
52
- it 'returns an empty collection' do
53
- subject.must_equal([])
54
- end
55
- end
56
-
57
- describe 'when the mode is card' do
58
- let(:card_id) { '526d8f19ddb279532e005259' }
59
- let(:options) { { mode: :card } }
60
-
61
- subject { described_class.fetch(card_id, options) }
62
-
63
- it 'returns an empty collection' do
64
- subject.must_equal([])
65
- end
66
- end
67
-
68
- describe 'when the mode is member' do
69
- before do
70
- VCR.insert_cassette(:member_by_member_id,
71
- decode_compressed_response: true)
72
- end
73
- after { VCR.eject_cassette }
74
-
75
- let(:member_id) { '5195fdb5a8c01a2318004f5d' }
76
- let(:options) { { mode: :member } }
77
-
78
- subject { described_class.fetch(member_id, options) }
79
-
80
- it 'returns a member with the member_id' do
81
- subject.size.must_equal(1)
82
- end
83
-
84
- context 'when the member cannot be found' do
85
- before { Trello::Member.stubs(:find).raises(Trello::Error) }
86
-
87
- it 'returns an empty collection' do
88
- subject.must_equal([])
89
- end
90
- end
91
- end
92
- end
93
- end
94
- end
@@ -1,25 +0,0 @@
1
- require_relative '../../../test_helper'
2
-
3
- module Troo
4
- module External
5
- describe Resource do
6
- let(:described_class) { Resource }
7
- let(:external_id) { '526d8e130a14a9d846001d96' }
8
- let(:options) { {} }
9
-
10
- describe '.initialize' do
11
- subject { described_class.new(external_id, options) }
12
-
13
- it 'assigns the external_id to an instance variable' do
14
- subject.instance_variable_get('@external_id')
15
- .must_equal(external_id)
16
- end
17
-
18
- it 'assigns the options to an instance variable' do
19
- subject.instance_variable_get('@options')
20
- .must_equal(options)
21
- end
22
- end
23
- end
24
- end
25
- end
@@ -1,82 +0,0 @@
1
- require_relative '../../../test_helper'
2
-
3
- class CommandHelpersDummy
4
- include Troo::CommandHelpers
5
-
6
- def initialize(type, id)
7
- @type, @id = type, id
8
- end
9
-
10
- private
11
-
12
- attr_accessor :type
13
- end
14
-
15
- module Troo
16
- describe CommandHelpers do
17
- let(:described_class) { CommandHelpersDummy }
18
- let(:described_instance) { described_class.new(type, id) }
19
- let(:type) { :board }
20
- let(:id) { nil }
21
-
22
- describe '#error_no_default' do
23
- subject { described_instance.error_no_default }
24
-
25
- context 'when the type is comments' do
26
- let(:type) { :comments }
27
-
28
- it 'returns the no default set error message' do
29
- subject.must_match(/to set a default card first/)
30
- end
31
- end
32
-
33
- context 'when the type is not comments' do
34
- it 'returns the no default set error message' do
35
- subject.must_match(/to set a default board first/)
36
- end
37
- end
38
- end
39
-
40
- describe '#error_not_found' do
41
- subject { described_instance.error_not_found }
42
-
43
- context 'when the type is comments' do
44
- let(:type) { :comments }
45
-
46
- it 'returns the not found error message' do
47
- subject.must_match(/Card cannot be found/)
48
- end
49
- end
50
-
51
- context 'when the type is not comments' do
52
- it 'returns the no default set error message' do
53
- subject.must_match(/Board cannot be found/)
54
- end
55
- end
56
- end
57
-
58
- describe '#type_str' do
59
- subject { described_instance.type_str }
60
-
61
- it 'returns the type as a string' do
62
- subject.must_equal('board')
63
- end
64
- end
65
-
66
- describe '#type_capitalize' do
67
- subject { described_instance.type_capitalize }
68
-
69
- it 'returns the type as a capitalized string' do
70
- subject.must_equal('Board')
71
- end
72
- end
73
-
74
- describe '#type_pluralize' do
75
- subject { described_instance.type_pluralize }
76
-
77
- it 'returns the type as a pluralized string' do
78
- subject.must_equal('boards')
79
- end
80
- end
81
- end
82
- end
@@ -1,62 +0,0 @@
1
- require_relative '../../../../test_helper'
2
-
3
- module Troo
4
- describe Persistence::Board do
5
- let(:described_class) { Persistence::Board }
6
- let(:resource) do
7
- OpenStruct.new(
8
- id: '526d8e130a14a9d846001d96',
9
- name: resource_name,
10
- description: 'A very brief description...',
11
- closed: false)
12
- end
13
- let(:resource_name) { 'My Test Board' }
14
- let(:options) { {} }
15
-
16
- before { @board = Fabricate(:board) }
17
- after { database_cleanup }
18
-
19
- describe '.initialize' do
20
- subject { described_class.new(resource, options) }
21
-
22
- it 'assigns the resource to an instance variable' do
23
- subject.instance_variable_get('@resource')
24
- .must_equal(resource)
25
- end
26
-
27
- it 'assigns the options to an instance variable' do
28
- subject.instance_variable_get('@options').must_equal(options)
29
- end
30
- end
31
-
32
- describe '#persist' do
33
- subject { described_class.for(resource, options) }
34
-
35
- context 'when there is already a local copy' do
36
- context 'and the local copy is identical' do
37
- it 'returns the local copy' do
38
- subject.must_equal(@board)
39
- end
40
- end
41
-
42
- context 'and the local copy is out of date' do
43
- let(:resource_name) { 'My Renamed Board' }
44
-
45
- it 'updates and returns the new local copy' do
46
- subject.name.must_equal(resource_name)
47
- end
48
- end
49
- end
50
-
51
- context 'when there is not already a local copy' do
52
- let(:resource_name) { 'My New Test Board' }
53
-
54
- before { database_cleanup }
55
-
56
- it 'creates and returns the new local copy' do
57
- subject.name.must_equal(resource_name)
58
- end
59
- end
60
- end
61
- end
62
- end
@@ -1,61 +0,0 @@
1
- require_relative '../../../../test_helper'
2
-
3
- module Troo
4
- describe Persistence::Card do
5
- let(:described_class) { Persistence::Card }
6
- let(:resource) do
7
- OpenStruct.new(
8
- id: '526d8f19ddb279532e005259',
9
- name: resource_name,
10
- closed: false)
11
- end
12
- let(:resource_name) { 'My Test Card' }
13
- let(:options) { {} }
14
-
15
- before { @card = Fabricate(:card) }
16
- after { database_cleanup }
17
-
18
- describe '.initialize' do
19
- subject { described_class.new(resource, options) }
20
-
21
- it 'assigns the resource to an instance variable' do
22
- subject.instance_variable_get('@resource')
23
- .must_equal(resource)
24
- end
25
-
26
- it 'assigns the options to an instance variable' do
27
- subject.instance_variable_get('@options').must_equal(options)
28
- end
29
- end
30
-
31
- describe '#persist' do
32
- subject { described_class.for(resource, options) }
33
-
34
- context 'when there is already a local copy' do
35
- context 'and the local copy is identical' do
36
- it 'returns the local copy' do
37
- subject.must_equal(@card)
38
- end
39
- end
40
-
41
- context 'and the local copy is out of date' do
42
- let(:resource_name) { 'My Renamed Card' }
43
-
44
- it 'updates and returns the new local copy' do
45
- subject.name.must_equal(resource_name)
46
- end
47
- end
48
- end
49
-
50
- context 'when there is not already a local copy' do
51
- let(:resource_name) { 'My New Test Card' }
52
-
53
- before { database_cleanup }
54
-
55
- it 'creates and returns the new local copy' do
56
- subject.name.must_equal(resource_name)
57
- end
58
- end
59
- end
60
- end
61
- end
@@ -1,69 +0,0 @@
1
- require_relative '../../../../test_helper'
2
-
3
- module Troo
4
- describe Persistence::Comment do
5
- let(:described_class) { Persistence::Comment }
6
- let(:resource) do
7
- OpenStruct.new(
8
- id: '51f9277b2822b8654f0023af',
9
- date: '2013-12-17 22:01:13 UTC',
10
- data: {
11
- 'text' => resource_text,
12
- 'board' => {
13
- 'id' => '526d8e130a14a9d846001d96'
14
- },
15
- 'card' => {
16
- 'id' => '526d8f19ddb279532e005259'
17
- }
18
- })
19
- end
20
- let(:resource_text) { 'My Test Comment' }
21
- let(:options) { {} }
22
-
23
- before { @comment = Fabricate(:comment) }
24
- after { database_cleanup }
25
-
26
- describe '.initialize' do
27
- subject { described_class.new(resource, options) }
28
-
29
- it 'assigns the resource to an instance variable' do
30
- subject.instance_variable_get('@resource')
31
- .must_equal(resource)
32
- end
33
-
34
- it 'assigns the options to an instance variable' do
35
- subject.instance_variable_get('@options').must_equal(options)
36
- end
37
- end
38
-
39
- describe '#persist' do
40
- subject { described_class.for(resource, options) }
41
-
42
- context 'when there is already a local copy' do
43
- context 'and the local copy is identical' do
44
- it 'returns the local copy' do
45
- subject.must_equal(@comment)
46
- end
47
- end
48
-
49
- context 'and the local copy is out of date' do
50
- let(:resource_text) { 'My Renamed Comment' }
51
-
52
- it 'updates and returns the new local copy' do
53
- subject.text.must_equal(resource_text)
54
- end
55
- end
56
- end
57
-
58
- context 'when there is not already a local copy' do
59
- let(:resource_text) { 'My New Test Comment' }
60
-
61
- before { database_cleanup }
62
-
63
- it 'creates and returns the new local copy' do
64
- subject.text.must_equal(resource_text)
65
- end
66
- end
67
- end
68
- end
69
- end