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
@@ -6,18 +6,6 @@ module Troo
6
6
  let(:elements) { ['Hydrogen'] }
7
7
  let(:label) { 'elements' }
8
8
 
9
- describe '#initialize' do
10
- subject { described_class.new(elements, label) }
11
-
12
- it 'assigns the elements to an instance variable' do
13
- subject.instance_variable_get('@elements').must_equal(elements)
14
- end
15
-
16
- it 'assigns the label to an instance variable' do
17
- subject.instance_variable_get('@label').must_equal(label)
18
- end
19
- end
20
-
21
9
  describe '.construct' do
22
10
  subject { described_class.construct(elements, label) }
23
11
 
@@ -3,22 +3,9 @@ require_relative '../../../test_helper'
3
3
  module Troo
4
4
  describe Template do
5
5
  let(:described_class) { Template }
6
- let(:object) { OpenStruct.new(value: 'Hello from variable!') }
6
+ let(:object) { stub(value: 'Hello from variable!') }
7
7
  let(:template_path) { '/../../../test/support/template.erb' }
8
8
 
9
- describe '#initialize' do
10
- subject { described_class.new(object, template_path) }
11
-
12
- it 'assigns the object to an instance variable' do
13
- subject.instance_variable_get('@object').must_equal(object)
14
- end
15
-
16
- it 'assigns the template_path to an instance variable' do
17
- subject.instance_variable_get('@template_path')
18
- .must_equal(template_path)
19
- end
20
- end
21
-
22
9
  describe '#parse' do
23
10
  subject { described_class.new(object, template_path).parse }
24
11
 
@@ -4,62 +4,45 @@ module Troo
4
4
  module Presenters
5
5
  describe Board do
6
6
  let(:described_class) { Board }
7
- let(:options) { {} }
7
+ let(:board) { Fabricate(:board).decorator }
8
+ let(:options) { {} }
9
+ let(:lists) { [] }
10
+ let(:list) { Fabricate(:list).decorator }
11
+ let(:cards) { [] }
12
+ let(:card) { Fabricate(:card).decorator }
8
13
 
9
14
  before do
10
- @board = Fabricate(:board)
11
- @list = Fabricate(:list)
12
- @card = Fabricate(:card)
15
+ board.stubs(:lists).returns(lists)
16
+ list.stubs(:cards).returns(cards)
13
17
  end
14
18
 
15
19
  after { database_cleanup }
16
20
 
17
- describe '#initialize' do
18
- subject { described_class.new(@board, options) }
19
-
20
- it 'assigns the board to an instance variable' do
21
- subject.instance_variable_get('@board').must_equal(@board)
21
+ describe '#show' do
22
+ subject do
23
+ capture_io { described_class.new(board, options).show }.join
22
24
  end
23
25
 
24
- it 'assigns the options to an instance variable' do
25
- subject.instance_variable_get('@options').must_equal(options)
26
+ it 'renders the view' do
27
+ subject.must_match(/My Test Board/)
26
28
  end
27
- end
28
-
29
- describe '#all' do
30
- subject { capture_io { described_class.all([@board], options) }.join }
31
29
 
32
30
  context 'when the board has lists' do
31
+ let(:lists) { [list] }
32
+
33
33
  it 'renders the view' do
34
- subject.must_match(/My Test Board/)
35
34
  subject.must_match(/My Test List/)
36
35
  end
37
- end
38
-
39
- context 'when the board has no lists' do
40
- before { @list.delete }
41
-
42
- it 'returns a polite message' do
43
- subject.must_match(/No lists were found./)
44
- end
45
- end
46
- end
47
-
48
- describe '#show' do
49
- subject { capture_io { described_class.show(@board, options) }.join }
50
36
 
51
- context 'when the board has lists' do
52
37
  context 'and the list has cards' do
38
+ let(:cards) { [card] }
39
+
53
40
  it 'renders the view' do
54
- subject.must_match(/My Test Board/)
55
- subject.must_match(/My Test List/)
56
41
  subject.must_match(/My Test Card/)
57
42
  end
58
43
  end
59
44
 
60
45
  context 'and the list has no cards' do
61
- before { @card.delete }
62
-
63
46
  it 'returns a polite message' do
64
47
  subject.must_match(/No cards were found./)
65
48
  end
@@ -67,8 +50,6 @@ module Troo
67
50
  end
68
51
 
69
52
  context 'when the board has no lists' do
70
- before { @board.stubs(:lists).returns([]) }
71
-
72
53
  it 'returns a polite message' do
73
54
  subject.must_match(/No lists were found./)
74
55
  end
@@ -4,38 +4,8 @@ module Troo
4
4
  module Presenters
5
5
  describe Card do
6
6
  let(:described_class) { Card }
7
- let(:options) { {} }
8
7
 
