mr_poole 0.1.0 → 0.2.0

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.
data/spec/cli_spec.rb CHANGED
@@ -1,328 +1,288 @@
1
1
  require 'spec_helper'
2
-
3
2
  require 'mr_poole'
4
- require 'fileutils'
5
- require 'stringio'
6
3
 
7
4
  module MrPoole
8
5
  describe CLI do
9
6
 
10
7
  context 'should determine jekyll dir correctly' do
11
-
12
8
  it 'should exit with no _posts directory' do
13
9
  olddir, tmpdir = make_no_jekyll_dir
14
-
15
- argv = []
16
- output = capture_stdout do
17
- begin
18
- cli = CLI.new(argv)
19
- rescue SystemExit => e
20
- e.should be_instance_of(SystemExit)
21
- end
22
- end
23
-
10
+ expect {capture_stdout { cli = CLI.new([]) }}.to raise_error(SystemExit)
24
11
  clean_tmp_files(tmpdir, olddir)
25
12
  end
26
13
 
27
14
  it 'should not exit with _posts directory' do
28
15
  olddir, tmpdir = make_jekyll_dir
29
-
30
- argv = []
31
- lambda { cli = CLI.new(argv) }.should_not raise_error
32
-
16
+ expect { cli = CLI.new([]) }.not_to raise_error
33
17
  clean_tmp_files(tmpdir, olddir)
34
18
  end
35
-
36
- end # end context determine jekyll dir
19
+ end # context determine jekyll dir
37
20
 
38
21
  describe "action 'post'" do
39
-
40
- before :each do
41
- @olddir, @tmpdir = make_jekyll_dir
42
- end
43
-
44
- after :each do
45
- clean_tmp_files(@tmpdir, @olddir)
46
- end
22
+ before(:each) { @olddir, @tmpdir = make_jekyll_dir }
23
+ after(:each) { clean_tmp_files(@tmpdir, @olddir) }
47
24
 
48
25
  context 'error handling' do
49
-
50
26
  it 'should fail with no arguments' do
51
27
  argv = ['post']
52
-
53
- expect {
54
- poole_with_args_no_stdout(argv).call
55
- }.to raise_error(SystemExit)
28
+ expect { poole_no_stdout(argv).call }.to raise_error(SystemExit)
56
29
  end
57
30
 
58
31
  it 'should fail with no title (with slug)' do
59
32
  argv = ['post', '-s', 'post_slug']
60
-
61
- expect {
62
- poole_with_args_no_stdout(argv).call
63
- }.to raise_error(SystemExit)
33
+ expect { poole_no_stdout(argv).call }.to raise_error(SystemExit)
64
34
  end
65
35
 
66
36
  it 'should not fail with a title (no switch)' do
67
37
  argv = ['post', 'Here is a title']
68
-
69
- expect {
70
- poole_with_args_no_stdout(argv).call
71
- }.not_to raise_error
38
+ expect { poole_no_stdout(argv).call }.not_to raise_error
72
39
  end
73
40
 
74
41
  it 'should not fail with a title (long switch)' do
75
42
  argv = ['post', '--title', 'Here is a title']
76
-
77
- expect {
78
- poole_with_args_no_stdout(argv).call
79
- }.not_to raise_error
43
+ expect { poole_no_stdout(argv).call }.not_to raise_error
80
44
  end
81
45
 
82
46
  it 'should not fail with a title (short switch)' do
83
47
  argv = ['post', '-t', 'Here is a title']
84
-
85
- expect {
86
- poole_with_args_no_stdout(argv).call
87
- }.not_to raise_error
48
+ expect { poole_no_stdout(argv).call }.not_to raise_error
88
49
  end
89
-
90
50
  end # context error handling
91
51
 
92
52
  context 'exit message' do
93
-
94
53
  it 'should exit with a usage message' do
95
54
  argv = ['post']
55
+ output = aborted_poole_output(argv).call
56
+ expect(output).to match(/Usage:\s+poole post/)
57
+ end
58
+ end # context exit message
96
59
 
97
- output = capture_stdout do
98
- begin
99
- poole_with_args(argv).call
100
- rescue SystemExit => e
101
- # this will fail, but we want the exit message
102
- end
103
- end
60
+ context 'custom layout' do
61
+ let(:layout_path) { write_custom_layout }
104
62
 
