alchemy_cms 3.2.0.beta → 3.2.0.rc1

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 (146) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +661 -863
  3. data/README.md +5 -63
  4. data/app/assets/javascripts/alchemy/alchemy.base.js.coffee +11 -10
  5. data/app/assets/javascripts/alchemy/alchemy.initializer.js.coffee +6 -0
  6. data/app/assets/stylesheets/alchemy/_extends.scss +0 -6
  7. data/app/assets/stylesheets/alchemy/_mixins.scss +6 -0
  8. data/app/assets/stylesheets/alchemy/buttons.scss +1 -1
  9. data/app/assets/stylesheets/alchemy/elements.scss +1 -1
  10. data/app/assets/stylesheets/alchemy/menubar.scss +1 -1
  11. data/app/assets/stylesheets/alchemy/selects.scss +5 -1
  12. data/app/assets/stylesheets/alchemy/upload.scss +1 -1
  13. data/app/controllers/alchemy/admin/pages_controller.rb +1 -1
  14. data/app/controllers/alchemy/base_controller.rb +4 -57
  15. data/app/controllers/alchemy/messages_controller.rb +2 -2
  16. data/app/controllers/alchemy/pages_controller.rb +22 -31
  17. data/app/controllers/alchemy/pictures_controller.rb +2 -2
  18. data/app/helpers/alchemy/admin/base_helper.rb +7 -0
  19. data/app/helpers/alchemy/admin/elements_helper.rb +31 -15
  20. data/app/helpers/alchemy/admin/pages_helper.rb +17 -0
  21. data/app/helpers/alchemy/base_helper.rb +0 -28
  22. data/app/helpers/alchemy/pages_helper.rb +18 -12
  23. data/app/helpers/alchemy/url_helper.rb +2 -2
  24. data/app/models/alchemy/cell.rb +1 -1
  25. data/app/models/alchemy/content/factory.rb +12 -6
  26. data/app/models/alchemy/element.rb +3 -3
  27. data/app/models/alchemy/element/definitions.rb +1 -1
  28. data/app/models/alchemy/element_to_page.rb +7 -0
  29. data/app/models/alchemy/language.rb +1 -1
  30. data/app/models/alchemy/page.rb +8 -1
  31. data/app/models/alchemy/page/page_cells.rb +2 -2
  32. data/app/models/alchemy/page/page_elements.rb +23 -5
  33. data/app/models/alchemy/page/page_natures.rb +3 -3
  34. data/app/models/alchemy/page/page_scopes.rb +1 -1
  35. data/app/models/alchemy/picture.rb +1 -1
  36. data/app/views/alchemy/admin/pages/_create_language_form.html.erb +1 -1
  37. data/app/views/alchemy/admin/pages/_form.html.erb +1 -1
  38. data/app/views/alchemy/admin/pictures/_picture_to_assign.html.erb +1 -1
  39. data/app/views/alchemy/breadcrumb/_page.html.erb +3 -2
  40. data/app/views/alchemy/breadcrumb/_separator.html.erb +1 -0
  41. data/app/views/alchemy/breadcrumb/_wrapper.html.erb +13 -0
  42. data/app/views/alchemy/language_links/_language.html.erb +1 -1
  43. data/app/views/alchemy/navigation/_link.html.erb +1 -1
  44. data/app/views/alchemy/pages/show.rss.builder +5 -7
  45. data/app/views/layouts/alchemy/admin.html.erb +5 -0
  46. data/config/routes.rb +13 -10
  47. data/lib/alchemy/configuration_methods.rb +29 -0
  48. data/lib/alchemy/controller_actions.rb +12 -4
  49. data/lib/alchemy/engine.rb +3 -0
  50. data/lib/alchemy/errors.rb +1 -1
  51. data/lib/alchemy/essence.rb +14 -12
  52. data/lib/alchemy/on_page_layout.rb +58 -0
  53. data/lib/alchemy/page_layout.rb +1 -1
  54. data/lib/alchemy/permissions.rb +21 -16
  55. data/lib/alchemy/routing_constraints.rb +49 -0
  56. data/lib/alchemy/seeder.rb +4 -2
  57. data/lib/alchemy/ssl_protection.rb +30 -0
  58. data/lib/alchemy/test_support/essence_shared_examples.rb +118 -25
  59. data/lib/alchemy/test_support/factories.rb +5 -8
  60. data/lib/alchemy/test_support/integration_helpers.rb +16 -10
  61. data/lib/alchemy/upgrader/three_point_two.rb +34 -4
  62. data/lib/alchemy/version.rb +1 -1
  63. data/lib/rails/generators/alchemy/{scaffold → install}/files/_article_editor.html.erb +0 -0
  64. data/lib/rails/generators/alchemy/{scaffold → install}/files/_article_view.html.erb +0 -0
  65. data/lib/rails/generators/alchemy/{scaffold → install}/files/_standard.html.erb +0 -0
  66. data/lib/rails/generators/alchemy/{scaffold → install}/files/alchemy.de.yml +0 -0
  67. data/lib/rails/generators/alchemy/{scaffold → install}/files/alchemy.elements.css.scss +0 -0
  68. data/lib/rails/generators/alchemy/{scaffold → install}/files/alchemy.en.yml +0 -0
  69. data/lib/rails/generators/alchemy/{scaffold → install}/files/alchemy.es.yml +0 -0
  70. data/lib/rails/generators/alchemy/{scaffold → install}/files/application.html.erb +0 -0
  71. data/lib/rails/generators/alchemy/install/install_generator.rb +69 -0
  72. data/lib/rails/generators/alchemy/{scaffold/files/elements.yml → install/templates/elements.yml.tt} +2 -0
  73. data/lib/rails/generators/alchemy/{scaffold → install}/templates/page_layouts.yml.tt +2 -0
  74. data/lib/rails/generators/alchemy/views/views_generator.rb +41 -0
  75. data/lib/rails/templates/alchemy.rb +2 -2
  76. data/lib/tasks/alchemy/db.rake +0 -5
  77. data/lib/tasks/alchemy/install.rake +10 -5
  78. data/lib/tasks/alchemy/tidy.rake +2 -0
  79. data/spec/controllers/admin/attachments_controller_spec.rb +1 -1
  80. data/spec/controllers/admin/clipboard_controller_spec.rb +1 -1
  81. data/spec/controllers/admin/contents_controller_spec.rb +1 -1
  82. data/spec/controllers/admin/dashboard_controller_spec.rb +2 -2
  83. data/spec/controllers/admin/elements_controller_spec.rb +1 -1
  84. data/spec/controllers/admin/essence_files_controller_spec.rb +1 -1
  85. data/spec/controllers/admin/essence_pictures_controller_spec.rb +1 -1
  86. data/spec/controllers/admin/languages_controller_spec.rb +1 -1
  87. data/spec/controllers/admin/layoutpages_controller_spec.rb +1 -1
  88. data/spec/controllers/admin/pages_controller_spec.rb +4 -4
  89. data/spec/controllers/admin/pictures_controller_spec.rb +1 -1
  90. data/spec/controllers/admin/resources_controller_spec.rb +1 -1
  91. data/spec/controllers/admin/trash_controller_spec.rb +1 -1
  92. data/spec/controllers/alchemy/admin/tags_controller_spec.rb +1 -1
  93. data/spec/controllers/attachments_controller_spec.rb +1 -1
  94. data/spec/controllers/base_controller_spec.rb +22 -0
  95. data/spec/controllers/elements_controller_spec.rb +1 -1
  96. data/spec/controllers/pages_controller_spec.rb +15 -16
  97. data/spec/controllers/pictures_controller_spec.rb +212 -162
  98. data/spec/dummy/app/controllers/login_controller.rb +5 -0
  99. data/spec/dummy/app/models/dummy_model.rb +3 -0
  100. data/spec/dummy/config/alchemy/cells.yml +4 -1
  101. data/spec/dummy/config/alchemy/elements.yml +8 -0
  102. data/spec/dummy/config/alchemy/page_layouts.yml +5 -1
  103. data/spec/dummy/config/routes.rb +1 -2
  104. data/spec/dummy/db/migrate/20150412103152_create_dummy_model.rb +7 -0
  105. data/spec/dummy/db/schema.rb +30 -26
  106. data/spec/features/admin/dashboard_spec.rb +11 -9
  107. data/spec/features/admin/language_tree_feature_spec.rb +5 -6
  108. data/spec/features/admin/legacy_page_url_management_spec.rb +1 -1
  109. data/spec/features/admin/link_overlay_spec.rb +1 -1
  110. data/spec/features/admin/locale_select_feature_spec.rb +1 -1
  111. data/spec/features/admin/modules_integration_spec.rb +1 -1
  112. data/spec/features/admin/navigation_feature_spec.rb +1 -1
  113. data/spec/features/admin/page_creation_feature_spec.rb +1 -1
  114. data/spec/features/admin/page_editing_feature_spec.rb +3 -3
  115. data/spec/features/admin/picture_library_integration_spec.rb +1 -1
  116. data/spec/features/admin/resources_integration_spec.rb +1 -1
  117. data/spec/features/admin/site_select_feature_spec.rb +32 -0
  118. data/spec/features/admin/tinymce_feature_spec.rb +1 -3
  119. data/spec/features/page_feature_spec.rb +36 -27
  120. data/spec/features/security_spec.rb +1 -1
  121. data/spec/features/translation_integration_spec.rb +3 -3
  122. data/spec/helpers/admin/elements_helper_spec.rb +103 -26
  123. data/spec/helpers/admin/pages_helper_spec.rb +32 -1
  124. data/spec/helpers/base_helper_spec.rb +0 -45
  125. data/spec/helpers/pages_helper_spec.rb +18 -17
  126. data/spec/helpers/url_helper_spec.rb +8 -5
  127. data/spec/libraries/controller_actions_spec.rb +2 -2
  128. data/spec/libraries/on_page_layout_spec.rb +112 -0
  129. data/spec/libraries/page_layout_spec.rb +5 -1
  130. data/spec/libraries/permissions_spec.rb +13 -15
  131. data/spec/models/cell_spec.rb +4 -0
  132. data/spec/models/content_spec.rb +6 -0
  133. data/spec/models/dummy_model_spec.rb +11 -0
  134. data/spec/models/element_spec.rb +6 -1
  135. data/spec/models/element_to_page_spec.rb +14 -0
  136. data/spec/models/page_spec.rb +111 -19
  137. data/spec/routing/routing_spec.rb +120 -101
  138. data/spec/spec_helper.rb +3 -3
  139. metadata +36 -21
  140. data/app/views/alchemy/breadcrumb/_spacer.html.erb +0 -1
  141. data/lib/alchemy/capistrano.rb +0 -230
  142. data/lib/alchemy/test_support/auth_helpers.rb +0 -35
  143. data/lib/rails/generators/alchemy/deploy_script/deploy_script_generator.rb +0 -90
  144. data/lib/rails/generators/alchemy/deploy_script/templates/deploy.rb.tt +0 -113
  145. data/lib/rails/generators/alchemy/scaffold/scaffold_generator.rb +0 -63
  146. data/spec/dummy/app/controllers/errors_controller.rb +0 -5
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ module Alchemy
4
+ describe ElementToPage do
5
+
6
+ # ClassMethods
7
+
8
+ describe '.table_name' do
9
+ it "should return table name" do
10
+ expect(ElementToPage.table_name).to eq('alchemy_elements_alchemy_pages')
11
+ end
12
+ end
13
+ end
14
+ end
@@ -416,6 +416,26 @@ module Alchemy
416
416
  end
