nesta 0.11.1 → 0.13.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.
Files changed (86) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/tests.yml +21 -0
  3. data/.gitmodules +0 -0
  4. data/CHANGES +44 -2
  5. data/Gemfile +1 -1
  6. data/Gemfile.lock +73 -55
  7. data/LICENSE +1 -1
  8. data/README.md +7 -14
  9. data/RELEASING.md +10 -9
  10. data/Rakefile +20 -3
  11. data/bin/nesta +1 -1
  12. data/config/deploy.rb.sample +1 -1
  13. data/lib/nesta/app.rb +4 -8
  14. data/lib/nesta/commands/demo/content.rb +28 -12
  15. data/lib/nesta/commands/edit.rb +2 -6
  16. data/lib/nesta/commands/new.rb +9 -11
  17. data/lib/nesta/commands/plugin/create.rb +7 -9
  18. data/lib/nesta/commands/template.rb +20 -0
  19. data/lib/nesta/commands/theme/create.rb +8 -8
  20. data/lib/nesta/commands/theme/enable.rb +3 -5
  21. data/lib/nesta/commands/theme/install.rb +12 -14
  22. data/lib/nesta/commands.rb +8 -0
  23. data/lib/nesta/config_file.rb +25 -0
  24. data/lib/nesta/helpers.rb +14 -0
  25. data/lib/nesta/models.rb +26 -22
  26. data/lib/nesta/navigation.rb +1 -1
  27. data/lib/nesta/system_command.rb +15 -0
  28. data/lib/nesta/version.rb +1 -1
  29. data/lib/nesta.rb +6 -1
  30. data/nesta.gemspec +11 -12
  31. data/templates/config/config.yml +1 -1
  32. data/{spec → test}/fixtures/nesta-plugin-test/Gemfile +0 -0
  33. data/{spec → test}/fixtures/nesta-plugin-test/Rakefile +0 -0
  34. data/{spec → test}/fixtures/nesta-plugin-test/lib/nesta-plugin-test/init.rb +0 -0
  35. data/{spec → test}/fixtures/nesta-plugin-test/lib/nesta-plugin-test/version.rb +0 -0
  36. data/{spec → test}/fixtures/nesta-plugin-test/lib/nesta-plugin-test.rb +0 -0
  37. data/{spec → test}/fixtures/nesta-plugin-test/nesta-plugin-test.gemspec +0 -0
  38. data/test/integration/atom_feed_test.rb +178 -0
  39. data/test/integration/commands/demo/content_test.rb +33 -0
  40. data/test/integration/commands/edit_test.rb +21 -0
  41. data/test/integration/commands/new_test.rb +91 -0
  42. data/test/integration/commands/plugin/create_test.rb +131 -0
  43. data/test/integration/commands/theme/create_test.rb +41 -0
  44. data/test/integration/commands/theme/enable_test.rb +28 -0
  45. data/test/integration/commands/theme/install_test.rb +66 -0
  46. data/test/integration/default_theme_test.rb +220 -0
  47. data/test/integration/overrides_test.rb +118 -0
  48. data/test/integration/route_handlers_test.rb +96 -0
  49. data/test/integration/sitemap_test.rb +85 -0
  50. data/test/integration_test_helper.rb +61 -0
  51. data/test/support/model_factory.rb +169 -0
  52. data/test/support/temporary_files.rb +33 -0
  53. data/test/support/test_configuration.rb +19 -0
  54. data/test/test_helper.rb +26 -0
  55. data/test/unit/config_test.rb +138 -0
  56. data/test/unit/file_model_test.rb +71 -0
  57. data/test/unit/menu_test.rb +82 -0
  58. data/test/unit/page_test.rb +571 -0
  59. data/test/unit/path_test.rb +41 -0
  60. data/test/unit/plugin_test.rb +47 -0
  61. data/test/unit/system_command_test.rb +20 -0
  62. data/views/master.sass +1 -1
  63. metadata +90 -89
  64. data/.hound.yml +0 -2
  65. data/.rspec +0 -1
  66. data/.travis.yml +0 -6
  67. data/lib/nesta/commands/command.rb +0 -58
  68. data/smoke-test.sh +0 -107
  69. data/spec/atom_spec.rb +0 -141
  70. data/spec/commands/demo/content_spec.rb +0 -65
  71. data/spec/commands/edit_spec.rb +0 -27
  72. data/spec/commands/new_spec.rb +0 -88
  73. data/spec/commands/plugin/create_spec.rb +0 -97
  74. data/spec/commands/system_spec.rb +0 -25
  75. data/spec/commands/theme/create_spec.rb +0 -41
  76. data/spec/commands/theme/enable_spec.rb +0 -44
  77. data/spec/commands/theme/install_spec.rb +0 -56
  78. data/spec/config_spec.rb +0 -127
  79. data/spec/model_factory.rb +0 -92
  80. data/spec/models_spec.rb +0 -700
  81. data/spec/overrides_spec.rb +0 -132
  82. data/spec/page_spec.rb +0 -560
  83. data/spec/path_spec.rb +0 -28
  84. data/spec/plugin_spec.rb +0 -51
  85. data/spec/sitemap_spec.rb +0 -105
  86. data/spec/spec_helper.rb +0 -114
