kuhsaft 2.2.6 → 2.3.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 +4 -4
- data/README.md +37 -0
- data/Rakefile +6 -5
- data/app/assets/javascripts/ckeditor/plugins/adv_link/LICENSE.txt +674 -0
- data/app/assets/javascripts/ckeditor/plugins/adv_link/README.md +62 -0
- data/app/assets/javascripts/ckeditor/plugins/adv_link/dialogs/anchor.js.coffee +81 -0
- data/app/assets/javascripts/ckeditor/plugins/adv_link/dialogs/link.js.coffee +1353 -0
- data/app/assets/javascripts/ckeditor/plugins/adv_link/images/anchor.png +0 -0
- data/app/assets/javascripts/ckeditor/plugins/adv_link/images/hidpi/anchor.png +0 -0
- data/app/assets/javascripts/ckeditor/plugins/adv_link/lang/de.js +68 -0
- data/app/assets/javascripts/ckeditor/plugins/adv_link/lang/en.js +68 -0
- data/app/assets/javascripts/ckeditor/plugins/adv_link/plugin.js.coffee +282 -0
- data/app/assets/javascripts/kuhsaft/cms/application.js.coffee.erb +42 -4
- data/app/assets/stylesheets/kuhsaft/application.css.sass +0 -3
- data/app/assets/stylesheets/kuhsaft/cms/application.css.sass +26 -11
- data/app/controllers/kuhsaft/api/pages_controller.rb +14 -0
- data/app/controllers/kuhsaft/cms/admin_controller.rb +1 -1
- data/app/controllers/kuhsaft/cms/assets_controller.rb +7 -7
- data/app/controllers/kuhsaft/cms/bricks_controller.rb +15 -4
- data/app/controllers/kuhsaft/cms/pages_controller.rb +8 -15
- data/app/controllers/kuhsaft/pages_controller.rb +16 -6
- data/app/controllers/kuhsaft/sitemaps_controller.rb +13 -0
- data/app/helpers/cms_helper.rb +4 -4
- data/app/helpers/kuhsaft/admin_helper.rb +0 -1
- data/app/helpers/kuhsaft/cms/admin_helper.rb +1 -2
- data/app/helpers/kuhsaft/cms/pages_helper.rb +2 -7
- data/app/helpers/pages_helper.rb +8 -37
- data/app/helpers/sitemaps_helper.rb +12 -0
- data/app/models/kuhsaft/accordion_item_brick.rb +1 -1
- data/app/models/kuhsaft/anchor_brick.rb +1 -1
- data/app/models/kuhsaft/asset.rb +26 -23
- data/app/models/kuhsaft/asset_brick.rb +2 -1
- data/app/models/kuhsaft/brick.rb +38 -16
- data/app/models/kuhsaft/brick_type.rb +2 -2
- data/app/models/kuhsaft/brick_type_filter.rb +0 -2
- data/app/models/kuhsaft/column_brick.rb +0 -1
- data/app/models/kuhsaft/image_brick.rb +2 -2
- data/app/models/kuhsaft/image_size.rb +0 -1
- data/app/models/kuhsaft/link_brick.rb +1 -1
- data/app/models/kuhsaft/page.rb +111 -107
- data/app/models/kuhsaft/page_type.rb +1 -1
- data/app/models/kuhsaft/partition.rb +12 -12
- data/app/models/kuhsaft/placeholder_brick.rb +8 -0
- data/app/models/kuhsaft/publish_state.rb +9 -10
- data/app/models/kuhsaft/slider_brick.rb +0 -2
- data/app/models/kuhsaft/text_brick.rb +1 -1
- data/app/models/kuhsaft/two_column_brick.rb +0 -1
- data/app/models/kuhsaft/video_brick.rb +1 -2
- data/app/uploaders/kuhsaft/asset_brick_asset_uploader.rb +39 -38
- data/app/uploaders/kuhsaft/asset_uploader.rb +43 -43
- data/app/uploaders/kuhsaft/image_brick_image_uploader.rb +7 -34
- data/app/views/kuhsaft/asset_bricks/asset_brick/_edit.html.haml +3 -2
- data/app/views/kuhsaft/cms/admin/_brick_type_dropdown.html.haml +2 -2
- data/app/views/kuhsaft/cms/bricks/_brick_item.html.haml +17 -10
- data/app/views/kuhsaft/cms/bricks/_new.html.haml +34 -0
- data/app/views/kuhsaft/cms/bricks/create.js.haml +6 -0
- data/app/views/kuhsaft/cms/bricks/destroy.js.haml +4 -0
- data/app/views/kuhsaft/cms/bricks/new.js.haml +11 -0
- data/app/views/kuhsaft/cms/pages/_branch.html.haml +2 -2
- data/app/views/kuhsaft/cms/pages/_form.html.haml +29 -18
- data/app/views/kuhsaft/image_bricks/_image_brick.html.haml +9 -7
- data/app/views/kuhsaft/image_bricks/image_brick/_edit.html.haml +3 -0
- data/app/views/kuhsaft/pages/show.html.haml +1 -9
- data/app/views/kuhsaft/placeholder_bricks/_placeholder_brick.html.haml +1 -1
- data/app/views/kuhsaft/sitemaps/index.xml.haml +9 -0
- data/app/views/kuhsaft/video_bricks/_video_brick.html.haml +4 -4
- data/app/views/layouts/kuhsaft/cms/application.html.haml +4 -3
- data/config/initializers/simple_form.rb +4 -4
- data/config/initializers/simple_form_bootstrap.rb +14 -14
- data/config/locales/de.yml +203 -0
- data/config/locales/en.yml +282 -0
- data/config/locales/kuhsaft.de.yml +14 -0
- data/config/locales/kuhsaft.en.yml +60 -0
- data/config/locales/models/kuhsaft/image_brick/de.yml +1 -0
- data/config/locales/models/kuhsaft/image_brick/en.yml +16 -0
- data/config/locales/models/kuhsaft/text_brick/de.yml +3 -0
- data/config/locales/models/kuhsaft/text_brick/en.yml +16 -0
- data/config/locales/models/kuhsaft/video_brick/en.yml +15 -0
- data/config/locales/views/kuhsaft/cms/pages/de.yml +3 -0
- data/config/locales/views/kuhsaft/cms/video_bricks/de.yml +1 -1
- data/config/routes.rb +18 -9
- data/db/migrate/10_add_redirect_url_to_kuhsaft_pages.rb +1 -1
- data/db/migrate/11_update_url_and_redirect_url_value.rb +4 -4
- data/db/migrate/13_add_page_title_to_pages.rb +1 -1
- data/db/migrate/15_add_alt_text_to_bricks.rb +5 -0
- data/db/migrate/16_update_default_value_for_page_type.rb +9 -0
- data/db/migrate/17_set_page_type_to_content_for_empty_fields.rb +7 -0
- data/lib/generators/kuhsaft/assets/install_generator.rb +1 -2
- data/lib/generators/kuhsaft/translations/add_generator.rb +19 -4
- data/lib/kuhsaft.rb +1 -0
- data/lib/kuhsaft/brick_list.rb +6 -8
- data/lib/kuhsaft/engine.rb +5 -1
- data/lib/kuhsaft/orderable.rb +22 -19
- data/lib/kuhsaft/partial_extractor.rb +1 -1
- data/lib/kuhsaft/searchable.rb +8 -11
- data/lib/kuhsaft/translatable.rb +35 -19
- data/lib/kuhsaft/version.rb +1 -1
- data/lib/tasks/kuhsaft_tasks.rake +12 -0
- data/lib/templates/kuhsaft/assets/ck-config.js.coffee +7 -0
- data/lib/templates/kuhsaft/translations/add_translation.html.erb +4 -10
- data/spec/controllers/kuhsaft/api/pages_controller_spec.rb +70 -0
- data/spec/controllers/kuhsaft/pages_controller_spec.rb +18 -14
- data/spec/controllers/kuhsaft/sitemaps_controller_spec.rb +13 -0
- data/spec/dummy/app/assets/javascripts/kuhsaft/cms/ck-config.js.coffee +7 -0
- data/spec/dummy/config/application.rb +2 -1
- data/spec/dummy/config/database.yml +1 -1
- data/spec/factories.rb +3 -3
- data/spec/features/cms_pages_spec.rb +13 -13
- data/spec/features/search_spec.rb +16 -18
- data/spec/helpers/kuhsaft/cms/pages_helper_spec.rb +2 -1
- data/spec/kuhsaft_spec.rb +1 -1
- data/spec/lib/brick_list_spec.rb +1 -1
- data/spec/lib/page_tree_spec.rb +10 -6
- data/spec/lib/searchable_spec.rb +4 -4
- data/spec/lib/translatable_spec.rb +114 -44
- data/spec/models/anchor_brick_spec.rb +1 -1
- data/spec/models/asset_spec.rb +1 -1
- data/spec/models/brick_spec.rb +1 -1
- data/spec/models/page_spec.rb +48 -37
- data/spec/models/publish_state_spec.rb +9 -9
- data/spec/spec_helper.rb +43 -21
- data/spec/support/kuhsaft_spec_helper.rb +2 -2
- data/spec/support/write_expectation.rb +57 -0
- data/spec/views/kuhsaft/sitemaps/index.xml.haml_spec.rb +67 -0
- metadata +119 -4
|
@@ -33,7 +33,8 @@ describe Kuhsaft::Cms::PagesHelper do
|
|
|
33
33
|
end
|
|
34
34
|
|
|
35
35
|
it 'has a redirect page' do
|
|
36
|
-
@page = create(:page, title: 'Page 1', slug: 'page1',
|
|
36
|
+
@page = create(:page, title: 'Page 1', slug: 'page1',
|
|
37
|
+
page_type: Kuhsaft::PageType::REDIRECT, redirect_url: 'en/references')
|
|
37
38
|
expect(helper.hide_content_tab?(@page)).to be_true
|
|
38
39
|
end
|
|
39
40
|
|
data/spec/kuhsaft_spec.rb
CHANGED
data/spec/lib/brick_list_spec.rb
CHANGED
|
@@ -13,7 +13,7 @@ describe Kuhsaft::BrickList do
|
|
|
13
13
|
describe '#collect_fulltext' do
|
|
14
14
|
context 'with bricks' do
|
|
15
15
|
it 'collects its childs fulltext' do
|
|
16
|
-
brick.stub_chain(:bricks, :localized).and_return([mock_model(Kuhsaft::Brick, :
|
|
16
|
+
brick.stub_chain(:bricks, :localized).and_return([mock_model(Kuhsaft::Brick, collect_fulltext: 'hallo')])
|
|
17
17
|
brick.collect_fulltext.should == 'hallo'
|
|
18
18
|
end
|
|
19
19
|
end
|
data/spec/lib/page_tree_spec.rb
CHANGED
|
@@ -6,8 +6,12 @@ require_relative '../../app/models/kuhsaft/page'
|
|
|
6
6
|
|
|
7
7
|
module Kuhsaft
|
|
8
8
|
describe PageTree do
|
|
9
|
-
let(:page_tree)
|
|
10
|
-
|
|
9
|
+
let(:page_tree) do
|
|
10
|
+
{
|
|
11
|
+
'0' => { 'id' => '1', 'children' => { '0' => { 'id' => '2' } } },
|
|
12
|
+
'1' => { 'id' => '3' }
|
|
13
|
+
}
|
|
14
|
+
end
|
|
11
15
|
|
|
12
16
|
before :each do
|
|
13
17
|
@page1 = FactoryGirl.create(:page, id: 1, position: 10)
|
|
@@ -18,15 +22,15 @@ module Kuhsaft
|
|
|
18
22
|
describe 'update' do
|
|
19
23
|
it 'sets the correct position of the root nodes' do
|
|
20
24
|
PageTree.update(page_tree)
|
|
21
|
-
@page1.reload.position.
|
|
22
|
-
@page2.reload.position.
|
|
23
|
-
@page3.reload.position.
|
|
25
|
+
expect(@page1.reload.position).to eq(0)
|
|
26
|
+
expect(@page2.reload.position).to eq(0)
|
|
27
|
+
expect(@page3.reload.position).to eq(1)
|
|
24
28
|
end
|
|
25
29
|
|
|
26
30
|
it 'sets the correct parent attribute for the nodes' do
|
|
27
31
|
PageTree.update(page_tree)
|
|
28
32
|
@page1.reload.parent_id.should be_nil
|
|
29
|
-
@page2.reload.parent_id.
|
|
33
|
+
expect(@page2.reload.parent_id).to eq(1)
|
|
30
34
|
@page3.reload.parent_id.should be nil
|
|
31
35
|
end
|
|
32
36
|
end
|
data/spec/lib/searchable_spec.rb
CHANGED
|
@@ -4,11 +4,11 @@ describe Kuhsaft::Searchable do
|
|
|
4
4
|
|
|
5
5
|
context 'with missing includes' do
|
|
6
6
|
it 'raises exteption when class does not include Kuhsaft::Bricklist' do
|
|
7
|
-
expect
|
|
7
|
+
expect do
|
|
8
8
|
class Foo
|
|
9
9
|
include Kuhsaft::Searchable
|
|
10
10
|
end
|
|
11
|
-
|
|
11
|
+
end.to raise_error(/needs Kuhsaft::BrickList to be included/)
|
|
12
12
|
end
|
|
13
13
|
end
|
|
14
14
|
|
|
@@ -19,12 +19,12 @@ describe Kuhsaft::Searchable do
|
|
|
19
19
|
|
|
20
20
|
context 'without postgresql' do
|
|
21
21
|
it 'initializes scope' do
|
|
22
|
-
ActiveRecord::Base.connection.instance_values.
|
|
22
|
+
expect(ActiveRecord::Base.connection.instance_values).not_to eq('postgresql')
|
|
23
23
|
SearchableDemo.should_receive :scope
|
|
24
24
|
SearchableDemo.class_eval do
|
|
25
25
|
include Kuhsaft::Searchable
|
|
26
26
|
end
|
|
27
27
|
end
|
|
28
28
|
end
|
|
29
|
-
end
|
|
29
|
+
end
|
|
30
30
|
end
|
|
@@ -11,74 +11,144 @@ describe Kuhsaft::Translatable do
|
|
|
11
11
|
Demo.new
|
|
12
12
|
end
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
describe 'normal locale' do
|
|
15
|
+
before do
|
|
16
|
+
I18n.locale = :en
|
|
17
|
+
end
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
19
|
+
describe '.translate' do
|
|
20
|
+
it 'defines a getter for each attribute' do
|
|
21
|
+
expect(model).to respond_to(:name)
|
|
22
|
+
end
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
it 'defines a setter for each attributes' do
|
|
25
|
+
expect(model).to respond_to(:name=)
|
|
26
|
+
end
|
|
27
27
|
end
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
describe '.locale_attr' do
|
|
30
|
+
it 'returns a suffixed attribute name' do
|
|
31
|
+
expect(Demo.locale_attr('text')).to eq('text_en')
|
|
32
|
+
end
|
|
31
33
|
end
|
|
32
|
-
end
|
|
33
34
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
describe '#locale_attr' do
|
|
36
|
+
it 'returns a suffixed attribute name' do
|
|
37
|
+
expect(model.locale_attr('text')).to eq('text_en')
|
|
38
|
+
end
|
|
37
39
|
end
|
|
38
|
-
end
|
|
39
40
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
41
|
+
describe 'translated attributes' do
|
|
42
|
+
it 'delegates the getter to the suffixed attribute' do
|
|
43
|
+
model.should_receive(:name_en).and_return('John')
|
|
44
|
+
model.name.should == 'John'
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it 'delegates the setter to the suffixed attribute' do
|
|
48
|
+
model.should_receive(:name_en=).with('Johnny')
|
|
49
|
+
model.name = 'Johnny'
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
context 'dynamic methods' do
|
|
53
|
+
it 'delegates boolean accessors' do
|
|
54
|
+
model.should_receive(:name_en?)
|
|
55
|
+
model.name?
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it 'delegates simple dynamic finders' do
|
|
59
|
+
Demo.should_receive(:find_by_name_en).with('Max')
|
|
60
|
+
Demo.find_by_name('Max')
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
context 'when changing the locale' do
|
|
65
|
+
before do
|
|
66
|
+
I18n.locale = :de
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it 'delegates the getter to current locale' do
|
|
70
|
+
model.should_receive(:name_de).and_return('Johannes')
|
|
71
|
+
model.name.should == 'Johannes'
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
it 'delegates the getter to current locale' do
|
|
75
|
+
model.should_receive(:name_de=).with('Johannes')
|
|
76
|
+
model.name = 'Johannes'
|
|
77
|
+
end
|
|
78
|
+
end
|
|
43
79
|
end
|
|
44
80
|
end
|
|
45
81
|
|
|
46
|
-
describe '
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
82
|
+
describe 'country specific locale' do
|
|
83
|
+
before do
|
|
84
|
+
I18n.available_locales = [:de, 'de-CH']
|
|
85
|
+
I18n.locale = 'de-CH'
|
|
50
86
|
end
|
|
51
87
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
88
|
+
after do
|
|
89
|
+
I18n.available_locales = [:en]
|
|
90
|
+
I18n.locale = :en
|
|
55
91
|
end
|
|
56
92
|
|
|
57
|
-
|
|
58
|
-
it '
|
|
59
|
-
model.
|
|
60
|
-
model.name?
|
|
93
|
+
describe '.translate' do
|
|
94
|
+
it 'defines a getter for each attribute' do
|
|
95
|
+
expect(model).to respond_to(:name)
|
|
61
96
|
end
|
|
62
97
|
|
|
63
|
-
it '
|
|
64
|
-
|
|
65
|
-
Demo.find_by_name('Max')
|
|
98
|
+
it 'defines a setter for each attributes' do
|
|
99
|
+
expect(model).to respond_to(:name=)
|
|
66
100
|
end
|
|
67
101
|
end
|
|
68
102
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
103
|
+
describe '.locale_attr' do
|
|
104
|
+
it 'returns a suffixed attribute name' do
|
|
105
|
+
expect(Demo.locale_attr('text')).to eq('text_de_ch')
|
|
72
106
|
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
describe '#locale_attr' do
|
|
110
|
+
it 'returns a suffixed attribute name' do
|
|
111
|
+
expect(Demo.locale_attr('text')).to eq('text_de_ch')
|
|
112
|
+
end
|
|
113
|
+
end
|
|
73
114
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
model.
|
|
115
|
+
describe 'translated attributes' do
|
|
116
|
+
it 'delegates the getter to the suffixed attribute' do
|
|
117
|
+
model.should_receive(:name_de_ch).and_return('John')
|
|
118
|
+
model.name.should == 'John'
|
|
77
119
|
end
|
|
78
120
|
|
|
79
|
-
it 'delegates the
|
|
80
|
-
model.should_receive(:
|
|
81
|
-
model.name = '
|
|
121
|
+
it 'delegates the setter to the suffixed attribute' do
|
|
122
|
+
model.should_receive(:name_de_ch=).with('Johnny')
|
|
123
|
+
model.name = 'Johnny'
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
context 'dynamic methods' do
|
|
127
|
+
it 'delegates boolean accessors' do
|
|
128
|
+
model.should_receive(:name_de_ch?)
|
|
129
|
+
model.name?
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
it 'delegates simple dynamic finders' do
|
|
133
|
+
Demo.should_receive(:find_by_name_de_ch).with('Max')
|
|
134
|
+
Demo.find_by_name('Max')
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
context 'when changing the locale' do
|
|
139
|
+
before do
|
|
140
|
+
I18n.locale = :de
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
it 'delegates the getter to current locale' do
|
|
144
|
+
model.should_receive(:name_de).and_return('Johannes')
|
|
145
|
+
model.name.should == 'Johannes'
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
it 'delegates the getter to current locale' do
|
|
149
|
+
model.should_receive(:name_de=).with('Johannes')
|
|
150
|
+
model.name = 'Johannes'
|
|
151
|
+
end
|
|
82
152
|
end
|
|
83
153
|
end
|
|
84
154
|
end
|
data/spec/models/asset_spec.rb
CHANGED
|
@@ -24,7 +24,7 @@ describe Kuhsaft::Asset do
|
|
|
24
24
|
uploader.should respond_to(:thumb)
|
|
25
25
|
end
|
|
26
26
|
|
|
27
|
-
it
|
|
27
|
+
it 'makes the image readable only to the owner and not executable' do
|
|
28
28
|
pending 'how and where do we ensure permissions?'
|
|
29
29
|
uploader.should have_permissions(0600)
|
|
30
30
|
end
|
data/spec/models/brick_spec.rb
CHANGED
|
@@ -98,7 +98,7 @@ describe Kuhsaft::Brick do
|
|
|
98
98
|
|
|
99
99
|
context 'with the parenthesis option given' do
|
|
100
100
|
brick = Kuhsaft::TextBrick.new
|
|
101
|
-
brick.backend_label(:
|
|
101
|
+
brick.backend_label(parenthesis: true).should == '(Text)'
|
|
102
102
|
end
|
|
103
103
|
end
|
|
104
104
|
|
data/spec/models/page_spec.rb
CHANGED
|
@@ -5,9 +5,7 @@ describe Kuhsaft::Page do
|
|
|
5
5
|
|
|
6
6
|
describe '.search' do
|
|
7
7
|
before do
|
|
8
|
-
create :page
|
|
9
|
-
create :page
|
|
10
|
-
create :page
|
|
8
|
+
3.times { create :page }
|
|
11
9
|
end
|
|
12
10
|
|
|
13
11
|
it 'should find any containing the search term' do
|
|
@@ -70,33 +68,32 @@ describe Kuhsaft::Page do
|
|
|
70
68
|
|
|
71
69
|
describe '#published' do
|
|
72
70
|
it 'returns only published pages' do
|
|
73
|
-
|
|
71
|
+
_p1, p2, _p3 = 3.times.map { create(:page) }
|
|
74
72
|
p2.update_attribute :published, Kuhsaft::PublishState::UNPUBLISHED
|
|
75
73
|
Kuhsaft::Page.published.should be_all { |p| p.published?.should be_true }
|
|
76
74
|
end
|
|
77
75
|
end
|
|
78
76
|
|
|
79
77
|
describe '#content_page' do
|
|
80
|
-
it 'returns only content pages
|
|
78
|
+
it 'returns only content pages' do
|
|
81
79
|
p1, p2, p3 = 3.times.map { create(:page) }
|
|
82
80
|
p2.update_attribute :page_type, Kuhsaft::PageType::REDIRECT
|
|
83
|
-
p3.update_attribute :page_type, nil
|
|
84
81
|
Kuhsaft::Page.content_page.should == [p1, p3]
|
|
85
82
|
end
|
|
86
83
|
end
|
|
87
84
|
|
|
88
|
-
describe
|
|
85
|
+
describe '#state_class' do
|
|
89
86
|
|
|
90
87
|
let(:page) { Kuhsaft::Page.new }
|
|
91
88
|
|
|
92
89
|
it 'returns publsihed as string when page is published' do
|
|
93
|
-
page.published
|
|
94
|
-
page.state_class
|
|
90
|
+
page.published = Kuhsaft::PublishState::PUBLISHED
|
|
91
|
+
expect(page.state_class).to eq 'published'
|
|
95
92
|
end
|
|
96
93
|
|
|
97
94
|
it 'returns unpublsihed as string when page is unpublished' do
|
|
98
|
-
page.published
|
|
99
|
-
page.state_class
|
|
95
|
+
page.published = Kuhsaft::PublishState::UNPUBLISHED
|
|
96
|
+
expect(page.state_class).to eq 'unpublished'
|
|
100
97
|
end
|
|
101
98
|
end
|
|
102
99
|
|
|
@@ -114,11 +111,11 @@ describe Kuhsaft::Page do
|
|
|
114
111
|
end
|
|
115
112
|
|
|
116
113
|
let :child_page do
|
|
117
|
-
create(:page, :
|
|
114
|
+
create(:page, parent: page)
|
|
118
115
|
end
|
|
119
116
|
|
|
120
117
|
let :child_child_page do
|
|
121
|
-
create(:page, :
|
|
118
|
+
create(:page, parent: child_page)
|
|
122
119
|
end
|
|
123
120
|
|
|
124
121
|
context 'on the topmost level' do
|
|
@@ -146,7 +143,7 @@ describe Kuhsaft::Page do
|
|
|
146
143
|
end
|
|
147
144
|
|
|
148
145
|
let :child_page do
|
|
149
|
-
create(:page, :
|
|
146
|
+
create(:page, parent: page)
|
|
150
147
|
end
|
|
151
148
|
|
|
152
149
|
it 'has a list of parent pages' do
|
|
@@ -162,7 +159,7 @@ describe Kuhsaft::Page do
|
|
|
162
159
|
context 'when it has no content' do
|
|
163
160
|
it 'should return the link of it\'s first child' do
|
|
164
161
|
page = create(:page)
|
|
165
|
-
child = create(:page, :
|
|
162
|
+
child = create(:page, parent: page)
|
|
166
163
|
page.body = nil
|
|
167
164
|
page.save
|
|
168
165
|
page.link.should == child.link
|
|
@@ -190,7 +187,7 @@ describe Kuhsaft::Page do
|
|
|
190
187
|
|
|
191
188
|
describe '#preceding_sibling' do
|
|
192
189
|
it 'finds the predecing sibling' do
|
|
193
|
-
|
|
190
|
+
_page1 = create :page
|
|
194
191
|
page2 = create :page
|
|
195
192
|
page3 = create :page
|
|
196
193
|
page3.preceding_sibling.id.should == page2.id
|
|
@@ -199,7 +196,7 @@ describe Kuhsaft::Page do
|
|
|
199
196
|
|
|
200
197
|
describe '#succeeding_sibling' do
|
|
201
198
|
it 'finds the succeeding sibling' do
|
|
202
|
-
|
|
199
|
+
_page1 = create :page
|
|
203
200
|
page2 = create :page
|
|
204
201
|
page3 = create :page
|
|
205
202
|
page2.succeeding_sibling.id.should == page3.id
|
|
@@ -209,14 +206,14 @@ describe Kuhsaft::Page do
|
|
|
209
206
|
describe '#reposition' do
|
|
210
207
|
it 'repositions before a page, specified by id' do
|
|
211
208
|
page1 = create :page
|
|
212
|
-
|
|
209
|
+
_page2 = create :page
|
|
213
210
|
page3 = create :page
|
|
214
211
|
page3.reposition page1.id
|
|
215
212
|
page3.preceding_sibling.id.should == page1.id
|
|
216
213
|
end
|
|
217
214
|
|
|
218
215
|
it 'repositions before all siblings, specified by nil' do
|
|
219
|
-
|
|
216
|
+
_page1 = create :page
|
|
220
217
|
page2 = create :page
|
|
221
218
|
page2.reposition nil
|
|
222
219
|
page2.position.should == 1
|
|
@@ -252,30 +249,30 @@ describe Kuhsaft::Page do
|
|
|
252
249
|
describe '#url' do
|
|
253
250
|
context 'when it is a normal page' do
|
|
254
251
|
it 'returns the concatenated slug of the whole child/parent tree' do
|
|
255
|
-
page = create(:page, :
|
|
256
|
-
child = create(:page, :
|
|
252
|
+
page = create(:page, slug: 'parent-slug')
|
|
253
|
+
child = create(:page, slug: 'child-slug', parent: page)
|
|
257
254
|
child.url.should == 'en/parent-slug/child-slug'
|
|
258
255
|
end
|
|
259
256
|
end
|
|
260
257
|
|
|
261
258
|
context 'when it is a navigation? page' do
|
|
262
259
|
it 'returns without the parent page slug' do
|
|
263
|
-
page = create(:page, :
|
|
264
|
-
child = create(:page, :
|
|
260
|
+
page = create(:page, slug: 'parent-slug', page_type: Kuhsaft::PageType::NAVIGATION)
|
|
261
|
+
child = create(:page, slug: 'child-slug', parent: page)
|
|
265
262
|
child.url.should == 'en/child-slug'
|
|
266
263
|
end
|
|
267
264
|
end
|
|
268
265
|
|
|
269
266
|
context 'when it is a redirect? page' do
|
|
270
267
|
it 'returns the absolute url' do
|
|
271
|
-
page = create(:page, :
|
|
268
|
+
page = create(:page, page_type: Kuhsaft::PageType::REDIRECT, redirect_url: 'en/references', slug: 'news')
|
|
272
269
|
page.link.should eq('/en/news')
|
|
273
270
|
end
|
|
274
271
|
end
|
|
275
272
|
|
|
276
273
|
context 'when url part is empty' do
|
|
277
274
|
it 'strips the trailing slash' do
|
|
278
|
-
page = create(:page, :
|
|
275
|
+
page = create(:page, page_type: Kuhsaft::PageType::NAVIGATION)
|
|
279
276
|
page.link.should eq('/en')
|
|
280
277
|
end
|
|
281
278
|
end
|
|
@@ -284,13 +281,13 @@ describe Kuhsaft::Page do
|
|
|
284
281
|
describe '#navigation?' do
|
|
285
282
|
context 'when the page_type is navigation' do
|
|
286
283
|
it 'returns true if the page_type is PageType::NAVIGATION' do
|
|
287
|
-
Kuhsaft::Page.new(:
|
|
284
|
+
Kuhsaft::Page.new(page_type: Kuhsaft::PageType::NAVIGATION).navigation?.should be_true
|
|
288
285
|
end
|
|
289
286
|
end
|
|
290
287
|
|
|
291
288
|
context 'when the page_type is anything else' do
|
|
292
289
|
it 'returns false' do
|
|
293
|
-
Kuhsaft::Page.new(:
|
|
290
|
+
Kuhsaft::Page.new(page_type: Kuhsaft::PageType::REDIRECT).navigation?.should be_false
|
|
294
291
|
end
|
|
295
292
|
end
|
|
296
293
|
end
|
|
@@ -298,17 +295,31 @@ describe Kuhsaft::Page do
|
|
|
298
295
|
describe '#redirect?' do
|
|
299
296
|
context 'when the page_type is a redirect' do
|
|
300
297
|
it 'returns true' do
|
|
301
|
-
Kuhsaft::Page.new(:
|
|
298
|
+
Kuhsaft::Page.new(page_type: Kuhsaft::PageType::REDIRECT).redirect?.should be_true
|
|
302
299
|
end
|
|
303
300
|
end
|
|
304
301
|
|
|
305
302
|
context 'when the page type is anything else' do
|
|
306
303
|
it 'returns false' do
|
|
307
|
-
Kuhsaft::Page.new(:
|
|
304
|
+
Kuhsaft::Page.new(page_type: Kuhsaft::PageType::NAVIGATION).redirect?.should be_false
|
|
308
305
|
end
|
|
309
306
|
end
|
|
310
307
|
end
|
|
311
308
|
|
|
309
|
+
describe 'page types' do
|
|
310
|
+
it 'returns content by default' do
|
|
311
|
+
expect(Kuhsaft::Page.new.page_type).to eq('content')
|
|
312
|
+
end
|
|
313
|
+
|
|
314
|
+
it 'returns navigation if set' do
|
|
315
|
+
expect(Kuhsaft::Page.new(page_type: Kuhsaft::PageType::NAVIGATION).page_type).to eq('navigation')
|
|
316
|
+
end
|
|
317
|
+
|
|
318
|
+
it 'returns redirect if set' do
|
|
319
|
+
expect(Kuhsaft::Page.new(page_type: Kuhsaft::PageType::REDIRECT).page_type).to eq('redirect')
|
|
320
|
+
end
|
|
321
|
+
end
|
|
322
|
+
|
|
312
323
|
describe '#translated?' do
|
|
313
324
|
it 'returns true when page is translated' do
|
|
314
325
|
@page = create(:page, title: 'Page 1', slug: 'page1')
|
|
@@ -325,8 +336,8 @@ describe Kuhsaft::Page do
|
|
|
325
336
|
|
|
326
337
|
describe '#fulltext' do
|
|
327
338
|
let :page do
|
|
328
|
-
p = create(:page, :
|
|
329
|
-
p.bricks << Kuhsaft::TextBrick.new(:
|
|
339
|
+
p = create(:page, keywords: 'key words', description: 'descrip tion', title: 'my title')
|
|
340
|
+
p.bricks << Kuhsaft::TextBrick.new(locale: I18n.locale, text: 'oh la la')
|
|
330
341
|
p.save
|
|
331
342
|
p
|
|
332
343
|
end
|
|
@@ -349,7 +360,7 @@ describe Kuhsaft::Page do
|
|
|
349
360
|
|
|
350
361
|
describe '#before_validation' do
|
|
351
362
|
it 'generates url automatically' do
|
|
352
|
-
page = Kuhsaft::Page.new :
|
|
363
|
+
page = Kuhsaft::Page.new slug: 'slug'
|
|
353
364
|
page.url.should be_nil
|
|
354
365
|
page.valid?
|
|
355
366
|
page.url.should be_present
|
|
@@ -358,7 +369,7 @@ describe Kuhsaft::Page do
|
|
|
358
369
|
|
|
359
370
|
describe '#url_without_locale' do
|
|
360
371
|
let :page do
|
|
361
|
-
create(:page, :
|
|
372
|
+
create(:page, slug: 'page')
|
|
362
373
|
end
|
|
363
374
|
|
|
364
375
|
context 'without parent' do
|
|
@@ -373,11 +384,11 @@ describe Kuhsaft::Page do
|
|
|
373
384
|
|
|
374
385
|
context 'when parent is navigation' do
|
|
375
386
|
let :parent do
|
|
376
|
-
create(:page, :
|
|
387
|
+
create(:page, page_type: Kuhsaft::PageType::NAVIGATION)
|
|
377
388
|
end
|
|
378
389
|
|
|
379
390
|
let :child do
|
|
380
|
-
create(:page, :
|
|
391
|
+
create(:page, slug: 'child', parent: parent)
|
|
381
392
|
end
|
|
382
393
|
|
|
383
394
|
it 'returns url without leading /' do
|
|
@@ -391,11 +402,11 @@ describe Kuhsaft::Page do
|
|
|
391
402
|
|
|
392
403
|
context 'when parent is normal page' do
|
|
393
404
|
let :parent do
|
|
394
|
-
create(:page, :
|
|
405
|
+
create(:page, slug: 'parent')
|
|
395
406
|
end
|
|
396
407
|
|
|
397
408
|
let :child do
|
|
398
|
-
create(:page, :
|
|
409
|
+
create(:page, slug: 'child', parent: parent)
|
|
399
410
|
end
|
|
400
411
|
|
|
401
412
|
it 'returns url without leading /' do
|