417
417
  end
418
418
 
419
+ describe '.ancestors_for' do
420
+ let(:lang_root) { Page.language_root_for(Language.default.id) }
421
+ let(:parent) { create(:public_page) }
422
+ let(:page) { create(:public_page, parent_id: parent.id) }
423
+
424
+ it "returns an array of all parents including self" do
425
+ expect(Page.ancestors_for(page)).to eq([lang_root, parent, page])
426
+ end
427
+
428
+ it "does not include the root page" do
429
+ expect(Page.ancestors_for(page)).not_to include(Page.root)
430
+ end
431
+
432
+ context "with current page nil" do
433
+ it "should return an empty array" do
434
+ expect(Page.ancestors_for(nil)).to eq([])
435
+ end
436
+ end
437
+ end
438
+
419
439
  describe '.contentpages' do
420
440
  before do
421
441
  layoutroot = Page.find_or_create_layout_root_for(klingonian.id)
@@ -760,7 +780,7 @@ module Alchemy
760
780
  describe '#cell_definitions' do
761
781
  before do
762
782
  @page = FactoryGirl.build(:page, page_layout: 'foo')
763
- allow(@page).to receive(:layout_description).and_return({'name' => "foo", 'cells' => ["foo_cell"]})
783
+ allow(@page).to receive(:definition).and_return({'name' => "foo", 'cells' => ["foo_cell"]})
764
784
  @cell_descriptions = [{'name' => "foo_cell", 'elements' => ["1", "2"]}]
