sinicum 0.5.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.
- checksums.yaml +7 -0
- data/.cane +19 -0
- data/.gitignore +14 -0
- data/.rubocop.yml +30 -0
- data/.travis.yml +14 -0
- data/Gemfile +4 -0
- data/LICENSE +24 -0
- data/README.md +327 -0
- data/Rakefile +37 -0
- data/app/assets/javascripts/sinicum/magnolia_client.js.coffee +233 -0
- data/app/controllers/sinicum/controller_base.rb +173 -0
- data/app/controllers/sinicum/controllers/cache_aware.rb +16 -0
- data/app/controllers/sinicum/controllers/global_state_cache.rb +83 -0
- data/app/helpers/sinicum/helper_utils.rb +152 -0
- data/app/helpers/sinicum/mgnl_helper.rb +145 -0
- data/app/helpers/sinicum/mgnl_helper5.rb +7 -0
- data/app/helpers/sinicum/mgnl_image_helper.rb +26 -0
- data/app/helpers/sinicum/taglib_helper5.rb +166 -0
- data/gemfiles/Gemfile-3.2 +6 -0
- data/gemfiles/Gemfile-4.0 +6 -0
- data/lib/generators/sinicum/install_generator.rb +162 -0
- data/lib/generators/sinicum/templates/VersionHandler.java +18 -0
- data/lib/generators/sinicum/templates/config/default/log4j-development.xml +203 -0
- data/lib/generators/sinicum/templates/config/default/log4j.xml +200 -0
- data/lib/generators/sinicum/templates/config/default/magnolia-author.properties +63 -0
- data/lib/generators/sinicum/templates/config/default/magnolia-public01.properties +63 -0
- data/lib/generators/sinicum/templates/config/default/magnolia.properties +63 -0
- data/lib/generators/sinicum/templates/config/repo-conf/jackrabbit-bundle-postgres-search-author.xml +73 -0
- data/lib/generators/sinicum/templates/config/repo-conf/jackrabbit-bundle-postgres-search-public01.xml +73 -0
- data/lib/generators/sinicum/templates/config/repo-conf/jackrabbit-bundle-postgres-search.xml +70 -0
- data/lib/generators/sinicum/templates/magnolia/config.modules.myproject.dialogs.xml +1625 -0
- data/lib/generators/sinicum/templates/magnolia/config.modules.myproject.templates.xml +247 -0
- data/lib/generators/sinicum/templates/module-config.xml +13 -0
- data/lib/generators/sinicum/templates/module-pom.xml +67 -0
- data/lib/generators/sinicum/templates/project-pom.xml +104 -0
- data/lib/generators/sinicum/templates/rails/_article.html.haml +15 -0
- data/lib/generators/sinicum/templates/rails/_content.html.haml +2 -0
- data/lib/generators/sinicum/templates/rails/_meta.html.haml +9 -0
- data/lib/generators/sinicum/templates/rails/application.html.haml +11 -0
- data/lib/generators/sinicum/templates/rails/content_controller.rb +5 -0
- data/lib/generators/sinicum/templates/rails/imaging.yml +8 -0
- data/lib/generators/sinicum/templates/rails/sinicum_server.yml +15 -0
- data/lib/sinicum.rb +53 -0
- data/lib/sinicum/content/aggregator.rb +173 -0
- data/lib/sinicum/content/website_content_resolver.rb +10 -0
- data/lib/sinicum/engine.rb +23 -0
- data/lib/sinicum/imaging.rb +29 -0
- data/lib/sinicum/imaging/config.rb +133 -0
- data/lib/sinicum/imaging/converter.rb +81 -0
- data/lib/sinicum/imaging/default_converter.rb +20 -0
- data/lib/sinicum/imaging/image_size_converter.rb +52 -0
- data/lib/sinicum/imaging/imaging.rb +171 -0
- data/lib/sinicum/imaging/imaging_file.rb +115 -0
- data/lib/sinicum/imaging/imaging_middleware.rb +56 -0
- data/lib/sinicum/imaging/max_size_converter.rb +39 -0
- data/lib/sinicum/imaging/resize_crop_converter.rb +35 -0
- data/lib/sinicum/jcr/api_client.rb +50 -0
- data/lib/sinicum/jcr/api_queries.rb +37 -0
- data/lib/sinicum/jcr/cache/global_cache.rb +26 -0
- data/lib/sinicum/jcr/dam/document.rb +57 -0
- data/lib/sinicum/jcr/dam/image.rb +40 -0
- data/lib/sinicum/jcr/jcr_configuration.rb +67 -0
- data/lib/sinicum/jcr/mgnl4_compatibility.rb +11 -0
- data/lib/sinicum/jcr/node.rb +268 -0
- data/lib/sinicum/jcr/node_initializer.rb +16 -0
- data/lib/sinicum/jcr/node_queries.rb +101 -0
- data/lib/sinicum/jcr/query_sanitizer.rb +24 -0
- data/lib/sinicum/jcr/type_translator.rb +38 -0
- data/lib/sinicum/jcr/type_translators/component_translator.rb +28 -0
- data/lib/sinicum/jcr/type_translators/dam_translator.rb +33 -0
- data/lib/sinicum/jcr/type_translators/data_translator.rb +31 -0
- data/lib/sinicum/jcr/type_translators/default_translator.rb +13 -0
- data/lib/sinicum/jcr/type_translators/translator_base.rb +40 -0
- data/lib/sinicum/logger.rb +28 -0
- data/lib/sinicum/navigation/default_navigation_element.rb +30 -0
- data/lib/sinicum/navigation/navigation_element.rb +39 -0
- data/lib/sinicum/navigation/navigation_element_list.rb +33 -0
- data/lib/sinicum/navigation/navigation_handler.rb +95 -0
- data/lib/sinicum/navigation/navigation_status.rb +27 -0
- data/lib/sinicum/templating/area_handler.rb +33 -0
- data/lib/sinicum/templating/dialog_resolver.rb +26 -0
- data/lib/sinicum/templating/templating_utils.rb +24 -0
- data/lib/sinicum/util.rb +12 -0
- data/lib/sinicum/version.rb +3 -0
- data/script/cibuild +31 -0
- data/sinicum.gemspec +29 -0
- data/spec/controllers/sinicum/controller_base_spec.rb +53 -0
- data/spec/controllers/sinicum/controllers/global_state_cache_spec.rb +35 -0
- data/spec/dummy/REVISION +1 -0
- data/spec/dummy/Rakefile +7 -0
- data/spec/dummy/app/controllers/application_controller.rb +5 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/views/application/index.html.erb +1 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/app/views/layouts/layout_name.html.erb +0 -0
- data/spec/dummy/app/views/layouts/my-module/test.html.erb +0 -0
- data/spec/dummy/app/views/layouts/my_module/test.html.erb +0 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/config/application.rb +45 -0
- data/spec/dummy/config/boot.rb +10 -0
- data/spec/dummy/config/database.yml +22 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +24 -0
- data/spec/dummy/config/environments/production.rb +51 -0
- data/spec/dummy/config/environments/test.rb +34 -0
- data/spec/dummy/config/imaging.yml +7 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/inflections.rb +10 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/secret_token.rb +11 -0
- data/spec/dummy/config/initializers/session_store.rb +8 -0
- data/spec/dummy/config/locales/en.yml +5 -0
- data/spec/dummy/config/routes.rb +59 -0
- data/spec/dummy/config/sinicum_server.yml +13 -0
- data/spec/dummy/public/404.html +26 -0
- data/spec/dummy/public/422.html +26 -0
- data/spec/dummy/public/500.html +26 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/public/javascripts/application.js +2 -0
- data/spec/dummy/public/javascripts/controls.js +965 -0
- data/spec/dummy/public/javascripts/dragdrop.js +974 -0
- data/spec/dummy/public/javascripts/effects.js +1123 -0
- data/spec/dummy/public/javascripts/prototype.js +6001 -0
- data/spec/dummy/public/javascripts/rails.js +191 -0
- data/spec/dummy/public/stylesheets/.gitkeep +0 -0
- data/spec/dummy/script/rails +6 -0
- data/spec/fixtures/api/cache_global.json +3 -0
- data/spec/fixtures/api/content_mgnl5.json +22 -0
- data/spec/fixtures/api/default_json.json.erb +47 -0
- data/spec/fixtures/api/default_json_mgnl5.json.erb +27 -0
- data/spec/fixtures/api/file.json +73 -0
- data/spec/fixtures/api/file_mgnl5.json +51 -0
- data/spec/fixtures/api/homepage.json +1497 -0
- data/spec/fixtures/api/homepage_parent.json +483 -0
- data/spec/fixtures/api/image.json +73 -0
- data/spec/fixtures/api/image_mgnl5.json +50 -0
- data/spec/fixtures/api/navigation_children.json +3107 -0
- data/spec/fixtures/api/navigation_parents.json +25 -0
- data/spec/fixtures/api/product.json +2084 -0
- data/spec/fixtures/api/query_result.json +61 -0
- data/spec/fixtures/mock_content.rb +6 -0
- data/spec/fixtures/mock_image.gif +0 -0
- data/spec/helpers/sinicum/helper_utils_spec.rb +55 -0
- data/spec/helpers/sinicum/mgnl_helper_spec.rb +315 -0
- data/spec/helpers/sinicum/mgnl_image_helper_spec.rb +103 -0
- data/spec/sinicum/content/aggregator_spec.rb +91 -0
- data/spec/sinicum/content/website_content_resolver_spec.rb +14 -0
- data/spec/sinicum/imaging/config_spec.rb +50 -0
- data/spec/sinicum/imaging/converter_spec.rb +41 -0
- data/spec/sinicum/imaging/image_size_converter_spec.rb +27 -0
- data/spec/sinicum/imaging/imaging.yml +15 -0
- data/spec/sinicum/imaging/imaging_file_spec.rb +125 -0
- data/spec/sinicum/imaging/imaging_middleware_spec.rb +79 -0
- data/spec/sinicum/imaging/max_size_converter_spec.rb +52 -0
- data/spec/sinicum/imaging/resize_crop_converter_spec.rb +18 -0
- data/spec/sinicum/imaging_spec.rb +13 -0
- data/spec/sinicum/jcr/api_client_spec.rb +69 -0
- data/spec/sinicum/jcr/cache/global_cache_spec.rb +29 -0
- data/spec/sinicum/jcr/dam/document_spec.rb +81 -0
- data/spec/sinicum/jcr/dam/image_spec.rb +46 -0
- data/spec/sinicum/jcr/jcr_configuration_spec.rb +57 -0
- data/spec/sinicum/jcr/mgnl4_compatibility_spec.rb +10 -0
- data/spec/sinicum/jcr/node_queries_spec.rb +113 -0
- data/spec/sinicum/jcr/node_spec.rb +261 -0
- data/spec/sinicum/jcr/query_sanitizer_spec.rb +26 -0
- data/spec/sinicum/jcr/type_translator_spec.rb +42 -0
- data/spec/sinicum/jcr/type_translators/component_translator_spec.rb +71 -0
- data/spec/sinicum/jcr/type_translators/data_translator_spec.rb +38 -0
- data/spec/sinicum/jcr/type_translators/default_translator_spec.rb +19 -0
- data/spec/sinicum/navigation/default_navigation_element_spec.rb +45 -0
- data/spec/sinicum/navigation/navigation_handler_spec.rb +71 -0
- data/spec/sinicum/templating/dialog_resolver_spec.rb +13 -0
- data/spec/sinicum/util_spec.rb +34 -0
- data/spec/spec_helper.rb +42 -0
- data/spec/support/default_node_reader.rb +40 -0
- metadata +434 -0
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
module Sinicum
|
|
4
|
+
module Content
|
|
5
|
+
describe "Content Thread local functionality" do
|
|
6
|
+
it "should return the original content as content data" do
|
|
7
|
+
Aggregator.original_content = "content"
|
|
8
|
+
Aggregator.content_data.should == "content"
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "should implicitly reset all stacks if original content is called" do
|
|
12
|
+
Aggregator.should_receive(:clean)
|
|
13
|
+
Aggregator.original_content = "original_content"
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "should return an empty hash if no content node with the respective name exists" do
|
|
17
|
+
Aggregator.original_content = {}
|
|
18
|
+
Aggregator.push_content_node(:no_valid_name) do
|
|
19
|
+
Aggregator.content_data.should == {}
|
|
20
|
+
end
|
|
21
|
+
Aggregator.clean
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it "should clean the stack" do
|
|
25
|
+
Aggregator.original_content = "content"
|
|
26
|
+
Thread.current[:__cms_stack] = "other content"
|
|
27
|
+
Aggregator.clean
|
|
28
|
+
Aggregator.original_content.should.nil?
|
|
29
|
+
Thread.current[:__cms_stack].should.nil?
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it "should push a paragraph name" do
|
|
33
|
+
Aggregator.push_content_node("some_name") do
|
|
34
|
+
Aggregator.content_node.should eq("some_name")
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
describe "current content" do
|
|
39
|
+
it "should push current content" do
|
|
40
|
+
Aggregator.original_content = "original"
|
|
41
|
+
in_block = false
|
|
42
|
+
Aggregator.push_current_content("local") do
|
|
43
|
+
Aggregator.content_data.should eq("local")
|
|
44
|
+
in_block = true
|
|
45
|
+
end
|
|
46
|
+
Aggregator.content_data.should eq("original")
|
|
47
|
+
in_block.should be_true
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
describe "current page" do
|
|
52
|
+
before(:each) do
|
|
53
|
+
Aggregator.clean
|
|
54
|
+
@original_page = Sinicum::Jcr::Node.new
|
|
55
|
+
@new_page = Sinicum::Jcr::Node.new
|
|
56
|
+
Aggregator.original_content = @original_page
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
it "should return the original page if no active page has been set explicitly" do
|
|
60
|
+
Aggregator.active_page.should == @original_page
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it "should push the new content on top of the active page stack" do
|
|
64
|
+
Aggregator.push_active_page(@new_page) do
|
|
65
|
+
Aggregator.active_page.should == @new_page
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it "should restore the active page after the push" do
|
|
70
|
+
Aggregator.push_active_page(@new_page) do
|
|
71
|
+
# nothing
|
|
72
|
+
end
|
|
73
|
+
Aggregator.active_page.should == @original_page
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
it "should make the new active page the current content_data object" do
|
|
77
|
+
Aggregator.push_active_page(@new_page) do
|
|
78
|
+
Aggregator.content_data.should == @new_page
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
it "should restore the content data object after the push" do
|
|
83
|
+
Aggregator.push_active_page(@new_page) do
|
|
84
|
+
# nothing
|
|
85
|
+
end
|
|
86
|
+
Aggregator.content_data.should == @original_page
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
module Sinicum
|
|
4
|
+
module Content
|
|
5
|
+
describe WebsiteContentResolver do
|
|
6
|
+
it "should fetch the content matching the path" do
|
|
7
|
+
node = double(:node)
|
|
8
|
+
Sinicum::Jcr::Node.should_receive(:find_by_path).with(:website, "/home").and_return(node)
|
|
9
|
+
result = WebsiteContentResolver.find_for_path("/home")
|
|
10
|
+
result.should eq(node)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
module Sinicum
|
|
4
|
+
module Imaging
|
|
5
|
+
describe Config do
|
|
6
|
+
test_config = File.join(File.dirname(__FILE__), "imaging.yml")
|
|
7
|
+
|
|
8
|
+
before(:each) do
|
|
9
|
+
@tmpdir = File.join("/", "tmp", "imaging")
|
|
10
|
+
FileUtils.mkdir(@tmpdir) unless File.exist?(@tmpdir)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
after(:each) do
|
|
14
|
+
FileUtils.rm_r(@tmpdir) if File.exist?(@tmpdir)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "should not initialize if not yet configured" do
|
|
18
|
+
expect { Config.instance }.to raise_error(RuntimeError, /config/)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "should use the correct configuration file" do
|
|
22
|
+
config = Config.configure(test_config)
|
|
23
|
+
config.send(:config_file).should == test_config
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "should set the right root directory" do
|
|
27
|
+
config = Config.configure(test_config)
|
|
28
|
+
config.root_dir.should == @tmpdir.to_s
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "should store all files under the root dir" do
|
|
32
|
+
config = Config.configure(test_config)
|
|
33
|
+
config.file_dir.should =~ /#{config.root_dir}\/.+/
|
|
34
|
+
config.tmp_dir.should =~ /#{config.root_dir}\/.+/
|
|
35
|
+
config.version_file.should =~ /#{config.root_dir}\/.+/
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it "should return the default converter if no valid renderer is given" do
|
|
39
|
+
config = Config.configure(test_config)
|
|
40
|
+
config.converter(:inexistent).should be_a DefaultConverter
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it "should return the right converter" do
|
|
44
|
+
config = Config.configure(test_config)
|
|
45
|
+
config.converter(:slideshow_thumbs).should be_a ResizeCropConverter
|
|
46
|
+
config.converter(:margin_column).should be_a MaxSizeConverter
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
module Sinicum
|
|
4
|
+
module Imaging
|
|
5
|
+
describe Converter do
|
|
6
|
+
let(:conv) do
|
|
7
|
+
clazz = Class.new do
|
|
8
|
+
include Converter
|
|
9
|
+
|
|
10
|
+
def initialize(configuration)
|
|
11
|
+
super(configuration)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
clazz
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
describe "#device_pixel_size" do
|
|
18
|
+
it "should work without a hires_factor" do
|
|
19
|
+
converter = conv.new("x" => 57)
|
|
20
|
+
converter.send(:device_pixel_size, 57).should eq(57)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "should consider a hires_factor if given" do
|
|
24
|
+
converter = conv.new("x" => 57, "hires_factor" => 2)
|
|
25
|
+
converter.send(:device_pixel_size, 57).should eq(114)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it "should consider round a result and always return an integer" do
|
|
29
|
+
converter = conv.new("x" => 57, "hires_factor" => 1.4)
|
|
30
|
+
converter.send(:device_pixel_size, 57).should eq(80)
|
|
31
|
+
converter.send(:device_pixel_size, 57).should be_kind_of(Integer)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it "should work with an empty string" do
|
|
35
|
+
converter = conv.new("x" => 57, "hires_factor" => 2)
|
|
36
|
+
converter.send(:device_pixel_size, '').should eq('')
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
module Sinicum
|
|
4
|
+
module Imaging
|
|
5
|
+
describe ImageSizeConverter do
|
|
6
|
+
let(:image) do
|
|
7
|
+
document = double("document")
|
|
8
|
+
document.stub(:[]).and_return(nil)
|
|
9
|
+
document.stub(:[]).with(:width).and_return(100)
|
|
10
|
+
document.stub(:[]).with(:height).and_return(50)
|
|
11
|
+
image = Sinicum::Jcr::Dam::Image.new
|
|
12
|
+
image.stub(:[]).and_return(nil)
|
|
13
|
+
image.stub(:[]).with(:document).and_return(document)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "should convert the width" do
|
|
17
|
+
conv = ImageSizeConverter.new(image, "teaser")
|
|
18
|
+
conv.width.should eq(960)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "should convert the height" do
|
|
22
|
+
conv = ImageSizeConverter.new(image, "teaser")
|
|
23
|
+
conv.height.should eq(444)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
module Sinicum
|
|
4
|
+
module Imaging
|
|
5
|
+
describe ImagingFile do
|
|
6
|
+
context "dam" do
|
|
7
|
+
it "should normalize the path" do
|
|
8
|
+
file = ImagingFile.new("/dam/pa.th/to.jpg")
|
|
9
|
+
file.normalized_request_path.should eq("/damfiles/default/pa.th/to")
|
|
10
|
+
file.extension.should eq("jpg")
|
|
11
|
+
file.fingerprint.should be nil
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "should normalize not touch a regular imaging path" do
|
|
15
|
+
file = ImagingFile.new("/damfiles/default/path/to")
|
|
16
|
+
file.normalized_request_path.should eq("/damfiles/default/path/to")
|
|
17
|
+
file.extension.should be nil
|
|
18
|
+
file.fingerprint.should be nil
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "should extract the cache key with a suffix" do
|
|
22
|
+
file = ImagingFile.new(
|
|
23
|
+
"/damfiles/default/path/to/file-de89466a9267dccc7712379f44e6cd85.jpg")
|
|
24
|
+
file.normalized_request_path.should eq("/damfiles/default/path/to/file")
|
|
25
|
+
file.extension.should eq("jpg")
|
|
26
|
+
file.fingerprint.should eq("de89466a9267dccc7712379f44e6cd85")
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "should ignore a possible document repetition if the last two path parts do not match" do
|
|
30
|
+
file = ImagingFile.new("/dam/pa.th/to/tu.jpg")
|
|
31
|
+
file.normalized_request_path.should eq("/damfiles/default/pa.th/to/tu")
|
|
32
|
+
file.extension.should eq("jpg")
|
|
33
|
+
file.fingerprint.should be nil
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it "should extract the cache key with a suffix" do
|
|
37
|
+
file = ImagingFile.new("/damfiles/default/path/to/" \
|
|
38
|
+
"file-de89466a9267dccc7712379f44e6cd85.jpg")
|
|
39
|
+
file.normalized_request_path.should eq("/damfiles/default/path/to/file")
|
|
40
|
+
file.extension.should eq("jpg")
|
|
41
|
+
file.fingerprint.should eq("de89466a9267dccc7712379f44e6cd85")
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it "should extract the cache key without a suffix" do
|
|
45
|
+
file = ImagingFile.new(
|
|
46
|
+
"/damfiles/default/path/to/file-de89466a9267dccc7712379f44e6cd85")
|
|
47
|
+
file.normalized_request_path.should eq("/damfiles/default/path/to/file")
|
|
48
|
+
file.extension.should be nil
|
|
49
|
+
file.fingerprint.should eq("de89466a9267dccc7712379f44e6cd85")
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
describe "#cache_time" do
|
|
53
|
+
it "should have a cache time of one day for regular requests" do
|
|
54
|
+
file = ImagingFile.new("/damfiles/default/path/to")
|
|
55
|
+
file.cache_time.should eq(24 * 60 * 60)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it "should have a cache time of a week day for requests with a fingerprint" do
|
|
59
|
+
file = ImagingFile.new("/damfiles/default/path/to-de89466a9267dccc7712379f44e6cd85")
|
|
60
|
+
file.cache_time.should eq(7 * 24 * 60 * 60)
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
context "dms" do
|
|
66
|
+
it "should normalize the path" do
|
|
67
|
+
file = ImagingFile.new("/dms/pa.th/to.jpg")
|
|
68
|
+
file.normalized_request_path.should eq("/dmsfiles/default/pa.th/to")
|
|
69
|
+
file.extension.should eq("jpg")
|
|
70
|
+
file.fingerprint.should be nil
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it "should normalize not touch a regular imaging path" do
|
|
74
|
+
file = ImagingFile.new("/dmsfiles/default/path/to")
|
|
75
|
+
file.normalized_request_path.should eq("/dmsfiles/default/path/to")
|
|
76
|
+
file.extension.should be nil
|
|
77
|
+
file.fingerprint.should be nil
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it "should extract the cache key with a suffix" do
|
|
81
|
+
file = ImagingFile.new(
|
|
82
|
+
"/dmsfiles/default/path/to/file-de89466a9267dccc7712379f44e6cd85.jpg")
|
|
83
|
+
file.normalized_request_path.should eq("/dmsfiles/default/path/to/file")
|
|
84
|
+
file.extension.should eq("jpg")
|
|
85
|
+
file.fingerprint.should eq("de89466a9267dccc7712379f44e6cd85")
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
it "should ignore a possible document repetition if the last two path parts do not match" do
|
|
89
|
+
file = ImagingFile.new("/dms/pa.th/to/tu.jpg")
|
|
90
|
+
file.normalized_request_path.should eq("/dmsfiles/default/pa.th/to/tu")
|
|
91
|
+
file.extension.should eq("jpg")
|
|
92
|
+
file.fingerprint.should be nil
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
it "should extract the cache key with a suffix" do
|
|
96
|
+
file = ImagingFile.new("/dmsfiles/default/path/to/" \
|
|
97
|
+
"file-de89466a9267dccc7712379f44e6cd85.jpg")
|
|
98
|
+
file.normalized_request_path.should eq("/dmsfiles/default/path/to/file")
|
|
99
|
+
file.extension.should eq("jpg")
|
|
100
|
+
file.fingerprint.should eq("de89466a9267dccc7712379f44e6cd85")
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
it "should extract the cache key without a suffix" do
|
|
104
|
+
file = ImagingFile.new(
|
|
105
|
+
"/dmsfiles/default/path/to/file-de89466a9267dccc7712379f44e6cd85")
|
|
106
|
+
file.normalized_request_path.should eq("/dmsfiles/default/path/to/file")
|
|
107
|
+
file.extension.should be nil
|
|
108
|
+
file.fingerprint.should eq("de89466a9267dccc7712379f44e6cd85")
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
describe "#cache_time" do
|
|
112
|
+
it "should have a cache time of one day for regular requests" do
|
|
113
|
+
file = ImagingFile.new("/dmsfiles/default/path/to")
|
|
114
|
+
file.cache_time.should eq(24 * 60 * 60)
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
it "should have a cache time of a week day for requests with a fingerprint" do
|
|
118
|
+
file = ImagingFile.new("/dmsfiles/default/path/to-de89466a9267dccc7712379f44e6cd85")
|
|
119
|
+
file.cache_time.should eq(7 * 24 * 60 * 60)
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
end
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
module Sinicum
|
|
4
|
+
module Imaging
|
|
5
|
+
describe ImagingMiddleware do
|
|
6
|
+
include Rack::Test::Methods
|
|
7
|
+
|
|
8
|
+
let(:inner_app) do
|
|
9
|
+
->(env) { [200, { "Content-Type" => "text/plain" }, "Downstream Response"] }
|
|
10
|
+
end
|
|
11
|
+
let(:app) { ImagingMiddleware.new(inner_app) }
|
|
12
|
+
|
|
13
|
+
let(:mock_file) { File.absolute_path("../../../fixtures/mock_image.gif", __FILE__) }
|
|
14
|
+
|
|
15
|
+
it "should be ok" do
|
|
16
|
+
get "/"
|
|
17
|
+
last_response.should =~ /Downstream Response/
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it "should return 404 if the file requested does not exist" do
|
|
21
|
+
::Sinicum::Imaging::Imaging.stub(:rendered_resource).and_return(nil)
|
|
22
|
+
get "/damfiles/default/path/to/file"
|
|
23
|
+
last_response.status.should eq(404)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
describe "request to an existing file" do
|
|
27
|
+
before(:each) do
|
|
28
|
+
mock_resource = double("resource")
|
|
29
|
+
mock_resource.stub(:path) { mock_file }
|
|
30
|
+
mock_resource.stub(:filename) { "mock_image.gif" }
|
|
31
|
+
mock_resource.stub(:fingerprint) { "de89466a9267dccc7712379f44e6cd85" }
|
|
32
|
+
::Sinicum::Imaging::Imaging.stub(:rendered_resource).and_return(mock_resource)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it "should be successful" do
|
|
36
|
+
get "/damfiles/default/path/to/file-de89466a9267dccc7712379f44e6cd85"
|
|
37
|
+
last_response.status.should eq(200)
|
|
38
|
+
get "/dmsfiles/default/path/to/file-de89466a9267dccc7712379f44e6cd85"
|
|
39
|
+
last_response.status.should eq(200)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it "should set the filename header" do
|
|
43
|
+
get "/damfiles/default/path/to/file-de89466a9267dccc7712379f44e6cd85"
|
|
44
|
+
cd_header = last_response.headers["Content-Disposition"]
|
|
45
|
+
cd_header.should =~ /inline; filename="mock_image.gif"/
|
|
46
|
+
get "/dmsfiles/default/path/to/file-de89466a9267dccc7712379f44e6cd85"
|
|
47
|
+
cd_header = last_response.headers["Content-Disposition"]
|
|
48
|
+
cd_header.should =~ /inline; filename="mock_image.gif"/
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "should set the cache header to one week" do
|
|
52
|
+
Rails.configuration.action_controller.perform_caching = true
|
|
53
|
+
get "/damfiles/default/path/to/file-de89466a9267dccc7712379f44e6cd85"
|
|
54
|
+
cd_header = last_response.headers["Cache-Control"]
|
|
55
|
+
cd_header.should =~ /max-age=604800, public/
|
|
56
|
+
Rails.configuration.action_controller.perform_caching = false
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
it "should set the cache header to one week (dms)" do
|
|
60
|
+
Rails.configuration.action_controller.perform_caching = true
|
|
61
|
+
get "/dmsfiles/default/path/to/file-de89466a9267dccc7712379f44e6cd85"
|
|
62
|
+
cd_header = last_response.headers["Cache-Control"]
|
|
63
|
+
cd_header.should =~ /max-age=604800, public/
|
|
64
|
+
Rails.configuration.action_controller.perform_caching = false
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
describe "request images whith the original prefix" do
|
|
69
|
+
it "should be successful" do
|
|
70
|
+
::Sinicum::Imaging::Imaging.stub(:rendered_resource).and_return(nil)
|
|
71
|
+
get "/dam/path/to/file"
|
|
72
|
+
last_response.body.should_not =~ /Downstream Response/
|
|
73
|
+
get "/dms/path/to/file"
|
|
74
|
+
last_response.body.should_not =~ /Downstream Response/
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|