9
- before do
10
- @card = Fabricate(:card)
11
- @board = Fabricate(:board)
12
- @list = Fabricate(:list)
13
- @member = Fabricate(:member)
14
- end
15
-
16
- after { database_cleanup }
17
-
18
- describe '#initialize' do
19
- subject { described_class.new(@card, options) }
20
-
21
- it 'assigns the card to an instance variable' do
22
- subject.instance_variable_get('@card').must_equal(@card)
23
- end
24
-
25
- it 'assigns the options to an instance variable' do
26
- subject.instance_variable_get('@options').must_equal(options)
27
- end
28
- end
29
-
30
- describe '#show' do
31
- subject { capture_io { described_class.show(@card, options) }.join }
32
-
33
- it 'renders the view' do
34
- subject.must_match(/My Test Card/)
35
- subject.must_match(/No comments have been left/)
36
- subject.must_match(/Metadata/)
37
- end
38
- end
8
+ # tested via integration tests
39
9
  end
40
10
  end
41
11
  end
@@ -4,41 +4,41 @@ module Troo
4
4
  module Presenters
5
5
  describe Comment do
6
6
  let(:described_class) { Comment }
7
- let(:options) { {} }
7
+ let(:card) { Fabricate(:card) }
8
+ let(:options) { {} }
9
+
10
+ let(:comments) { [] }
11
+ let(:comment) { Fabricate(:comment) }
12
+ let(:decorator) { stub }
13
+ let(:output) { '' }
8
14
 
9
15
  before do
10
- @card = Fabricate(:card)
11
- @comment = Fabricate(:comment)
12
- @member = Fabricate(:member)
16
+ card.stubs(:comments).returns(comments)
17
+ comment.stubs(:decorator).returns(decorator)
18
+ decorator.stubs(:as_view).returns(output)
13
19
  end
14
20
 
15
21
  after { database_cleanup }
16
22
 
17
- describe '#initialize' do
18
- subject { described_class.new(@card, options) }
19
-
20
- it 'assigns the card to an instance variable' do
21
- subject.instance_variable_get('@card').must_equal(@card)
23
+ describe '#show' do
24
+ subject do
25
+ capture_io { described_class.new(card, options).show }.join
22
26
  end
23
27
 
24
- it 'assigns the options to an instance variable' do
25
- subject.instance_variable_get('@options').must_equal(options)
28
+ it 'renders the card title' do
29
+ subject.must_match(/My Test Card/)
26
30
  end
27
- end
28
-
29
- describe '#show' do
30
- subject { capture_io { described_class.show(@card, options) }.join }
31
31
 
32
32
  context 'when the card has comments' do
33
- it 'renders the view' do
34
- subject.must_match(/My Test Card/)
33
+ let(:comments) { [comment] }
34
+ let(:output) { 'My Test Comment' }
35
+
36
+ it 'renders the comments' do
35
37
  subject.must_match(/My Test Comment/)
36
38
  end
37
39
  end
38
40
 
39
41
  context 'when the card has no comments' do
40
- before { @comment.delete }
41
-
42
42
  it 'returns a polite message' do
43
43
  subject.must_match(/No comments were found/)
44
44
  end
@@ -4,42 +4,42 @@ module Troo
4
4
  module Presenters
5
5
  describe List do
6
6
  let(:described_class) { List }
7
- let(:options) { {} }
7
+ let(:list) { Fabricate(:list).decorator }
8
+ let(:options) { {} }
9
+
10
+ let(:board) { Fabricate(:board).decorator }
11
+ let(:card) { Fabricate(:card).decorator }
12
+ let(:cards) { [] }
8
13
 
9
14
  before do
10
- @list = Fabricate(:list)
11
- @board = Fabricate(:board)
12
- @card = Fabricate(:card)
15
+ list.stubs(:board).returns(board)
16
+ list.stubs(:cards).returns(cards)
13
17
  end
14
18
 
15
19
  after { database_cleanup }
16
20
 
17
- describe '#initialize' do
18
- subject { described_class.new(@list, options) }
19
-
20
- it 'assigns the list to an instance variable' do
21
- subject.instance_variable_get('@list').must_equal(@list)
21
+ describe '#show' do
22
+ subject do
23
+ capture_io { described_class.new(list, options).show }.join
22
24
  end
23
25
 
24
- it 'assigns the options to an instance variable' do
25
- subject.instance_variable_get('@options').must_equal(options)
26
+ it 'renders the board title for the list' do
27
+ subject.must_match(/My Test Board/)
26
28
  end
27
- end
28
29
 
29
- describe '#show' do
30
- subject { capture_io { described_class.show(@list, options) }.join }
30
+ it 'renders the list title' do
31
+ subject.must_match(/My Test List/)
32
+ end
31
33
 
32
34
  context 'when the list has cards' do
35
+ let(:cards) { [card] }
36
+
33
37
  it 'renders the view' do
34
- subject.must_match(/My Test Board/)
35
- subject.must_match(/My Test List/)
36
38
  subject.must_match(/My Test Card/)
37
39
  end
38
40
  end
39
41
 
40
42
  context 'when the list has no cards' do
41
- before { @card.delete }
42
-
43
43
  it 'returns a polite message' do
44
44
  subject.must_match(/No cards were found./)
45
45
  end
@@ -15,21 +15,8 @@ module Troo
15
15
 