765
785
  allow(Cell).to receive(:definitions).and_return(@cell_descriptions)
766
786
  end
@@ -770,7 +790,7 @@ module Alchemy
770
790
  end
771
791
 
772
792
  it "should return empty array if no cells defined in page layout" do
773
- allow(@page).to receive(:layout_description).and_return({'name' => "foo"})
793
+ allow(@page).to receive(:definition).and_return({'name' => "foo"})
774
794
  expect(@page.cell_definitions).to eq([])
775
795
  end
776
796
  end
@@ -797,17 +817,6 @@ module Alchemy
797
817
  end
798
818
  end
799
819
 
800
- describe '#element_definitions' do
801
- let(:page) { FactoryGirl.build_stubbed(:page) }
802
- subject { page.element_definitions }
803
- before { expect(Element).to receive(:definitions).and_return([{'name' => 'article'}, {'name' => 'header'}]) }
804
-
805
- it "returns all element definitions that could be placed on current page" do
806
- is_expected.to include({'name' => 'article'})
807
- is_expected.to include({'name' => 'header'})
808
- end
809
- end
810
-
811
820
  describe '#element_definitions_by_name' do
812
821
  let(:page) { FactoryGirl.build_stubbed(:public_page) }
813
822
 
@@ -835,13 +844,96 @@ module Alchemy
835
844
  describe '#element_definition_names' do