105
- output.should match(/Usage:\s+poole post/)
63
+ it 'should use custom layout with --layout' do
64
+ argv = ['post', '--layout', layout_path, '--title', 'title']
65
+ poole_no_stdout(argv).call
66
+ new_file = Dir.glob("_posts/*.md").first
67
+ content = File.open(new_file, 'r').read
68
+ expect(content).to match(/tags: testing/)
106
69
  end
107
70
 
108
- end # context exit message
71
+ it 'should exit with bad layout path' do
72
+ argv = ['post', '--layout', 'bogus_path.md', 'title']
73
+ expect { poole_no_stdout(argv).call }.to raise_error(SystemExit)
74
+ end
75
+ end # context custom layout
109
76
 
110
- end # end describe post
77
+ context 'default_layout in config file' do
78
+ before(:each) { write_config_file_custom_layout }
111
79
 
112
- describe "action 'draft'" do
80
+ it 'overrides default layout' do
81
+ argv = ['post', 'post title']
82
+ poole_no_stdout(argv).call
83
+ new_file = Dir.glob("_posts/*.md").first
84
+ content = File.open(new_file, 'r').read
85
+ expect(content).to match(/tags: from_config/)
86
+ end
113
87
 
114
- before :each do
115
- @olddir, @tmpdir = make_jekyll_dir
116
- end
88
+ it 'is overridden by command-line layout switch' do
89
+ custom_path = write_custom_layout
117
90
 
118
- after :each do
119
- clean_tmp_files(@tmpdir, @olddir)
120
- end
91
+ argv = ['post', '--layout', custom_path, '--title', 'title']
92
+ poole_no_stdout(argv).call
93
+ new_file = Dir.glob("_posts/*.md").first
94
+ content = File.open(new_file, 'r').read
95
+ expect(content).not_to match(/tags: from_config/)
96
+ expect(content).to match(/tags: testing/)
97
+ end
98
+ end # default layout in config
121
99
 
122
- context 'error handling' do
100
+ end # end describe post
123
101
 
102
+ describe "action 'draft'" do
103
+ before(:each) { @olddir, @tmpdir = make_jekyll_dir }
104
+ after(:each) { clean_tmp_files(@tmpdir, @olddir) }
105
+
106
+ context 'error handling' do
124
107
  it 'should fail with no arguments' do
125
108
  argv = ['draft']
126
-
127
- expect {
128
- poole_with_args_no_stdout(argv).call
129
- }.to raise_error(SystemExit)
109
+ expect { poole_no_stdout(argv).call }.to raise_error(SystemExit)
130
110
  end
131
111
 
132
112
  it 'should fail with no title (with slug)' do
133
113
  argv = ['draft', '-s', 'draft_slug']
134
-
135
- expect {
136
- poole_with_args_no_stdout(argv).call
137
- }.to raise_error(SystemExit)
114
+ expect { poole_no_stdout(argv).call }.to raise_error(SystemExit)
138
115
  end
139
116
 
140
117
  it 'should not fail with a title (no switch)' do
141
118
  argv = ['draft', 'Here is a title']
142
-
143
- expect {
144
- poole_with_args_no_stdout(argv).call
145
- }.not_to raise_error
119
+ expect { poole_no_stdout(argv).call }.not_to raise_error
146
120
  end
147
121
 
148
122
  it 'should not fail with a title (long switch)' do
149
123
  argv = ['draft', '--title', 'Here is a title']
150
-
151
- expect {
152
- poole_with_args_no_stdout(argv).call
153
- }.not_to raise_error
124
+ expect { poole_no_stdout(argv).call }.not_to raise_error
154
125
  end
155
126
 
156
127
  it 'should not fail with a title (short switch)' do
157
128
  argv = ['draft', '-t', 'Here is a title']
158
-
159
- expect {
160
- poole_with_args_no_stdout(argv).call
161
- }.not_to raise_error
129
+ expect { poole_no_stdout(argv).call }.not_to raise_error
162
130
  end
163
-
164
131
  end # context error handling
165
132
 
166
133
  context 'exit message' do
167
-
168
134
  it 'should exit with a usage message' do
169
135
  argv = ['draft']
136
+ output = aborted_poole_output(argv).call
137
+ expect(output).to match(/Usage:\s+poole draft/)
138
+ end
139
+ end # context exit message
170
140
 
