sinicum 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (176) hide show
  1. checksums.yaml +7 -0
  2. data/.cane +19 -0
  3. data/.gitignore +14 -0
  4. data/.rubocop.yml +30 -0
  5. data/.travis.yml +14 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE +24 -0
  8. data/README.md +327 -0
  9. data/Rakefile +37 -0
  10. data/app/assets/javascripts/sinicum/magnolia_client.js.coffee +233 -0
  11. data/app/controllers/sinicum/controller_base.rb +173 -0
  12. data/app/controllers/sinicum/controllers/cache_aware.rb +16 -0
  13. data/app/controllers/sinicum/controllers/global_state_cache.rb +83 -0
  14. data/app/helpers/sinicum/helper_utils.rb +152 -0
  15. data/app/helpers/sinicum/mgnl_helper.rb +145 -0
  16. data/app/helpers/sinicum/mgnl_helper5.rb +7 -0
  17. data/app/helpers/sinicum/mgnl_image_helper.rb +26 -0
  18. data/app/helpers/sinicum/taglib_helper5.rb +166 -0
  19. data/gemfiles/Gemfile-3.2 +6 -0
  20. data/gemfiles/Gemfile-4.0 +6 -0
  21. data/lib/generators/sinicum/install_generator.rb +162 -0
  22. data/lib/generators/sinicum/templates/VersionHandler.java +18 -0
  23. data/lib/generators/sinicum/templates/config/default/log4j-development.xml +203 -0
  24. data/lib/generators/sinicum/templates/config/default/log4j.xml +200 -0
  25. data/lib/generators/sinicum/templates/config/default/magnolia-author.properties +63 -0
  26. data/lib/generators/sinicum/templates/config/default/magnolia-public01.properties +63 -0
  27. data/lib/generators/sinicum/templates/config/default/magnolia.properties +63 -0
  28. data/lib/generators/sinicum/templates/config/repo-conf/jackrabbit-bundle-postgres-search-author.xml +73 -0
  29. data/lib/generators/sinicum/templates/config/repo-conf/jackrabbit-bundle-postgres-search-public01.xml +73 -0
  30. data/lib/generators/sinicum/templates/config/repo-conf/jackrabbit-bundle-postgres-search.xml +70 -0
  31. data/lib/generators/sinicum/templates/magnolia/config.modules.myproject.dialogs.xml +1625 -0
  32. data/lib/generators/sinicum/templates/magnolia/config.modules.myproject.templates.xml +247 -0
  33. data/lib/generators/sinicum/templates/module-config.xml +13 -0
  34. data/lib/generators/sinicum/templates/module-pom.xml +67 -0
  35. data/lib/generators/sinicum/templates/project-pom.xml +104 -0
  36. data/lib/generators/sinicum/templates/rails/_article.html.haml +15 -0
  37. data/lib/generators/sinicum/templates/rails/_content.html.haml +2 -0
  38. data/lib/generators/sinicum/templates/rails/_meta.html.haml +9 -0
  39. data/lib/generators/sinicum/templates/rails/application.html.haml +11 -0
  40. data/lib/generators/sinicum/templates/rails/content_controller.rb +5 -0
  41. data/lib/generators/sinicum/templates/rails/imaging.yml +8 -0
  42. data/lib/generators/sinicum/templates/rails/sinicum_server.yml +15 -0
  43. data/lib/sinicum.rb +53 -0
  44. data/lib/sinicum/content/aggregator.rb +173 -0
  45. data/lib/sinicum/content/website_content_resolver.rb +10 -0
  46. data/lib/sinicum/engine.rb +23 -0
  47. data/lib/sinicum/imaging.rb +29 -0
  48. data/lib/sinicum/imaging/config.rb +133 -0
  49. data/lib/sinicum/imaging/converter.rb +81 -0
  50. data/lib/sinicum/imaging/default_converter.rb +20 -0
  51. data/lib/sinicum/imaging/image_size_converter.rb +52 -0
  52. data/lib/sinicum/imaging/imaging.rb +171 -0
  53. data/lib/sinicum/imaging/imaging_file.rb +115 -0
  54. data/lib/sinicum/imaging/imaging_middleware.rb +56 -0
  55. data/lib/sinicum/imaging/max_size_converter.rb +39 -0
  56. data/lib/sinicum/imaging/resize_crop_converter.rb +35 -0
  57. data/lib/sinicum/jcr/api_client.rb +50 -0
  58. data/lib/sinicum/jcr/api_queries.rb +37 -0
  59. data/lib/sinicum/jcr/cache/global_cache.rb +26 -0
  60. data/lib/sinicum/jcr/dam/document.rb +57 -0
  61. data/lib/sinicum/jcr/dam/image.rb +40 -0
  62. data/lib/sinicum/jcr/jcr_configuration.rb +67 -0
  63. data/lib/sinicum/jcr/mgnl4_compatibility.rb +11 -0
  64. data/lib/sinicum/jcr/node.rb +268 -0
  65. data/lib/sinicum/jcr/node_initializer.rb +16 -0
  66. data/lib/sinicum/jcr/node_queries.rb +101 -0
  67. data/lib/sinicum/jcr/query_sanitizer.rb +24 -0
  68. data/lib/sinicum/jcr/type_translator.rb +38 -0
  69. data/lib/sinicum/jcr/type_translators/component_translator.rb +28 -0
  70. data/lib/sinicum/jcr/type_translators/dam_translator.rb +33 -0
  71. data/lib/sinicum/jcr/type_translators/data_translator.rb +31 -0
  72. data/lib/sinicum/jcr/type_translators/default_translator.rb +13 -0
  73. data/lib/sinicum/jcr/type_translators/translator_base.rb +40 -0
  74. data/lib/sinicum/logger.rb +28 -0
  75. data/lib/sinicum/navigation/default_navigation_element.rb +30 -0
  76. data/lib/sinicum/navigation/navigation_element.rb +39 -0
  77. data/lib/sinicum/navigation/navigation_element_list.rb +33 -0
  78. data/lib/sinicum/navigation/navigation_handler.rb +95 -0
  79. data/lib/sinicum/navigation/navigation_status.rb +27 -0
  80. data/lib/sinicum/templating/area_handler.rb +33 -0
  81. data/lib/sinicum/templating/dialog_resolver.rb +26 -0
  82. data/lib/sinicum/templating/templating_utils.rb +24 -0
  83. data/lib/sinicum/util.rb +12 -0
  84. data/lib/sinicum/version.rb +3 -0
  85. data/script/cibuild +31 -0
  86. data/sinicum.gemspec +29 -0
  87. data/spec/controllers/sinicum/controller_base_spec.rb +53 -0
  88. data/spec/controllers/sinicum/controllers/global_state_cache_spec.rb +35 -0
  89. data/spec/dummy/REVISION +1 -0
  90. data/spec/dummy/Rakefile +7 -0
  91. data/spec/dummy/app/controllers/application_controller.rb +5 -0
  92. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  93. data/spec/dummy/app/views/application/index.html.erb +1 -0
  94. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  95. data/spec/dummy/app/views/layouts/layout_name.html.erb +0 -0
  96. data/spec/dummy/app/views/layouts/my-module/test.html.erb +0 -0
  97. data/spec/dummy/app/views/layouts/my_module/test.html.erb +0 -0
  98. data/spec/dummy/config.ru +4 -0
  99. data/spec/dummy/config/application.rb +45 -0
  100. data/spec/dummy/config/boot.rb +10 -0
  101. data/spec/dummy/config/database.yml +22 -0
  102. data/spec/dummy/config/environment.rb +5 -0
  103. data/spec/dummy/config/environments/development.rb +24 -0
  104. data/spec/dummy/config/environments/production.rb +51 -0
  105. data/spec/dummy/config/environments/test.rb +34 -0
  106. data/spec/dummy/config/imaging.yml +7 -0
  107. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  108. data/spec/dummy/config/initializers/inflections.rb +10 -0
  109. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  110. data/spec/dummy/config/initializers/secret_token.rb +11 -0
  111. data/spec/dummy/config/initializers/session_store.rb +8 -0
  112. data/spec/dummy/config/locales/en.yml +5 -0
  113. data/spec/dummy/config/routes.rb +59 -0
  114. data/spec/dummy/config/sinicum_server.yml +13 -0
  115. data/spec/dummy/public/404.html +26 -0
  116. data/spec/dummy/public/422.html +26 -0
  117. data/spec/dummy/public/500.html +26 -0
  118. data/spec/dummy/public/favicon.ico +0 -0
  119. data/spec/dummy/public/javascripts/application.js +2 -0
  120. data/spec/dummy/public/javascripts/controls.js +965 -0
  121. data/spec/dummy/public/javascripts/dragdrop.js +974 -0
  122. data/spec/dummy/public/javascripts/effects.js +1123 -0
  123. data/spec/dummy/public/javascripts/prototype.js +6001 -0
  124. data/spec/dummy/public/javascripts/rails.js +191 -0
  125. data/spec/dummy/public/stylesheets/.gitkeep +0 -0
  126. data/spec/dummy/script/rails +6 -0
  127. data/spec/fixtures/api/cache_global.json +3 -0
  128. data/spec/fixtures/api/content_mgnl5.json +22 -0
  129. data/spec/fixtures/api/default_json.json.erb +47 -0
  130. data/spec/fixtures/api/default_json_mgnl5.json.erb +27 -0
  131. data/spec/fixtures/api/file.json +73 -0
  132. data/spec/fixtures/api/file_mgnl5.json +51 -0
  133. data/spec/fixtures/api/homepage.json +1497 -0
  134. data/spec/fixtures/api/homepage_parent.json +483 -0
  135. data/spec/fixtures/api/image.json +73 -0
  136. data/spec/fixtures/api/image_mgnl5.json +50 -0
  137. data/spec/fixtures/api/navigation_children.json +3107 -0
  138. data/spec/fixtures/api/navigation_parents.json +25 -0
  139. data/spec/fixtures/api/product.json +2084 -0
  140. data/spec/fixtures/api/query_result.json +61 -0
  141. data/spec/fixtures/mock_content.rb +6 -0
  142. data/spec/fixtures/mock_image.gif +0 -0
  143. data/spec/helpers/sinicum/helper_utils_spec.rb +55 -0
  144. data/spec/helpers/sinicum/mgnl_helper_spec.rb +315 -0
  145. data/spec/helpers/sinicum/mgnl_image_helper_spec.rb +103 -0
  146. data/spec/sinicum/content/aggregator_spec.rb +91 -0
  147. data/spec/sinicum/content/website_content_resolver_spec.rb +14 -0
  148. data/spec/sinicum/imaging/config_spec.rb +50 -0
  149. data/spec/sinicum/imaging/converter_spec.rb +41 -0
  150. data/spec/sinicum/imaging/image_size_converter_spec.rb +27 -0
  151. data/spec/sinicum/imaging/imaging.yml +15 -0
  152. data/spec/sinicum/imaging/imaging_file_spec.rb +125 -0
  153. data/spec/sinicum/imaging/imaging_middleware_spec.rb +79 -0
  154. data/spec/sinicum/imaging/max_size_converter_spec.rb +52 -0
  155. data/spec/sinicum/imaging/resize_crop_converter_spec.rb +18 -0
  156. data/spec/sinicum/imaging_spec.rb +13 -0
  157. data/spec/sinicum/jcr/api_client_spec.rb +69 -0
  158. data/spec/sinicum/jcr/cache/global_cache_spec.rb +29 -0
  159. data/spec/sinicum/jcr/dam/document_spec.rb +81 -0
  160. data/spec/sinicum/jcr/dam/image_spec.rb +46 -0
  161. data/spec/sinicum/jcr/jcr_configuration_spec.rb +57 -0
  162. data/spec/sinicum/jcr/mgnl4_compatibility_spec.rb +10 -0
  163. data/spec/sinicum/jcr/node_queries_spec.rb +113 -0
  164. data/spec/sinicum/jcr/node_spec.rb +261 -0
  165. data/spec/sinicum/jcr/query_sanitizer_spec.rb +26 -0
  166. data/spec/sinicum/jcr/type_translator_spec.rb +42 -0
  167. data/spec/sinicum/jcr/type_translators/component_translator_spec.rb +71 -0
  168. data/spec/sinicum/jcr/type_translators/data_translator_spec.rb +38 -0
  169. data/spec/sinicum/jcr/type_translators/default_translator_spec.rb +19 -0
  170. data/spec/sinicum/navigation/default_navigation_element_spec.rb +45 -0
  171. data/spec/sinicum/navigation/navigation_handler_spec.rb +71 -0
  172. data/spec/sinicum/templating/dialog_resolver_spec.rb +13 -0
  173. data/spec/sinicum/util_spec.rb +34 -0
  174. data/spec/spec_helper.rb +42 -0
  175. data/spec/support/default_node_reader.rb +40 -0
  176. metadata +434 -0