836
845
  let(:page) { FactoryGirl.build_stubbed(:public_page) }
837
846
 
838
- it "returns all element names defined in page layout" do
839
- expect(page.element_definition_names).to eq(%w(article header))
847
+ context "with assigned elements from page and cell definition" do
848
+ before do
849
+ allow(page).to receive(:element_names_from_page_definition).and_return(['header', 'article'])
850
+ allow(page).to receive(:element_names_from_cell_definition).and_return(['search'])
851
+ end
852
+
853
+ it "returns the combined element names" do
854
+ expect(page.element_definition_names).to eq(%w(header article search))
855
+ end
856
+
857
+ context "when cell definition contains same element name as page definition" do
858
+ before do
859
+ allow(page).to receive(:element_names_from_page_definition).and_return(['header', 'article'])
860
+ allow(page).to receive(:element_names_from_cell_definition).and_return(['header', 'search'])
861
+ end
862
+
863
+ it "returns no duplicates" do
864
+ expect(page.element_definition_names).to eq(%w(header article search))
865
+ end
866
+ end
840
867
  end
841
868
 
842
- it "returns always an array" do
843
- allow(page).to receive(:definition).and_return({})
844
- expect(page.element_definition_names).to be_an(Array)
869
+ context "without assigned elements from page definition" do
870
+ before do
871
+ allow(page).to receive(:element_names_from_page_definition).and_return([])
872
+ allow(page).to receive(:element_names_from_cell_definition).and_return(['article'])
873
+ end
874
+
875
+ it "returns an array" do
876
+ expect(page.element_definition_names).to be_an(Array)
877
+ end
878
+ end
879
+
880
+ context "without assigned elements from cell definition" do
881
+ before do
882
+ allow(page).to receive(:element_names_from_page_definition).and_return(['article'])
883
+ allow(page).to receive(:element_names_from_cell_definition).and_return([])
884
+ end
885
+
886
+ it "returns an array" do
887
+ expect(page.element_definition_names).to be_an(Array)
888
+ end
889
+ end
890
+ end
891
+
892
+ describe "#element_names_from_page_definition" do
893
+ let(:page) { FactoryGirl.build_stubbed(:public_page) }
894
+
895
+ context "with assigned elements from page definition" do
896
+ before do
897
+ allow(page).to receive(:definition).and_return(
898
+ {'name' => 'test_page', 'elements' => ['article']}
899
+ )
900
+ end
901
+
902
+ it "returns an array of the page's element names" do
903
+ expect(page.element_names_from_page_definition).to eq(['article'])
904
+ end
905
+ end
906
+
907
+ context "without assigned elements from page definition" do
908
+ before do
909
+ allow(page).to receive(:definition).and_return({})
910
+ end
911
+
912
+ it "returns an array" do
913
+ expect(page.element_names_from_page_definition).to be_an(Array)
914
+ end
915
+ end
916
+ end
917
+
918
+ describe "#element_names_from_cell_definition" do
919
+ let(:page) { FactoryGirl.build_stubbed(:public_page) }
920
+
921
+ context "with assigned elements from cell definition" do
922
+ before do
923
+ allow(page).to receive(:cell_definitions).and_return([
924
+ {'name' => 'header', 'elements' => ['article']}
925
+ ])
926
+ end
927
+
928
+ it "returns an array of the cell's element names" do
929
+ expect(page.element_names_from_cell_definition).to eq(['article'])
930
+ end
931
+ end
932
+
933
+ context "without assigned elements from cell definition" do
934
+ it "returns an array" do
935
+ expect(page.element_names_from_cell_definition).to be_an(Array)
936
+ end
845
937
  end