16
16
  after { database_cleanup }
17
17
 
18
- describe '#initialize' do
19
- subject { described_class.new(@card, options) }
20
-
21
- it 'assigns the card to an instance variable' do
22
- subject.instance_variable_get('@card').must_equal(@card)
23
- end
24
-
25
- it 'assigns the options to an instance variable' do
26
- subject.instance_variable_get('@options')
27
- .must_equal(options)
28
- end
29
- end
30
-
31
18
  describe '#show' do
32
- subject { described_class.show(@card, options) }
19
+ subject { described_class.new(@card, options).show }
33
20
 
34
21
  it 'returns the members as a sentence' do
35
22
  subject.must_equal('@gavinlaking1')
@@ -0,0 +1,66 @@
1
+ require_relative '../../../test_helper'
2
+
3
+ module Troo
4
+ module Remote
5
+ describe Board 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
+
12
+ let(:described_class) { Board }
13
+ let(:resource) { load_mock_trello_response }
14
+ let(:described_instance) { described_class.new(resource) }
15
+
16
+ describe '.remote_options' do
17
+ subject { described_class.remote_options }
18
+
19
+ it 'returns the default remote options' do
20
+ subject.fetch(:mode).must_equal(:board)
21
+ end
22
+ end
23
+
24
+ describe '.all' do
25
+ subject { described_class.all }
26
+
27
+ it 'returns the resource parameters' do
28
+ subject.fetch(:endpoint).must_equal(:boards_all)
29
+ end
30
+ end
31
+
32
+ describe '.by_board_id' do
33
+ subject { described_class.by_board_id }
34
+
35
+ it 'returns the resource parameters' do
36
+ subject.fetch(:endpoint).must_equal(:board_by_id)
37
+ end
38
+ end
39
+
40
+ describe '#associations' do
41
+ subject { described_instance.associations }
42
+
43
+ it { subject.must_equal [:lists, :cards, :members] }
44
+ end
45
+
46
+ describe '#local_model' do
47
+ subject { described_instance.local_model }
48
+
49
+ it { subject.must_equal Troo::Board }
50
+ end
51
+
52
+ describe '#adapted' do
53
+ subject { described_instance.adapted }
54
+
55
+ it 'returns an adapted resource for local persistence' do
56
+ subject.must_equal(
57
+ external_id: '526d8e130a14a9d846001d96',
58
+ name: 'My Test Board',
59
+ description: 'A very brief description...',
60
+ closed: false
61
+ )
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,81 @@
1
+ require_relative '../../../test_helper'
2
+
3
+ module Troo
4
+ module Remote
5
+ describe Card do
6
+ let(:described_class) { Card }
7
+ let(:resource) { load_mock_trello_response }
8
+ let(:described_instance) { described_class.new(resource) }
9
+
10
+ def load_mock_trello_response
11
+ json = File.read('./test/support/remotes/card.json')
12
+ hash = Yajl::Parser.parse(json)
13
+ Troo::Remote::Card.new(hash)
14
+ end
15
+
16
+ describe '.remote_options' do
17
+ subject { described_class.remote_options }
18
+
19
+ it 'returns the default remote options' do
20
+ subject.fetch(:mode).must_equal(:card)
21
+ end
22
+ end
23
+
24
+ describe '.by_board_id' do
25
+ subject { described_class.by_board_id }
26
+
27
+ it 'returns the resource parameters' do
28
+ subject.fetch(:endpoint).must_equal(:cards_by_board_id)
29
+ end
30
+ end
31
+
32
+ describe '.by_list_id' do
33
+ subject { described_class.by_list_id }
34
+
35
+ it 'returns the resource parameters' do
36
+ subject.fetch(:endpoint).must_equal(:cards_by_list_id)
37
+ end
38
+ end
39
+
40
+ describe '.by_card_id' do
41
+ subject { described_class.by_card_id }
42
+
43
+ it 'returns the resource parameters' do
44
+ subject.fetch(:endpoint).must_equal(:card_by_id)
45
+ end
46
+ end
47
+
48
+ describe '#associations' do
49
+ subject { described_instance.associations }
50
+
51
+ it { subject.must_equal [:actions] }
52
+ end
53
+
54
+ describe '#local_model' do
55
+ subject { described_instance.local_model }
56
+
57
+ it { subject.must_equal Troo::Card }
58
+ end
59
+
60
+ describe '#adapted' do
61
+ subject { described_instance.adapted }
62
+
63
+ it 'returns an adapted resource for local persistence' do
64
+ subject.must_equal(
65
+ external_board_id: '526d8e130a14a9d846001d96',
66
+ external_list_id: '526d8e130a14a9d846001d98',
67
+ external_id: '526d8f19ddb279532e005259',
68
+ external_member_ids: ['5195fdb5a8c01a2318004f5d'],
69
+ short_id: 67,
70
+ name: 'My Test Card',
71
+ desc: 'some description',
72
+ url: '<Trello URL>',
73
+ position: 589_823,
74
+ last_activity_date: '2014-02-13T20:12:46.612Z',
75
+ closed: false
76
+ )
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end