@@ -0,0 +1,52 @@
1
+ require "spec_helper"
2
+
3
+ module Sinicum
4
+ module Imaging
5
+ describe MaxSizeConverter do
6
+ describe "#converted_size" do
7
+ def image(x, y)
8
+ image = double("image")
9
+ image.stub(:width).and_return(x)
10
+ image.stub(:height).and_return(y)
11
+ image
12
+ end
13
+
14
+ it "should rescale a landscape image correctly to a landscape format" do
15
+ converter = MaxSizeConverter.new("x" => 57, "y" => 42)
16
+ converter.document = image(192, 110)
17
+ converter.converted_size.should == [57, 33]
18
+ end
19
+
20
+ it "should rescale a portrait image correctly to a landscape format" do
21
+ converter = MaxSizeConverter.new("x" => 57, "y" => 42)
22
+ converter.document = image(110, 192)
23
+ converter.converted_size.should == [24, 42]
24
+ end
25
+
26
+ it "should rescale a portrait image correctly to a portrait format" do
27
+ converter = MaxSizeConverter.new("x" => 42, "y" => 57)
28
+ converter.document = image(110, 192)
29
+ converter.converted_size.should == [33, 57]
30
+ end
31
+
32
+ it "should rescale a landscape image correctly to a portrait format" do
33
+ converter = MaxSizeConverter.new("x" => 42, "y" => 57)
34
+ converter.document = image(192, 110)
35
+ converter.converted_size.should == [42, 24]
36
+ end
37
+
38
+ it "should rescale to the same format" do
39
+ converter = MaxSizeConverter.new("x" => 308, "y" => 800)
40
+ converter.document = image(308, 125)
41
+ converter.converted_size.should == [308, 125]
42
+ end
43
+
44
+ it "should rescale an image even if the configuration has no 'y' information" do
45
+ converter = MaxSizeConverter.new("x" => 57)
46
+ converter.document = image(192, 110)
47
+ converter.converted_size.should == [57, 33]
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,18 @@
1
+ require "spec_helper"
2
+ module Sinicum
3
+ module Imaging
4
+ describe ResizeCropConverter do
5
+
6
+ it "should require the arguments format, x, y" do
7
+ config = { "format" => "jpeg", "x" => "200", "y" => "300" }
8
+ conv = ResizeCropConverter.new(config)
9
+ config = { "format" => "jpeg", "x" => "200" }
10
+ expect { conv = ResizeCropConverter.new(config) }.to raise_error(ArgumentError)
11
+ config = { "format" => "jpeg", "y" => "300" }
12
+ expect { conv = ResizeCropConverter.new(config) }.to raise_error(ArgumentError)
13
+ config = { "x" => "200", "y" => "300" }
14
+ expect { conv = ResizeCropConverter.new(config) }.to raise_error(ArgumentError)
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ module Sinicum
4
+ describe Imaging do
5
+ it "should return the default converter name" do
6
+ Imaging.default_converter_name.should eq("default")
7
+ end
8
+
9
+ it "should return the imaging path" do
10
+ Imaging.path_prefix.should eq("/damfiles")
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,69 @@
1
+ require 'spec_helper'
2
+
3
+ module Sinicum
4
+ module Jcr
5
+ describe ApiClient do
6
+ mock_api_client_class = Class.new do
7
+ include ApiClient
8
+ end
9
+
10
+ let(:subject) { mock_api_client_class.new }
11
+ let(:http_client) { double :http_client }
12
+ let(:response) { double :response }
13
+
14
+ let(:host) { "content.dievision.de" }
15
+ let(:client_base_url) { "http://content.dievision.de/sinicum-rest" }
16
+
17
+ before(:each) do
18
+ ApiQueries.configure_jcr = { host: host }
19
+ end
20
+
21
+ describe "GET" do
22
+ it "should delegate to the ApiQueries get method" do
23
+ path = "/path/to/url"
24
+
25
+ ApiQueries.should_receive(:http_client).and_return(http_client)
26
+ http_client.should_receive(:get).with(
27
+ client_base_url + path).and_return(response)
28
+
29
+ subject.api_get(path)
30
+ end
31
+
32
+ it "should delegate to the ApiQueries post method with query parameters" do
33
+ path = "/path/to/url"
34
+ query = { query: { param: "value" } }
35
+
36
+ ApiQueries.should_receive(:http_client).and_return(http_client)
37
+ http_client.should_receive(:get).with(
38
+ client_base_url + path, query).and_return(response)
39
+
40
+ subject.api_get(path, query)
41
+ end
42
+ end
43
+
44
+ describe "POST" do
45
+
46
+ it "should delegate to the ApiQueries post method" do
47
+ path = "/path/to/url"
48
+
49
+ ApiQueries.should_receive(:http_client).and_return(http_client)
50
+ http_client.should_receive(:post).with(
51
+ client_base_url + path).and_return(response)
52
+
53
+ subject.api_post(path)
54
+ end
55
+
56
+ it "should delegate to the ApiQueries post method with query parameters" do
57
+ path = "/path/to/url"
58
+ query = { query: { param: "value" } }
59
+
60
+ ApiQueries.should_receive(:http_client).and_return(http_client)
61
+ http_client.should_receive(:post).with(
62
+ client_base_url + path, query).and_return(response)
63
+
64
+ subject.api_post(path, query)
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ module Sinicum
4
+ module Jcr
5
+ module Cache
6
+ describe GlobalCache do
7
+ let(:prefix) { "http://content.dievision.de:80/sinicum-rest" }
8
+ let(:api_response) do
9
+ File.read(File.dirname(__FILE__) + "/../../../fixtures/api/cache_global.json")
10
+ end
11
+
12
+ before(:each) do
13
+ ::Sinicum::Jcr::ApiQueries.configure_jcr = { host: "content.dievision.de" }
14
+ end
15
+
16
+ before(:each) do
17
+ stub_request(:get, "#{prefix}/_cache/global").to_return(
18
+ body: api_response,
19
+ headers: { "Content-Type" => "application/json" }
20
+ )
21
+ end
22
+
23
+ it "should return the current key" do
24
+ GlobalCache.new.current_key.should eq("a11cd0d31248427cbadfd8a7bc51e04e96e4de98")
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,81 @@
1
+ require 'spec_helper'
2
+
3
+ module Sinicum
4
+ module Jcr
5
+ module Dam
6
+ describe Document do
7
+ let(:api_response) do
8
+ File.read(File.dirname(__FILE__) + "/../../../fixtures/api/file_mgnl5.json")
9
+ end
10
+ let(:json) { MultiJson.load(api_response).first }
11
+
12
+ subject do
13
+ ::Sinicum::Jcr::NodeInitializer.initialize_node_from_json(json)
14
+ end
15
+
16
+ describe "when created from JSON" do
17
+ it { should be_kind_of Document }
18
+ its(:name) { should eq("Tecnotes_18_Sommer_10") }
19
+ its(:subject) { should eq("TecNotes Ausgabe 18, Sommer 2010") }
20
+ its(:description) { should eq("Some Description") }
21
+ its(:file_size) { should eq(562_116_5) }
22
+ its(:file_name) { should eq("Tecnotes_18_Sommer_10.pdf") }
23
+ its(:mime_type) { should eq("application/pdf") }
24
+ end
25
+
26
+ describe "date" do
27
+ it "should have the correct date when 'date1' is given" do
28
+ subject.date.should eq(Date.new(2013, 06, 05))
29
+ end
30
+
31
+ it "should have the correct date when 'date1' is not defined" do
32
+ subject.stub(:[]).with(:date1).and_return(nil)
33
+ unless defined?(JRUBY_VERSION)
34
+ subject.date.should eq(DateTime.new(2010, 7, 27, 14, 41, 4.105, "+0200"))
35
+ end
36
+ end
37
+ end
38
+
39
+ it "should return a web-compatible path" do
40
+ subject.path.should eq(
41
+ "/damfiles/default/shure/support_downloads/education/tecnotes/Tecnotes_18_Sommer_10" \
42
+ "-79209c1a63d7435f3f2179e31c104ef8.pdf")
43
+ end
44
+
45
+ it "should accept a 'converter_name' argument to specify the converter" do
46
+ subject.path(converter: "some_converter").should eq(
47
+ "/damfiles/some_converter/shure/support_downloads/education/tecnotes/" \
48
+ "Tecnotes_18_Sommer_10-79209c1a63d7435f3f2179e31c104ef8.pdf")
49
+ end
50
+
51
+ describe "fingerprint" do
52
+ let(:default_fingerprint) { "79209c1a63d7435f3f2179e31c104ef8" }
53
+
54
+ its(:fingerprint) { should eq(default_fingerprint) }
55
+
56
+ it "should depend on the path" do
57
+ subject.stub(:jcr_path).and_return("different")
58
+ subject.send(:fingerprint).should_not eq(default_fingerprint)
59
+ subject.send(:fingerprint).should =~ /^[a-f0-9]{32}$/
60
+ end
61
+
62
+ it "should depend on the id" do
63
+ subject.stub(:id).and_return("different")
64
+ subject.send(:fingerprint).should_not eq(default_fingerprint)
65
+ subject.send(:fingerprint).should =~ /^[a-f0-9]{32}$/
66
+ end
67
+
68
+ it "should depend on the various other attributes" do
69
+ doc = double("document")
70
+ doc.stub(:[]).with(:"jcr:lastModified").and_return("different")
71
+ doc.stub(:[]).with(:"jcr:lastModifiedBy").and_return("different")
72
+ doc.stub(:[]).with(:size).and_return("different")
73
+ subject.stub(:[]).with(:'jcr:content').and_return(doc)
74
+ subject.send(:fingerprint).should_not eq(default_fingerprint)
75
+ subject.send(:fingerprint).should =~ /^[a-f0-9]{32}$/
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,46 @@
1
+ require 'spec_helper'
2
+
3
+ module Sinicum
4
+ module Jcr
5
+ module Dam
6
+ describe Document do
7
+ let(:api_response) do
8
+ File.read(File.dirname(__FILE__) + "/../../../fixtures/api/image_mgnl5.json")
9
+ end
10
+ let(:json) { MultiJson.load(api_response).first }
11
+
12
+ subject do
13
+ ::Sinicum::Jcr::NodeInitializer.initialize_node_from_json(json)
14
+ end
15
+
16
+ describe "when created from JSON" do
17
+ it { should be_kind_of Image }
18
+ it { should be_kind_of Document }
19
+ its(:width) { should eq(300) }
20
+ its(:height) { should eq(110) }
21
+ end
22
+
23
+ describe "alt tag" do
24
+ it "should take the alt attribute from the subject" do
25
+ subject.alt.should eq("A subject")
26
+ end
27
+
28
+ it "should return an empty string if no subject is given" do
29
+ subject.stub(:[]).with(:subject).and_return(nil)
30
+ subject.alt.should eq("")
31
+ end
32
+ end
33
+
34
+ describe "height and width" do
35
+ it "should consider a converter for the width" do
36
+ subject.width("teaser").should eq(960)
37
+ end
38
+
39
+ it "should consider a converter for the height" do
40
+ subject.height("teaser").should eq(444)
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,57 @@
1
+ module Sinicum; end
2
+ require_relative '../../../lib/sinicum/jcr/jcr_configuration'
3
+
4
+ module Sinicum
5
+ module Jcr
6
+ describe JcrConfiguration do
7
+ it "should respect the configuration parameters" do
8
+ config = JcrConfiguration.new(
9
+ host: "some.host", port: "8080", protocol: "https",
10
+ path_prefix: "/some_prefix", username: "user", password: "pass"
11
+ )
12
+ config.host.should eq("some.host")
13
+ config.port.should eq("8080")
14
+ config.protocol.should eq("https")
15
+ config.path_prefix.should eq("/some_prefix")
16
+ config.username.should eq("user")
17
+ config.password.should eq("pass")
18
+ end
19
+
20
+ it "should add a / to the path prefix if not automatically given" do
21
+ subject.path_prefix = "some_prefix"
22
+ subject.path_prefix.should eq("/some_prefix")
23
+ end
24
+
25
+ it "should not add a / to the path prefix if it does not exist in the configuration" do
26
+ subject.path_prefix = "/some_prefix"
27
+ subject.path_prefix.should eq("/some_prefix")
28
+ end
29
+
30
+ it "should construct a right base url only with the mininum parameters" do
31
+ config = JcrConfiguration.new
32
+ config.base_url.should eq("http://localhost/sinicum-rest")
33
+ end
34
+
35
+ it "should construct a right base_proto_host_port only with the mininum parameters" do
36
+ config = JcrConfiguration.new
37
+ config.base_proto_host_port.should eq("http://localhost")
38
+ end
39
+
40
+ it "should respect the various configuration parameters" do
41
+ config = JcrConfiguration.new(
42
+ host: "some.host", port: "8443", protocol: "https",
43
+ path_prefix: "some_prefix", username: "user", password: "pass"
44
+ )
45
+ config.base_url.should eq("https://some.host:8443/some_prefix")
46
+ end
47
+
48
+ it "should respect the varios configuration parameters for the host part" do
49
+ config = JcrConfiguration.new(
50
+ host: "some.host", port: "8443", protocol: "https",
51
+ path_prefix: "some_prefix", username: "user", password: "pass"
52
+ )
53
+ config.base_proto_host_port.should eq("https://some.host:8443")
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+
3
+ module Sinicum
4
+ module Jcr
5
+ describe Mgnl4Compatibility do
6
+ it "should return a value for authorid"
7
+ it "should return a value for activatorid"
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,113 @@
1
+ require 'spec_helper'
2
+ require 'digest/md5'
3
+
4
+ module Sinicum
5
+ module Jcr
6
+ describe NodeQueries do
7
+ let(:api_response) { File.read(File.dirname(__FILE__) + "/../../fixtures/api/homepage.json") }
8
+ let(:json_response) { MultiJson.load(api_response) }
9
+ let(:prefix) { "http://content.dievision.de:80/sinicum-rest" }
10
+
11
+ before(:each) do
12
+ ApiQueries.configure_jcr = { host: "content.dievision.de" }
13
+ end
14
+
15
+ describe "web access" do
16
+ before(:each) do
17
+ stub_request(:get, "#{prefix}/website/home")
18
+ .to_return(body: api_response, headers: { "Content-Type" => "application/json" })
19
+ stub_request(:get, "#{prefix}/website/_uuid/21cbc762-bdcd-4520-9eff-1928986fb419")
20
+ .to_return(body: api_response, headers: { "Content-Type" => "application/json" })
21
+ end
22
+
23
+ xit "should query for a node by path" do
24
+ Node.should_receive(:new).with(json_response: json_response.first)
25
+ result = Node.find_by_path("website", "home")
26
+ result.should be_a(Sinicum::Jcr::Node)
27
+ end
28
+
29
+ xit "should query for a node by uuid" do
30
+ Node.should_receive(:new).with(json_response: json_response.first)
31
+ result = Node.find_by_uuid("website", "21cbc762-bdcd-4520-9eff-1928986fb419")
32
+ result.should be_a(Sinicum::Jcr::Node)
33
+ end
34
+ end
35
+
36
+ describe "authentication" do
37
+ it "should use no authentication if no user and password is configured" do
38
+ stub_request(:get, "#{prefix}/website/home")
39
+ .to_return(body: api_response, headers: { "Content-Type" => "application/json" })
40
+ Node.should_receive(:new).with(json_response: json_response.first)
41
+
42
+ Node.find_by_path("website", "home")
43
+ end
44
+
45
+ it "should use no authentication if no user and password is configured" do
46
+ stub_request(:get, "user:pass@content.dievision.de/sinicum-rest/website/home")
47
+ .to_return(body: api_response, headers: { "Content-Type" => "application/json" })
48
+ ApiQueries.configure_jcr = {
49
+ host: "content.dievision.de",
50
+ username: "user",
51
+ password: "pass"
52
+ }
53
+ Node.should_receive(:new).with(json_response: json_response.first)
54
+
55
+ Node.find_by_path("website", "home")
56
+ end
57
+ end
58
+
59
+ describe "streaming" do
60
+ it "should construct the right url for streaming an attribute and stream the content" do
61
+ pending "The actual test seems wrong"
62
+ begin
63
+ image_file = File.join(File.dirname(__FILE__), "..", "..", "fixtures", "mock_image.gif")
64
+ tmp_file = File.join(File.dirname(__FILE__), "..", "..", "fixtures", "tmp.gif")
65
+ stub_request(:get, "http://content.dievision.de/sinicum-rest/dam/_binary/some/path")
66
+ .with(query: { "property" => "jcr:data" }).to_return(body: File.new(image_file))
67
+
68
+ target = File.open(tmp_file, "wb")
69
+ Node.stream_attribute(
70
+ "dam", "/some/path", "jcr:data", File.open(tmp_file, "wb")
71
+ )
72
+ WebMock.should have_requested(
73
+ :get,
74
+ "http://content.dievision.de/sinicum-rest/dam/_binary/some/path"
75
+ ).with(query: { "property" => "jcr:data" })
76
+ target.close
77
+
78
+ Digest::MD5.hexdigest(File.read(tmp_file)).should eq(
79
+ Digest::MD5.hexdigest(File.read(tmp_file)))
80
+ ensure
81
+ File.delete(tmp_file) if File.exist?(tmp_file)
82
+ end
83
+ end
84
+ end
85
+
86
+ describe "queries" do
87
+ let(:api_response) do
88
+ File.read(File.dirname(__FILE__) + "/../../fixtures/api/query_result.json")
89
+ end
90
+ let(:json_response) { MultiJson.load(api_response) }
91
+
92
+ before(:each) do
93
+ stub_request(
94
+ :get,
95
+ "http://content.dievision.de/sinicum-rest/website/_query?" \
96
+ "query=/jcr:root/path//element(*, mgnl:page)&language=xpath"
97
+ ).to_return(
98
+ status: 200,
99
+ body: api_response,
100
+ headers: { "Content-Type" => "application/json" }
101
+ )
102
+ end
103
+
104
+ it "should return results based on a query" do
105
+ Node.should_receive(:new).with(json_response: json_response.first)
106
+ Node.should_receive(:new).with(json_response: json_response.last)
107
+ result = Node.query("website", :xpath, "/jcr:root/path//element(*, mgnl:page)")
108
+ result.should be_kind_of(Array)
109
+ end
110
+ end
111
+ end
112
+ end
113
+ end