846
938
  end
847
939
 
@@ -1589,7 +1681,7 @@ module Alchemy
1589
1681
 
1590
1682
  context 'indicate page editors' do
1591
1683
  let(:page) { Page.new }
1592
- let(:user) { create(:editor_user) }
1684
+ let(:user) { create(:alchemy_dummy_user, :as_editor) }
1593
1685
 
1594
1686
  describe '#creator' do
1595
1687
  before { page.update(creator_id: user.id) }
@@ -1,142 +1,124 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe "The Routing" do
4
-
5
4
  routes { Alchemy::Engine.routes }
6
5
 
7
6
  context "for downloads" do
8
-
9
7
  it "should have a named route" do
10
8
  expect({
11
- :get => "/attachment/32/download/Presseveranstaltung.pdf"
9
+ get: "/attachment/32/download/Presseveranstaltung.pdf"
12
10
  }).to route_to(
13
- :controller => "alchemy/attachments",
14
- :action => "download",
15
- :id => "32",
16
- :name => "Presseveranstaltung",
17
- :format => "pdf"
11
+ controller: "alchemy/attachments",
12
+ action: "download",
13
+ id: "32",
14
+ name: "Presseveranstaltung",
15
+ format: "pdf"
18
16
  )
19
17
  end
20
-
21
18
  end
22
19
 
23
20
  describe "nested url" do
24
-
25
21
  context "one level deep nested" do
26
-
27
22
  it "should route to pages show" do
28
23
  expect({
29
- :get => "/products/my-product"
24
+ get: "/products/my-product"
30
25
  }).to route_to(
31
- :controller => "alchemy/pages",
32
- :action => "show",
33
- :urlname => "products/my-product"
26
+ controller: "alchemy/pages",
27
+ action: "show",
28
+ urlname: "products/my-product"
34
29
  )
35
30
  end
36
31
 
37
32
  context "and language" do
38
-
39
33
  it "should route to pages show" do
40
34
  expect({
41
- :get => "/de/products/my-product"
35
+ get: "/de/products/my-product"
42
36
  }).to route_to(
43
- :controller => "alchemy/pages",
44
- :action => "show",
45
- :urlname => "products/my-product",
46
- :lang => "de"
37
+ controller: "alchemy/pages",
38
+ action: "show",
39
+ urlname: "products/my-product",
40
+ locale: "de"
47
41
  )
48
42
  end
49
-
50
43
  end
51
-
52
44
  end
53
45
 
54
46
  context "two levels deep nested" do
55
-
56
47
  it "should route to pages show" do