171
- output = capture_stdout do
172
- begin
173
- poole_with_args(argv).call
174
- rescue SystemExit
175
- # this will fail, but we want the exit message
176
- end
177
- end
141
+ context 'custom layout' do
142
+ let(:layout_path) { write_custom_layout }
178
143
 
179
- output.should match(/Usage:\s+poole draft/)
144
+ it 'should use custom layout with --layout' do
145
+ argv = ['draft', '--layout', layout_path, '--title', 'title']
146
+ poole_no_stdout(argv).call
147
+ content = File.open(layout_path, 'r').read
148
+ expect(content).to match(/tags: testing/)
180
149
  end
181
150
 
182
- end # context exit message
151
+ it 'should exit with bad layout path' do
152
+ argv = ['draft', '--layout', 'bogus_path.md', 'title']
153
+ expect { poole_no_stdout(argv).call }.to raise_error(SystemExit)
154
+ end
155
+ end # end custom layout
183
156
 
184
- end # end describe draft
157
+ context 'default_layout in config file' do
158
+ before(:each) { write_config_file_custom_layout }
185
159
 
186
- describe "action 'publish'" do
187
- before :each do
188
- @olddir, @tmpdir = make_jekyll_dir
189
- @c = Commands.new
190
- @d_path = @c.draft('test_draft')
191
- end
160
+ it 'overrides default layout' do
161
+ argv = ['draft', 'post title']
162
+ poole_no_stdout(argv).call
163
+ new_file = Dir.glob("_drafts/*.md").first
164
+ content = File.open(new_file, 'r').read
165
+ expect(content).to match(/tags: from_config/)
166
+ end
192
167
 
193
- after :each do
194
- clean_tmp_files(@tmpdir, @olddir)
195
- end
168
+ it 'is overridden by command-line layout switch' do
169
+ custom_path = write_custom_layout
196
170
 
197
- context 'error handling' do
171
+ argv = ['draft', '--layout', custom_path, '--title', 'title']
172
+ poole_no_stdout(argv).call
173
+ new_file = Dir.glob("_drafts/*.md").first
174
+ content = File.open(new_file, 'r').read
175
+ expect(content).not_to match(/tags: from_config/)
176
+ expect(content).to match(/tags: testing/)
177
+ end
178
+ end # default layout in config
179
+
180
+ end # describe draft
181
+
182
+ describe "action 'publish'" do
183
+ let(:d_path) { Commands.new.draft({title: 'test_draft'}) }
184
+ before(:each) { @olddir, @tmpdir = make_jekyll_dir }
185
+ after(:each) { clean_tmp_files(@tmpdir, @olddir) }
198
186
 
187
+ context 'error handling' do
199
188
  it 'should fail with no arguments' do
200
189
  argv = ['publish']
201
-
202
- expect {
203
- poole_with_args_no_stdout(argv).call
204
- }.to raise_error(SystemExit)
190
+ expect { poole_no_stdout(argv).call }.to raise_error(SystemExit)
205
191
  end
206
192
 
207
193
  it 'should fail with a bad path' do
208
194
  argv = ['publish', '_drafts/does_not_exist.md']
209
-
210
- expect {
211
- poole_with_args_no_stdout(argv).call
212
- }.to raise_error(SystemExit)
195
+ expect { poole_no_stdout(argv).call }.to raise_error(SystemExit)
213
196
  end
214
197
 
215
198
  it 'should not fail with a good path' do
216
- argv = ['publish', @d_path]
217
-
218
- expect {
219
- poole_with_args_no_stdout(argv).call
220
- }.not_to raise_error
199
+ argv = ['publish', d_path]
200
+ expect { poole_no_stdout(argv).call }.not_to raise_error
221
201
  end
222
-
223
202
  end # context error handling
224
203
 
225
204
  context 'exit message' do
226
-
227
205
  it 'should exit with usage with no arguments' do
228
206
  argv = ['publish']
229
-
230
- output = capture_stdout do
231
- begin
232
- poole_with_args(argv).call
233
- rescue SystemExit
234
- end
235
- end
236
-
237
- output.should match(/Usage:\s+poole publish/)
207
+ output = aborted_poole_output(argv).call
208
+ expect(output).to match(/Usage:\s+poole publish/)
238
209
  end
239
210
 
240
211
  it 'should exit with a description of bad path' do
241
212
  argv = ['publish', '_drafts/does_not_exist.md']