@@ -1,132 +0,0 @@
1
- require File.expand_path('spec_helper', File.dirname(__FILE__))
2
- require File.expand_path('model_factory', File.dirname(__FILE__))
3
-
4
- describe "Rendering" do
5
- include ModelFactory
6
- include RequestSpecHelper
7
-
8
- def create_fixture(type, name, content)
9
- base_path = {
10
- local: Nesta::Path.local,
11
- theme: Nesta::Path.themes(@theme)
12
- }[type]
13
- path = File.join(base_path, name)
14
- @fixtures << path
15
- FileUtils.mkdir_p(File.dirname(path))
16
- open(path, 'w') { |file| file.write(content) }
17
- end
18
-
19
- def create_template(type, name, content)
20
- create_fixture(type, File.join('views', 'layout.haml'), '= yield')
21
- create_fixture(type, File.join('views', name), content)
22
- end
23
-
24
- def create_app_file(type)
25
- create_fixture(type, 'app.rb', "DEFINED_IN_#{type.to_s.upcase}_FILE = true")
26
- end
27
-
28
- before(:each) do
29
- @app_root = Nesta::App.root
30
- Nesta::App.root = temp_path('root')
31
- @theme = 'my-theme'
32
- @fixtures = []
33
- stub_configuration
34
- end
35
-
36
- after(:each) do
37
- @fixtures.each { |path| FileUtils.rm(path) if File.exist?(path) }
38
- Nesta::App.root = @app_root
39
- end
40
-
41
- describe "when rendering stylesheets" do
42
- it "should render Sass stylesheets" do
43
- create_template(:local, 'master.sass', "body\n width: 10px * 2")
44
- get "/css/master.css"
45
- body.should match(/width: 20px;/)
46
- end
47
-
48
- it "should render SCSS stylesheets" do
49
- create_template(:local, 'master.scss', "body {\n width: 10px * 2;\n}")
50
- get "/css/master.css"
51
- body.should match(/width: 20px;/)
52
- end
53
-
54
- it "should render the Gem's stylesheet if no other's found" do
55
- get "/css/master.css"
56
- last_response.should be_ok
57
- end
58
- end
59
-
60
- describe "when local files exist" do
61
- before(:each) do
62
- create_template(:local, 'page.haml', '%p Local template')
63
- end
64
-
65
- it "should use local application files" do
66
- create_app_file(:local)
67
- Nesta::Overrides.load_local_app
68
- Object.const_get(:DEFINED_IN_LOCAL_FILE).should be_true
69
- end
70
-
71
- it "should use local template in place of default" do
72
- get create_category.abspath
73
- body.should have_selector("p:contains('Local template')")
74
- end
75
- end
76
-
77
- describe "when theme installed" do
78
- before(:each) do
79
- create_template(:theme, 'page.haml', '%p Theme template')
80
- end
81
-
82
- it "should not require theme application file automatically" do
83
- create_app_file(:theme)
84
- lambda {
85
- Object.const_get(:DEFINED_IN_THEME_FILE)
86
- }.should raise_error(NameError)
87
- end
88
-
89
- it "should not use theme templates automatically" do
90
- get create_category.abspath
91
- body.should_not have_selector("p:contains('Theme template')")
92
- end
93
-
94
- describe "and configured" do
95
- before(:each) do
96
- stub_config_key("theme", @theme)
97
- end
98
-
99
- it "should require theme application file" do
100
- create_app_file(:theme)
101
- Nesta::Overrides.load_theme_app
102
- Object.const_get(:DEFINED_IN_THEME_FILE).should be_true
103
- end
104
-
105
- it "should use theme's template in place of default" do
106
- get create_category.abspath
107
- body.should have_selector("p:contains('Theme template')")
108
- end
109
-
110
- context "and local files exist" do
111
- before(:each) do
112
- create_template(:local, "page.haml", "%p Local template")
113
- end
114
-
115
- it "should require local and theme application files" do
116
- create_app_file(:local)
117
- create_app_file(:theme)
118
- Nesta::Overrides.load_theme_app
119
- Nesta::Overrides.load_local_app
120
- Object.const_get(:DEFINED_IN_LOCAL_FILE).should be_true
121
- Object.const_get(:DEFINED_IN_THEME_FILE).should be_true
122
- end
123
-
124
- it "should use local template" do
125
- get create_category.abspath
126
- body.should_not have_selector("p:contains('Theme template')")
127
- body.should have_selector("p:contains('Local template')")
128
- end
129
- end
130
- end
131
- end
132
- end
data/spec/page_spec.rb DELETED
@@ -1,560 +0,0 @@
1
- require File.expand_path('spec_helper', File.dirname(__FILE__))
2
- require File.expand_path('model_factory', File.dirname(__FILE__))
3
-
4
- shared_examples_for "page with keyword and description" do
5
- it "should set the keywords meta tag" do
6
- do_get
7
- assert_xpath "//meta[@name='keywords'][@content='#{@keywords}']"
8
- end
9
-
10
- it "should set description meta tag" do
11
- do_get
12
- assert_xpath "//meta[@name='description'][@content='#{@description}']"
13
- end
14
- end
15
-
16
- shared_examples_for "page that can display menus" do
17
- it "should not display menu by default" do
18
- do_get
19
- last_response.should be_ok
20
- assert_not_selector "#sidebar ul.menu"
21
- end
22
-
23
- describe "and simple menu configured" do
24
- before(:each) do
25
- create_menu(@category.path)
26
- end
27
-
28
- it "should link to top level menu items" do
29
- do_get
30
- link_text = @category.link_text
31
- href = @category.abspath
32
- assert_selector "ul.menu a[@href$='#{href}']:contains('#{link_text}')"
33
- end
34
- end
35
-
36
- describe "and nested menu configured" do
37
- before(:each) do
38
- @level2 = create_category(path: "level-2", heading: "Level 2",
39
- metadata: {'link text' => "Level 2 link"})
40
- @level3 = create_category(path: "level-3", heading: "Level 3")
41
- text = <<-EOF
42
- #{@category.abspath}
43
- #{@level2.abspath}
44
- #{@level3.abspath}
45
- EOF
46
- create_menu(text)
47
- end
48
-
49
- it "should display first level of nested sub menus" do
50
- do_get
51
- assert_selector "ul.menu li ul li a:contains('#{@level2.link_text}')"
52
- end
53
-
54
- it "should not display nested menus to arbitrary depth" do
55
- do_get
56
- last_response.should be_ok
57
- assert_not_selector "ul.menu li ul li ul"
58
- end
59
- end
60
-
61
- describe "and menu links to home page" do
62
- before(:each) do
63
- text = <<-EOF
64
- /
65
- #{@category.abspath}
66
- EOF
67
- create_menu(text)
68
- template_path = File.expand_path(
69
- 'templates', File.dirname(File.dirname(__FILE__)))
70
- @default_homepage_content = File.read(File.join(template_path,
71
- 'index.haml'))
72
- end
73
-
74
- it "should use 'Home' as the home page link if not otherwise specified" do
75
- create_page(
76
- path: 'index',
77
- ext: :haml,
78
- content: @default_homepage_content)
79
- do_get
80
- assert_selector "ul.menu a[@href='/']:contains('Home')"
81
- end
82
-
83
- it "should use the heading if it exists" do
84
- create_page(
85
- path: 'index',
86
- ext: :haml,
87
- heading: 'My heading',
88
- content: @default_homepage_content)
89
- do_get
90
- assert_selector "ul.menu a[@href='/']:contains('My heading')"
91
- end
92
-
93
- it "should use the link text if specified" do
94
- create_page(
95
- path: 'index',
96
- ext: :haml,
97
- heading: 'My heading',
98
- content: @default_homepage_content,
99
- metadata: {'link text'=>'My link text'})
100
- do_get
101
- assert_selector "ul.menu a[@href='/']:contains('My link text')"
102
- end
103
- end
104
- end
105
-
106
- describe "The layout" do
107
- include ModelFactory
108
- include RequestSpecHelper
109
-
110
- it "should not include GA JavaScript by default" do
111
- stub_configuration
112
- get "/"
113
- assert_not_selector "script", content: "ga('create', 'UA-1234'"
114
- end
115
-
116
- it "should include GA JavaScript if configured" do
117
- stub_config_key('google_analytics_code', 'UA-1234', rack_env: true)
118
- stub_configuration
119
- get "/"
120
- assert_selector 'script', content: "ga('create', 'UA-1234'"
121
- end
122
- end
123
-
124
- describe "The home page" do
125
- include ModelFactory
126
- include RequestSpecHelper
127
-
128
- before(:each) do
129
- stub_configuration
130
- template_path = File.expand_path(
131
- 'templates', File.dirname(File.dirname(__FILE__)))
132
- create_category(
133
- path: 'index',
134
- ext: :haml,
135
- heading: 'Home',
136
- content: File.read(File.join(template_path, 'index.haml'))
137
- )
138
- create_category
139
- end
140
-
141
- after(:each) do
142
- remove_temp_directory
143
- Nesta::FileModel.purge_cache
144
- end
145
-
146
- def do_get
147
- get "/"
148
- end
149
-
150
- describe "when categories exist" do
151
- before(:each) do
152
- @category = create_category
153
- end
154
-
155
- it_should_behave_like "page that can display menus"
156
- end
157
-
158
- it "should render successfully" do
159
- do_get
160
- last_response.should be_ok
161
- end
162
-
163
- it "should display site title in hgroup tag" do
164
- do_get
165
- assert_selector 'hgroup h1', content: "My blog"
166
- end
167
-
168
- it "should display site subtitle in hgroup tag" do
169
- do_get
170
- assert_selector 'hgroup h2', content: "about stuff"
171
- end
172
-
173
- describe "when articles have no summary" do
174
- before(:each) do
175
- create_article
176
- do_get
177
- end
178
-
179
- it "should display full content of article" do
180
- assert_selector "p", content: "Content goes here"
181
- end
182
-
183
- it "should not display read more link" do
184
- last_response.should be_ok
185
- assert_not_selector "a", content: 'continue'
186
- end
187
- end
188
-
189
- describe "when articles have metadata" do
190
- before(:each) do
191
- @summary = 'Multiline\n\nsummary'
192
- @read_more = "Continue at your leisure"
193
- @article = create_article(metadata: {
194
- "summary" => @summary,
195
- "read more" => @read_more
196
- })
197
- do_get
198
- end
199
-
200
- it "should display link to article in h2 tag" do
201
- link_text = @article.link_text
202
- href = @article.abspath
203
- assert_selector "h1 a[@href$='#{href}']:contains('#{link_text}')"
204
- end
205
-
206
- it "should display article summary if available" do
207
- assert_selector 'p', content: @summary.split('\n\n').first
208
- end
209
-
210
- it "should display read more link" do
211
- assert_selector "a[@href$='#{@article.abspath}']", content: @read_more
212
- end
213
- end
214
- end
215
-
216
- describe "An article" do
217
- include ModelFactory
218
- include RequestSpecHelper
219
-
220
- before(:each) do
221
- stub_configuration
222
- @date = '07 September 2009'
223
- @keywords = 'things, stuff'
224
- @description = 'Page about stuff'
225
- @summary = 'Multiline\n\nsummary'
226
- @link_text = 'Link to page about stuff'
227
- @article = create_article(metadata: {
228
- 'date' => @date.gsub('September', 'Sep'),
229
- 'description' => @description,
230
- 'keywords' => @keywords,
231
- 'summary' => @summary,
232
- 'link text' => @link_text
233
- })
234
- end
235
-
236
- after(:each) do
237
- remove_temp_directory
238
- Nesta::FileModel.purge_cache
239
- end
240
-
241
- def do_get
242
- get @article.abspath
243
- end
244
-
245
- it_should_behave_like "page with keyword and description"
246
-
247
- describe "when categories exist" do
248
- before(:each) do
249
- @category = create_category
250
- end
251
-
252
- it_should_behave_like "page that can display menus"
253
- end
254
-
255
- it "should render successfully" do
256
- do_get
257
- last_response.should be_ok
258
- end
259
-
260
- it "should display the heading" do
261
- do_get
262
- assert_selector 'h1', content: 'My article'
263
- end
264
-
265
- it "should use link text for title tag" do
266
- do_get
267
- assert_selector 'title', content: @link_text
268
- end
269
-
270
- it "should display the date" do
271
- do_get
272
- assert_selector 'time', content: @date
273
- end
274
-
275
- it "should display the content" do
276
- do_get
277
- assert_selector 'p', content: 'Content goes here'
278
- end
279
-
280
- describe "that is assigned to categories" do
281
- before(:each) do
282
- create_category(heading: 'Apple', path: 'the-apple')
283
- @category = create_category(heading: 'Banana', path: 'banana')
284
- @article = create_article(
285
- path: "#{@category.path}/article",
286
- metadata: { 'categories' => 'banana, the-apple' }
287
- )
288
- end
289
-
290
- it "should render successfully" do
291
- do_get
292
- last_response.should be_ok
293
- end
294
-
295
- it "should link to each category" do
296
- do_get
297
- assert_selector "p.meta a[href='/banana']", content: "Banana"
298
- assert_selector "p.meta a[href='/the-apple']", content: "Apple"
299
- end
300
-
301
- it "should link to a category in breadcrumb" do
302
- do_get
303
- href = @category.abspath
304
- link_text = @category.link_text
305
- assert_selector "nav.breadcrumb a[href='#{href}']", content: link_text
306
- end
307
-
308
- it "should not include Disqus comments by default" do
309
- do_get
310
- last_response.should be_ok
311
- assert_not_selector '#disqus_thread'
312
- end
313
- end
314
-
315
- describe "that is configured to show Disqus comments" do
316
- before(:each) do
317
- stub_config_key("disqus_short_name", "mysite")
318
- @category = create_category
319
- end
320
-
321
- it "should display Disqus comments" do
322
- do_get
323
- assert_selector '#disqus_thread'
324
- assert_selector 'script[@src*="mysite.disqus.com/embed.js"]'
325
- end
326
- end
327
- end
328
-
329
- describe "A page" do
330
- include ModelFactory
331
- include RequestSpecHelper
332
-
333
- before(:each) do
334
- stub_configuration
335
- end
336
-
337
- after(:each) do
338
- remove_temp_directory
339
- Nesta::FileModel.purge_cache
340
- end
341
-
342
- def do_get
343
- get @category.abspath
344
- end
345
-
346
- describe "that doesn't exist" do
347
- it "should render the 404 page" do
348
- get "/no-such-page"
349
- last_response.should be_not_found
350
- end
351
- end
352
-
353
- describe "that has meta data" do
354
- before(:each) do
355
- @title = 'Different title'
356
- @content = "Page content"
357
- @description = "Page about stuff"
358
- @keywords = "things, stuff"
359
- @articles_heading = "Posts about this stuff"
360
- @category = create_category(
361
- content: "# My category\n\n#{@content}",
362
- metadata: {
363
- 'title' => @title,
364
- 'description' => @description,
365
- 'keywords' => @keywords,
366
- 'articles heading' => @articles_heading
367
- }
368
- )
369
- end
370
-
371
- it_should_behave_like "page with keyword and description"
372
- it_should_behave_like "page that can display menus"
373
-
374
- describe "whose URL ends in /" do
375
- it "should be redirected, removing the slash" do
376
- get @category.abspath + '/'
377
- last_response.should be_redirect
378
- end
379
- end
380
-
381
- it "should render successfully" do
382
- do_get
383
- last_response.should be_ok
384
- end
385
-
386
- it "should display the heading" do
387
- do_get
388
- assert_selector 'h1', content: @category.heading
389
- end
390
-
391
- it "should use title metadata to set heading" do
392
- do_get
393
- assert_selector 'title', content: @title
394
- end
395
-
396
- it "should display the content" do
397
- do_get
398
- assert_selector "p", content: @content
399
- end
400
-
401
- describe "with associated pages" do
402
- before(:each) do
403
- @category1 = create_category(
404
- path: 'category1',
405
- heading: 'Category 1',
406
- metadata: {
407
- 'categories' => 'category-prefix/my-category:-1'
408
- }
409
- )
410
- @category2 = create_category(
411
- path: 'category2',
412
- heading: 'Category 2',
413
- metadata: {
414
- 'categories' => 'category-prefix/my-category:1'
415
- }
416
- )
417
- end
418
-
419
- it "should list highest priority pages at the top" do
420
- do_get
421
- assert_selector 'li:nth-child(1) h1 a', content: 'Category 2'
422
- assert_selector 'li:nth-child(2) h1 a', content: 'Category 1'
423
- end
424
- end
425
-
426
- describe "with associated articles" do
427
- before(:each) do
428
- @article = create_article(
429
- path: "another-page",
430
- heading: "Categorised",
431
- metadata: { categories: @category.path,
432
- 'link text' => 'Categorised link'},
433
- content: "Article content"
434
- )
435
- @article2 = create_article(
436
- path: "second-article", heading: "Second article")
437
- end
438
-
439
- it "should display links to articles" do
440
- do_get
441
- href = @article.abspath
442
- link_text = @article.link_text
443
- assert_selector "h1 a[@href$='#{href}']", content: link_text
444
- assert_not_selector "h3", content: @article2.link_text
445
- end
446
-
447
- it "should display the article heading" do
448
- do_get
449
- assert_selector 'h1', content: @articles_heading
450
- end
451
- end
452
- end
453
-
454
- describe "with associated categories" do
455
- it "should link to the first assigned category in breadcrumb" do
456
- category1 = create_category(path: 'category1', heading: 'Category 1')
457
- create_category(path: 'category2', heading: 'Category 2')
458
- @category = create_page(
459
- path: "a-page",
460
- heading: "A Page",
461
- metadata: { 'categories' => 'category1, category2' }
462
- )
463
- do_get
464
- href = category1.abspath
465
- link_text = category1.link_text
466
- assert_selector "nav.breadcrumb a[href='#{href}']", content: link_text
467
- end
468
- end
469
- end
470
-
471
- describe "A Haml page" do
472
- include ModelFactory
473
- include RequestSpecHelper
474
-
475
- before(:each) do
476
- stub_configuration
477
- end
478
-
479
- after(:each) do
480
- remove_temp_directory
481
- Nesta::FileModel.purge_cache
482
- end
483
-
484
- it "should be able to access helper methods" do
485
- create_page(
486
- path: "a-page",
487
- ext: :haml,
488
- content: "%div= format_date(Date.new(2010, 11, 23))",
489
- heading: "A Page"
490
- )
491
- get "/a-page"
492
- assert_selector "div", content: "23 November 2010"
493
- end
494
-
495
- it "should access helpers when rendering articles on a category page" do
496
- category = create_page(
497
- path: "a-page",
498
- heading: "First heading",
499
- content: "Blah blah"
500
- )
501
- create_article(
502
- path: "an-article",
503
- ext: :haml,
504
- heading: "First heading",
505
- metadata: { categories: category.path },
506
- content: "%h1 Second heading\n\n%div= format_date(Date.new(2010, 11, 23))"
507
- )
508
- get "/a-page"
509
- assert_selector "div", content: "23 November 2010"
510
- end
511
- end
512
-
513
- describe "attachments" do
514
- include ModelFactory
515
- include RequestSpecHelper
516
-
517
- before(:each) do
518
- stub_configuration
519
- create_content_directories
520
- end
521
-
522
- after(:each) do
523
- remove_temp_directory
524
- Nesta::FileModel.purge_cache
525
- end
526
-
527
- describe "in the attachments folder" do
528
- before(:each) do
529
- path = File.join(Nesta::Config.attachment_path, 'test.txt')
530
- File.open(path, 'w') { |file| file.write("I'm a test attachment") }
531
- end
532
-
533
- it "should be served successfully" do
534
- get "/attachments/test.txt"
535
- last_response.should be_ok
536
- end
537
-
538
- it "should be sent to the client" do
539
- get "/attachments/test.txt"
540
- body.should include("I'm a test attachment")
541
- end
542
-
543
- it "should set the appropriate MIME type" do
544
- get "/attachments/test.txt"
545
- last_response.headers["Content-Type"].should =~ Regexp.new("^text/plain")
546
- end
547
- end
548
-
549
- describe "outside the attachments folder" do
550
- before(:each) do
551
- path = File.join(Nesta::Config.page_path, 'index.haml')
552
- File.open(path, 'w') { |file| file.write('%h1 Test page') }
553
- end
554
-
555
- it "should be directory traversal free" do
556
- get '/attachments/../pages/index.haml'
557
- last_response.should_not be_ok
558
- end
559
- end
560
- end
data/spec/path_spec.rb DELETED
@@ -1,28 +0,0 @@
1
- require File.expand_path('spec_helper', File.dirname(__FILE__))
2
-
3
- describe 'Nesta::Path' do
4
- before(:each) do
5
- @root = File.expand_path('..', File.dirname(__FILE__))
6
- @local_foo_bar = File.join(@root, 'foo/bar')
7
- end
8
-
9
- it 'should return local path' do
10
- Nesta::Path.local.should == @root
11
- end
12
-
13
- it 'should return path for file within local directory' do
14
- Nesta::Path.local('foo/bar').should == @local_foo_bar
15
- end
16
-
17
- it 'should combine path components' do
18
- Nesta::Path.local('foo', 'bar').should == @local_foo_bar
19
- end
20
-
21
- it 'should return themes path' do
22
- Nesta::Path.themes.should == File.expand_path('themes', @root)
23
- end
24
-
25
- it 'should return path for file within themes directory' do
26
- Nesta::Path.themes('foo/bar').should == File.join(@root, 'themes/foo/bar')
27
- end
28
- end