57
48
  expect({
58
- :get => "/catalog/products/my-product"
49
+ get: "/catalog/products/my-product"
59
50
  }).to route_to(
60
- :controller => "alchemy/pages",
61
- :action => "show",
62
- :urlname => "catalog/products/my-product"
51
+ controller: "alchemy/pages",
52
+ action: "show",
53
+ urlname: "catalog/products/my-product"
63
54
  )
64
55
  end
65
56
 
66
57
  context "and language" do
67
-
68
58
  it "should route to pages show" do
69
59
  expect({
70
- :get => "/de/catalog/products/my-product"
60
+ get: "/de/catalog/products/my-product"
71
61
  }).to route_to(
72
- :controller => "alchemy/pages",
73
- :action => "show",
74
- :urlname => "catalog/products/my-product",
75
- :lang => "de"
62
+ controller: "alchemy/pages",
63
+ action: "show",
64
+ urlname: "catalog/products/my-product",
65
+ locale: "de"
76
66
  )
77
67
  end
78
-
79
68
  end
80
-
81
69
  end
82
70
 
83
71
  context "with a blog date url" do
84
-
85
72
  it "should route to pages show" do
86
73
  expect({
87
- :get => "/2011/12/08/my-post"
74
+ get: "/2011/12/08/my-post"
88
75
  }).to route_to(
89
- :controller => "alchemy/pages",
90
- :action => "show",
91
- :urlname => "2011/12/08/my-post"
76
+ controller: "alchemy/pages",
77
+ action: "show",
78
+ urlname: "2011/12/08/my-post"
92
79
  )
93
80
  end
94
81
 
95
82
  context "and language" do
96
-
97
83
  it "should route to pages show" do
98
84
  expect({
99
- :get => "/de/2011/12/08/my-post"
85
+ get: "/de/2011/12/08/my-post"
100
86
  }).to route_to(
101
- :controller => "alchemy/pages",
102
- :action => "show",
103
- :urlname => "2011/12/08/my-post",
104
- :lang => "de"
87
+ controller: "alchemy/pages",
88
+ action: "show",
89
+ urlname: "2011/12/08/my-post",
90
+ locale: "de"
105
91
  )
106
92
  end
107
-
108
93
  end
109
-
110
94
  end
111
-
112
95
  end
113
96
 
114
97
  describe "for displaying pictures" do
115
-
116
98
  it "should route to show action" do
117
99
  expect({
118
- :get => "/pictures/3/show/900x300/kitten.jpg"
100
+ get: "/pictures/3/show/900x300/kitten.jpg"
119
101
  }).to route_to(
120
- :controller => "alchemy/pictures",
121
- :action => "show",
122
- :id => "3",
123
- :size => "900x300",
124
- :name => "kitten",
125
- :format => "jpg"
102
+ controller: "alchemy/pictures",
103
+ action: "show",
104
+ id: "3",
105
+ size: "900x300",
106
+ name: "kitten",
107
+ format: "jpg"
126
108
  )
127
109
  end
128
110
 
129
111
  it "should route to cropped show action" do
130
112
  expect({
131
- :get => "/pictures/3/show/900x300/crop/kitten.jpg"
113
+ get: "/pictures/3/show/900x300/crop/kitten.jpg"
132
114
  }).to route_to(
133
- :controller => "alchemy/pictures",
134
- :action => "show",
135
- :id => "3",
136
- :size => "900x300",
137
- :crop => "crop",
138
- :name => "kitten",
139
- :format => "jpg"
115
+ controller: "alchemy/pictures",
116
+ action: "show",
117
+ id: "3",
118
+ size: "900x300",
119
+ crop: "crop",
120
+ name: "kitten",
121
+ format: "jpg"
140
122
  )
141
123
  end
142
124
 
@@ -144,15 +126,15 @@ describe "The Routing" do
144
126
  expect(get(
145
127
  "/pictures/3/show/300x300/crop/200x50/100x100/kitten.jpg"
146
128
  )).to route_to(
147
- :controller => "alchemy/pictures",
148
- :action => "show",
149
- :id => "3",
150
- :size => "300x300",
151
- :crop => "crop",
152
- :crop_from => "200x50",
153
- :crop_size => "100x100",
154
- :name => "kitten",
155
- :format => "jpg"
129
+ controller: "alchemy/pictures",
130
+ action: "show",
131
+ id: "3",
132
+ size: "300x300",
133
+ crop: "crop",
134
+ crop_from: "200x50",
135
+ crop_size: "100x100",
136
+ name: "kitten",
137
+ format: "jpg"
156
138
  )