242
-
243
- output = capture_stdout do
244
- begin
245
- poole_with_args(argv).call
246
- rescue SystemExit
247
- end
248
- end
249
-
250
- output.should match(/Error:\s+could not open/)
213
+ output = aborted_poole_output(argv).call
214
+ expect(output).to match(/Error:\s+could not open/)
251
215
  end
252
216
  end # context exit message
253
217
 
254
218
  end
255
219
 
256
220
  describe "action 'unpublish'" do
257
- before :each do
258
- @olddir, @tmpdir = make_jekyll_dir
259
- @c = Commands.new
260
- @p_path = @c.post('test_post')
261
- end
262
-
263
- after :each do
264
- clean_tmp_files(@tmpdir, @olddir)
265
- end
221
+ let(:p_path) { Commands.new.post({title: 'test_post'}) }
222
+ before(:each) { @olddir, @tmpdir = make_jekyll_dir }
223
+ after(:each) { clean_tmp_files(@tmpdir, @olddir) }
266
224
 
267
225
  context 'error handling' do
268
-
269
226
  it 'should fail with no arguments' do
270
227
  argv = ['unpublish']
271
-
272
- expect {
273
- poole_with_args_no_stdout(argv).call
274
- }.to raise_error(SystemExit)
228
+ expect { poole_no_stdout(argv).call }.to raise_error(SystemExit)
275
229
  end
276
230
 
277
231
  it 'should fail with a bad path' do
278
232
  argv = ['unpublish', '_posts/does_not_exist.md']
279
-
280
- expect {
281
- poole_with_args_no_stdout(argv).call
282
- }.to raise_error(SystemExit)
233
+ expect { poole_no_stdout(argv).call }.to raise_error(SystemExit)
283
234
  end
284
235
 
285
236
  it 'should not fail with a good path' do
286
- argv = ['unpublish', @p_path]
287
-
288
- expect {
289
- poole_with_args_no_stdout(argv).call
290
- }.not_to raise_error
237
+ argv = ['unpublish', p_path]
238
+ expect { poole_no_stdout(argv).call }.not_to raise_error
291
239
  end
292
-
293
240
  end # context error handling
294
241
 
295
242
  context 'exit message' do
296
-
297
243
  it 'should exit with usage with no arguments' do
298
244
  argv = ['unpublish']
299
-
300
- output = capture_stdout do
301
- begin
302
- poole_with_args(argv).call
303
- rescue SystemExit
304
- end
305
- end
306
-
307
- output.should match(/Usage:\s+poole unpublish/)
245
+ output = aborted_poole_output(argv).call
246
+ expect(output).to match(/Usage:\s+poole unpublish/)
308
247
  end
309
248
 
310
249
  it 'should exit with a description of bad path' do
311
250
  argv = ['unpublish', '_posts/does_not_exist.md']
312
-
313
- output = capture_stdout do
314
- begin
315
- poole_with_args(argv).call
316
- rescue SystemExit
317
- end
318
- end
319
-
320
- output.should match(/Error:\s+could not open/)
251
+ output = aborted_poole_output(argv).call
252
+ expect(output).to match(/Error:\s+could not open/)
321
253
  end
322
254
  end # context exit message
323
255
 
256
+ end # context action unpublish
257
+
258
+ context 'with default extension in config file' do
259
+ before(:each) { @olddir, @tmpdir = make_jekyll_dir }
260
+ before(:each) { write_config_file_custom_extension }
261
+ after(:each) { clean_tmp_files(@tmpdir, @olddir) }
262
+
263
+ it 'should override default extension for post' do
264
+ argv = ['post', 'post title']
265
+ poole_no_stdout(argv).call
266
+ fn = Dir.glob("_posts/*").first
267
+ expect(fn).to match(/textile$/)
268
+ end
269
+
270
+ it 'should not override if command-line layout given' do
271
+ layout_path = write_custom_layout
272
+ argv = ['post', '--layout', layout_path, '-t', 'title']
273
+ poole_no_stdout(argv).call
274
+ fn = Dir.glob("_posts/*").first
275
+ expect(fn).to match(/md$/)
276
+ end
324
277
 
325
- end # action unpublish
278
+ it 'should override default extension for draft' do
279
+ argv = ['draft', 'post title']
280
+ poole_no_stdout(argv).call
281
+ fn = Dir.glob("_drafts/*").first
282
+ expect(fn).to match(/textile$/)
283
+ end
284
+
285
+ end
326
286
 
327
287
  end
328
288
  end