157
139
  end
158
140
 
@@ -160,12 +142,12 @@ describe "The Routing" do
160
142
  expect(get(
161
143
  "/pictures/3/thumbnails/small/kitten.jpg"
162
144
  )).to route_to(
163
- :controller => "alchemy/pictures",
164
- :action => "thumbnail",
165
- :id => "3",
166
- :size => "small",
167
- :name => "kitten",
168
- :format => "jpg"
145
+ controller: "alchemy/pictures",
146
+ action: "thumbnail",
147
+ id: "3",
148
+ size: "small",
149
+ name: "kitten",
150
+ format: "jpg"
169
151
  )
170
152
  end
171
153
 
@@ -173,13 +155,13 @@ describe "The Routing" do
173
155
  expect(get(
174
156
  "/pictures/3/thumbnails/small/crop/kitten.jpg"
175
157
  )).to route_to(
176
- :controller => "alchemy/pictures",
177
- :action => "thumbnail",
178
- :id => "3",
179
- :crop => "crop",
180
- :size => "small",
181
- :name => "kitten",
182
- :format => "jpg"
158
+ controller: "alchemy/pictures",
159
+ action: "thumbnail",
160
+ id: "3",
161
+ crop: "crop",
162
+ size: "small",
163
+ name: "kitten",
164
+ format: "jpg"
183
165
  )
184
166
  end
185
167
 
@@ -187,14 +169,14 @@ describe "The Routing" do
187
169
  expect(get(
188
170
  "/pictures/3/thumbnails/small/0x0/200x200/kitten.jpg"
189
171
  )).to route_to(
190
- :controller => "alchemy/pictures",
191
- :action => "thumbnail",
192
- :id => "3",
193
- :crop_from => "0x0",
194
- :crop_size => "200x200",
195
- :size => "small",
196
- :name => "kitten",
197
- :format => "jpg"
172
+ controller: "alchemy/pictures",
173
+ action: "thumbnail",
174
+ id: "3",
175
+ crop_from: "0x0",
176
+ crop_size: "200x200",
177
+ size: "small",
178
+ name: "kitten",
179
+ format: "jpg"
198
180
  )
199
181
  end
200
182
 
@@ -202,14 +184,51 @@ describe "The Routing" do
202
184
  expect(get(
203
185
  "/pictures/3/zoom/kitten.jpg"
204
186
  )).to route_to(
205
- :controller => "alchemy/pictures",
206
- :action => "zoom",
207
- :id => "3",
208
- :name => "kitten",
209
- :format => "jpg"
187
+ controller: "alchemy/pictures",
188
+ action: "zoom",
189
+ id: "3",
190
+ name: "kitten",
191
+ format: "jpg"
210
192
  )
211
193
  end
194
+ end
212
195
 
196
+ describe "image format requests" do
197
+ it "should not be handled by alchemy/pages controller" do
198
+ expect({
199
+ get: "/products/my-product.jpg"
200
+ }).not_to be_routable
201
+ end
213
202
  end
214
203
 
204
+ describe "unknown formats" do
205
+ it "should be handled by alchemy/pages controller" do
206
+ expect({
207
+ get: "/index.php?id=234"
208
+ }).to route_to(
209
+ controller: "alchemy/pages",
210
+ action: "show",
211
+ urlname: "index",
212
+ format: "php",
213
+ id: "234"
214
+ )
215
+
216
+ expect({
217
+ get: "/action.do"
218
+ }).to route_to(
219
+ controller: "alchemy/pages",
220
+ action: "show",
221
+ urlname: "action",
222
+ format: "do"
223
+ )
224
+ end
225
+ end
226
+
227
+ describe "Rails info requests" do
228
+ it "should not be handled by alchemy/pages controller" do
229
+ expect({
230
+ get: "/rails/info/routes"
231
+ }).not_to be_routable
232
+ end
233
+ end
215
234
  end