solidus_static_content 1.0.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.circleci/config.yml +35 -0
- data/.gem_release.yml +5 -0
- data/.gitignore +17 -6
- data/.rspec +2 -3
- data/.rubocop.yml +2 -0
- data/CHANGELOG.md +80 -0
- data/Gemfile +26 -6
- data/{LICENSE.md → LICENSE} +0 -0
- data/README.md +81 -68
- data/Rakefile +4 -13
- data/app/assets/stylesheets/spree/frontend/solidus_static_content.css +7 -0
- data/app/assets/stylesheets/spree/frontend/spree_static_content.css +2 -7
- data/app/models/solidus_static_content/permission_sets/page_display.rb +11 -0
- data/app/models/solidus_static_content/permission_sets/page_management.rb +11 -0
- data/app/models/spree/page.rb +16 -21
- data/bin/console +17 -0
- data/bin/r +8 -0
- data/bin/rails +6 -6
- data/bin/rails-engine +13 -0
- data/bin/rails-sandbox +16 -0
- data/bin/rake +7 -0
- data/bin/sandbox +84 -0
- data/bin/sandbox_rails +8 -0
- data/bin/setup +8 -0
- data/config/locales/de.yml +7 -5
- data/config/locales/en.yml +9 -7
- data/config/locales/es-MX.yml +38 -0
- data/config/locales/es.yml +6 -5
- data/config/locales/et.yml +6 -5
- data/config/locales/fr.yml +7 -5
- data/config/locales/it.yml +6 -5
- data/config/locales/nl.yml +7 -5
- data/config/locales/pl.yml +6 -5
- data/config/locales/pt-BR.yml +6 -5
- data/config/locales/pt.yml +7 -5
- data/config/locales/ro.yml +11 -9
- data/config/locales/ru.yml +7 -5
- data/config/locales/sv.yml +7 -5
- data/config/routes.rb +9 -2
- data/db/migrate/20081216193152_create_pages.rb +1 -1
- data/db/migrate/20090625125735_extend_pages.rb +1 -1
- data/db/migrate/20090814113100_add_visible_to_pages.rb +1 -1
- data/db/migrate/20090814142845_add_default_true_to_visible_for_page.rb +1 -1
- data/db/migrate/20090829000527_add_index_for_page.rb +1 -1
- data/db/migrate/20091219021134_add_meta_fields_to_pages.rb +1 -1
- data/db/migrate/20100204105222_add_layout_to_pages.rb +1 -1
- data/db/migrate/20100323085528_add_show_in_sidebar_option_to_pages.rb +1 -1
- data/db/migrate/20110717103112_add_meta_title_to_page.rb +1 -1
- data/db/migrate/20120723144115_add_render_as_partial_for_layout_for_spree_pages.rb +1 -1
- data/db/migrate/20140926121757_add_pages_stores.rb +1 -1
- data/db/migrate/20180305193240_update_spree_page_position.rb +13 -0
- data/lib/controllers/backend/spree/admin/pages_controller.rb +16 -0
- data/{app/controllers → lib/controllers/frontend}/spree/static_content_controller.rb +7 -3
- data/lib/generators/solidus_static_content/install/install_generator.rb +7 -5
- data/lib/solidus_static_content.rb +6 -18
- data/lib/solidus_static_content/engine.rb +35 -0
- data/lib/solidus_static_content/factories.rb +18 -0
- data/lib/solidus_static_content/route_matcher.rb +11 -0
- data/lib/solidus_static_content/version.rb +5 -0
- data/lib/views/backend/spree/admin/pages/_form.html.erb +119 -0
- data/lib/views/backend/spree/admin/pages/edit.html.erb +32 -0
- data/lib/views/backend/spree/admin/pages/index.html.erb +68 -0
- data/lib/views/backend/spree/admin/pages/new.html.erb +31 -0
- data/lib/views/backend/spree/admin/shared/_pages_tabs.html.erb +9 -0
- data/{app/views → lib/views/frontend}/spree/static_content/_static_content_footer.html.erb +0 -0
- data/{app/views → lib/views/frontend}/spree/static_content/_static_content_header.html.erb +0 -0
- data/{app/views → lib/views/frontend}/spree/static_content/_static_content_list.html.erb +0 -0
- data/{app/views → lib/views/frontend}/spree/static_content/_static_content_sidebar.html.erb +1 -1
- data/lib/views/frontend/spree/static_content/show.html.erb +18 -0
- data/solidus_static_content.gemspec +36 -31
- data/spec/controllers/spree/admin/pages_controller_spec.rb +11 -0
- data/spec/controllers/{static_content_controller_spec.rb → spree/static_content_controller_spec.rb} +9 -12
- data/spec/features/{admin → spree/admin}/pages_spec.rb +8 -5
- data/spec/features/{static_content_spec.rb → spree/static_content_spec.rb} +6 -4
- data/spec/helpers/{page_helper_spec.rb → spree/page_helper_spec.rb} +0 -0
- data/spec/lib/solidus_static_content/engine_spec.rb +14 -0
- data/spec/lib/{spree_static.content_spec.rb → solidus_static_content/route_matcher_spec.rb} +4 -13
- data/spec/models/{page_spec.rb → spree/page_spec.rb} +22 -7
- data/spec/spec_helper.rb +17 -40
- metadata +85 -177
- data/.travis.yml +0 -21
- data/app/assets/javascripts/spree/backend/spree_static_content.js +0 -1
- data/app/assets/javascripts/spree/frontend/spree_static_content.js +0 -1
- data/app/assets/stylesheets/spree/backend/spree_static_content.css +0 -3
- data/app/controllers/spree/admin/pages_controller.rb +0 -3
- data/app/overrides/pages_in_menu.rb +0 -5
- data/app/views/spree/admin/pages/_form.html.erb +0 -98
- data/app/views/spree/admin/pages/edit.html.erb +0 -18
- data/app/views/spree/admin/pages/index.html.erb +0 -51
- data/app/views/spree/admin/pages/new.html.erb +0 -18
- data/app/views/spree/static_content/show.html.erb +0 -26
- data/lib/spree_static_content/engine.rb +0 -17
- data/spec/factories/page_factory.rb +0 -18
@@ -0,0 +1,32 @@
|
|
1
|
+
<%= render 'spree/admin/shared/pages_tabs' %>
|
2
|
+
|
3
|
+
<% admin_breadcrumb(link_to plural_resource_name(Spree::Page), spree.admin_pages_path) %>
|
4
|
+
<% admin_breadcrumb(@page.title) %>
|
5
|
+
|
6
|
+
<% content_for :page_title do %>
|
7
|
+
<%= t("spree.editing_page") %>
|
8
|
+
<% end %>
|
9
|
+
|
10
|
+
<% content_for :page_actions do %>
|
11
|
+
<li>
|
12
|
+
<%= button_to t("spree.back_to_static_pages_list"), spree.admin_pages_path %>
|
13
|
+
</li>
|
14
|
+
<% end %>
|
15
|
+
|
16
|
+
<div data-hook='admin_page_edit_form_header'>
|
17
|
+
<%= render "spree/shared/error_messages", :target => @page %>
|
18
|
+
</div>
|
19
|
+
|
20
|
+
<%= form_for [:admin, @page], as: :page, url: admin_page_path(@page) do |f| %>
|
21
|
+
<fieldset class="no-border-top">
|
22
|
+
<%= render :partial => 'form', :locals => { :f => f } %>
|
23
|
+
|
24
|
+
<div class='clear'></div>
|
25
|
+
|
26
|
+
<div data-hook='admin_page_edit_form_buttons'>
|
27
|
+
<% if can?(:update, @page) %>
|
28
|
+
<%= render partial: 'spree/admin/shared/edit_resource_links' %>
|
29
|
+
<% end %>
|
30
|
+
</div>
|
31
|
+
</fieldset>
|
32
|
+
<% end %>
|
@@ -0,0 +1,68 @@
|
|
1
|
+
<%= render 'spree/admin/shared/pages_tabs' %>
|
2
|
+
|
3
|
+
<% content_for :page_actions do %>
|
4
|
+
<% if can?(:create, Spree::Page) %>
|
5
|
+
<li>
|
6
|
+
<%= link_to t("spree.new_page"), new_object_url, icon: 'plus' %>
|
7
|
+
</li>
|
8
|
+
<% end %>
|
9
|
+
<% end %>
|
10
|
+
|
11
|
+
<% content_for :page_title do %>
|
12
|
+
<%= t("spree.static_pages") %>
|
13
|
+
<% end %>
|
14
|
+
|
15
|
+
<% if @pages.any? %>
|
16
|
+
<table class="index responsive sortable" id="listing_pages" data-hook data-sortable-link="<%= update_positions_admin_pages_url %>">
|
17
|
+
<colgroup>
|
18
|
+
<col style="width: 10%">
|
19
|
+
<col style="width: 40%">
|
20
|
+
<col style="width: 35%">
|
21
|
+
<col style="width: 10%">
|
22
|
+
<col style="width: 15%">
|
23
|
+
</colgroup>
|
24
|
+
|
25
|
+
<thead>
|
26
|
+
<tr data-hook="admin_pages_index_headers">
|
27
|
+
<th></th>
|
28
|
+
<th><%= Spree::Page.human_attribute_name(:title) %></th>
|
29
|
+
<th><%= t("spree.link") %></th>
|
30
|
+
<th><%= Spree::Page.human_attribute_name(:visible) %></th>
|
31
|
+
<th data-hook="admin_pages_index_header_actions" class="actions"></th>
|
32
|
+
</tr>
|
33
|
+
</thead>
|
34
|
+
|
35
|
+
<tbody class="ui-sortable">
|
36
|
+
<% @pages.each do |page| %>
|
37
|
+
<tr data-hook="admin_pages_index_rows" class="<%= cycle('odd', 'even') %>" id="<%= dom_id page %>">
|
38
|
+
<td>
|
39
|
+
<% if can?(:update_positions, Spree::StockLocation) %>
|
40
|
+
<span class='handle ui-sortable-handle'></span>
|
41
|
+
<% end %>
|
42
|
+
</td>
|
43
|
+
<td><%= page.title %></td>
|
44
|
+
<td><%= link_to page.link, page.link, :target => '_blank' %></td>
|
45
|
+
<td>
|
46
|
+
<span class='pill pill-<%= page.visible ? 'active' : 'inactive' %>'>
|
47
|
+
<%= t("spree.#{page.visible? ? :active : :inactive}") %>
|
48
|
+
</span>
|
49
|
+
</td>
|
50
|
+
<td data-hook="admin_pages_index_row_actions" class="actions" >
|
51
|
+
<% if can?(:update, page) %>
|
52
|
+
<%= link_to_edit page, no_text: true %>
|
53
|
+
<% end %>
|
54
|
+
<% if can?(:destroy, page) %>
|
55
|
+
<%= link_to_delete page, no_text: true %>
|
56
|
+
<% end %>
|
57
|
+
</td>
|
58
|
+
</tr>
|
59
|
+
<% end %>
|
60
|
+
</tbody>
|
61
|
+
</table>
|
62
|
+
<% else %>
|
63
|
+
<div class="no-objects-found">
|
64
|
+
<%= render 'spree/admin/shared/no_objects_found',
|
65
|
+
resource: Spree::Page,
|
66
|
+
new_resource_url: new_object_url %>
|
67
|
+
</div>
|
68
|
+
<% end %>
|
@@ -0,0 +1,31 @@
|
|
1
|
+
<%= render 'spree/admin/shared/pages_tabs' %>
|
2
|
+
|
3
|
+
<% admin_breadcrumb(link_to plural_resource_name(Spree::Page), spree.admin_pages_path) %>
|
4
|
+
|
5
|
+
<% content_for :page_title do %>
|
6
|
+
<%= t("spree.new_page") %>
|
7
|
+
<% end %>
|
8
|
+
|
9
|
+
<% content_for :page_actions do %>
|
10
|
+
<li>
|
11
|
+
<%= button_to t("spree.back_to_static_pages_list"), spree.admin_pages_path %>
|
12
|
+
</li>
|
13
|
+
<% end %>
|
14
|
+
|
15
|
+
<%= render "spree/shared/error_messages", :target => @page %>
|
16
|
+
|
17
|
+
<div data-hook='admin_page_new_form'>
|
18
|
+
<%= form_for [:admin, @page] do |f| %>
|
19
|
+
<fieldset class='no-border-top'>
|
20
|
+
<%= render partial: 'form', locals: { f: f } %>
|
21
|
+
|
22
|
+
<div class='clear'></div>
|
23
|
+
|
24
|
+
<% if can?(:create, Spree::Page) %>
|
25
|
+
<div data-hook='admin_page_new_form_buttons'>
|
26
|
+
<%= render partial: 'spree/admin/shared/new_resource_links' %>
|
27
|
+
</div>
|
28
|
+
<% end %>
|
29
|
+
</fieldset>
|
30
|
+
<% end %>
|
31
|
+
</div>
|
File without changes
|
File without changes
|
File without changes
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<% if Spree::Page.by_store(current_store).visible.sidebar_links.any? %>
|
2
2
|
<nav id="pages" class="sidebar-item">
|
3
|
-
<h6 class="pages-root"><%=
|
3
|
+
<h6 class="pages-root"><%= t("spree.pages") %></h6>
|
4
4
|
<ul class="pages-list"><%= render :partial => "spree/static_content/static_content_list", :collection => Spree::Page.visible.sidebar_links, :as => :page %></ul>
|
5
5
|
</nav>
|
6
6
|
<% end %>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<% if @page.layout.present? and @page.render_layout_as_partial? %>
|
2
|
+
<%= render :partial => @page.layout %>
|
3
|
+
<% else %>
|
4
|
+
<% content_for :sidebar do %>
|
5
|
+
<div data-hook="homepage_sidebar_navigation">
|
6
|
+
<% if "spree/products" == params[:controller] && @taxon %>
|
7
|
+
<%= render partial: 'spree/shared/filters' %>
|
8
|
+
<% else %>
|
9
|
+
<%= render partial: 'spree/shared/taxonomies' %>
|
10
|
+
<% end %>
|
11
|
+
</div>
|
12
|
+
<% end %>
|
13
|
+
|
14
|
+
<h1><%= @page.title %></h1>
|
15
|
+
<div id="page_content">
|
16
|
+
<%= raw @page.body %>
|
17
|
+
</div>
|
18
|
+
<% end %>
|
@@ -1,32 +1,37 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'lib/solidus_static_content/version'
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = 'solidus_static_content'
|
7
|
+
spec.version = SolidusStaticContent::VERSION
|
8
|
+
spec.authors = ['Peter Berkenbosch', 'Roman Smirnov']
|
9
|
+
spec.email = 'peter@pero-ict.nl'
|
10
|
+
|
11
|
+
spec.summary = 'Extension to manage the static pages for your Solidus store.'
|
12
|
+
spec.description = 'Manage the static pages of your Solidus store or replace existing pages with a static version'
|
13
|
+
spec.homepage = 'https://github.com/solidusio-contrib/solidus_static_content#readme'
|
14
|
+
spec.license = 'BSD-3-Clause'
|
15
|
+
|
16
|
+
spec.metadata['homepage_uri'] = spec.homepage
|
17
|
+
spec.metadata['source_code_uri'] = 'https://github.com/solidusio-contrib/solidus_static_content#readme'
|
18
|
+
spec.metadata['changelog_uri'] = 'https://github.com/solidusio-contrib/solidus_static_content/releases'
|
19
|
+
|
20
|
+
spec.required_ruby_version = Gem::Requirement.new('~> 2.5')
|
21
|
+
|
22
|
+
# Specify which files should be added to the gem when it is released.
|
23
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
24
|
+
files = Dir.chdir(__dir__) { `git ls-files -z`.split("\x0") }
|
25
|
+
|
26
|
+
spec.files = files.grep_v(%r{^(test|spec|features)/})
|
27
|
+
spec.test_files = files.grep(%r{^(test|spec|features)/})
|
28
|
+
spec.bindir = "exe"
|
29
|
+
spec.executables = files.grep(%r{^exe/}) { |f| File.basename(f) }
|
30
|
+
spec.require_paths = ["lib"]
|
31
|
+
|
32
|
+
spec.add_dependency 'deface', '~> 1.0'
|
33
|
+
spec.add_dependency 'solidus_core', ['>= 2.0.0', '< 3']
|
34
|
+
spec.add_dependency 'solidus_support', '~> 0.5'
|
35
|
+
|
36
|
+
spec.add_development_dependency 'solidus_dev_support'
|
32
37
|
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe Spree::Admin::PagesController do
|
4
|
+
describe '.build_resource' do
|
5
|
+
it 'pre-assigns the default store' do
|
6
|
+
default_store = create(:store, default: true)
|
7
|
+
|
8
|
+
expect(subject.send(:build_resource).stores).to eq([default_store])
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
data/spec/controllers/{static_content_controller_spec.rb → spree/static_content_controller_spec.rb}
RENAMED
@@ -1,37 +1,34 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Spree::StaticContentController, type: :controller do
|
4
|
-
before do
|
5
|
-
controller.stub spree_current_user: nil
|
6
|
-
end
|
7
|
-
|
8
4
|
let!(:store) { create(:store, default: true) }
|
9
5
|
|
10
6
|
context '#show' do
|
11
7
|
it 'accepts path as root' do
|
12
8
|
page = create(:page, slug: '/', stores: [store])
|
13
9
|
request.path = page.slug
|
14
|
-
|
15
|
-
expect(response).to
|
10
|
+
get :show, params: { path: page.slug }
|
11
|
+
expect(response).to be_successful
|
16
12
|
end
|
17
13
|
|
18
14
|
it 'accepts path as string' do
|
19
15
|
page = create(:page, slug: 'hello', stores: [store])
|
20
16
|
request.path = page.slug
|
21
|
-
|
22
|
-
expect(response).to
|
17
|
+
get :show, params: { path: page.slug }
|
18
|
+
expect(response).to be_successful
|
23
19
|
end
|
24
20
|
|
25
21
|
it 'accepts path as nested' do
|
26
22
|
page = create(:page, slug: 'aa/bb/cc', stores: [store])
|
27
23
|
request.path = page.slug
|
28
|
-
|
29
|
-
expect(response).to
|
24
|
+
get :show, params: { path: page.slug }
|
25
|
+
expect(response).to be_successful
|
30
26
|
end
|
31
27
|
|
32
28
|
it 'respond with a 404 when no page exists' do
|
33
|
-
|
34
|
-
|
29
|
+
expect {
|
30
|
+
get :show
|
31
|
+
}.to raise_error(ActiveRecord::RecordNotFound)
|
35
32
|
end
|
36
33
|
end
|
37
34
|
end
|
@@ -3,6 +3,10 @@ require 'spec_helper'
|
|
3
3
|
RSpec.feature 'Admin Static Content', js: true do
|
4
4
|
stub_authorization!
|
5
5
|
|
6
|
+
background do
|
7
|
+
create :store, default: true
|
8
|
+
end
|
9
|
+
|
6
10
|
context 'when no page exists' do
|
7
11
|
background do
|
8
12
|
visit spree.admin_path
|
@@ -10,10 +14,11 @@ RSpec.feature 'Admin Static Content', js: true do
|
|
10
14
|
end
|
11
15
|
|
12
16
|
scenario 'can create new page' do
|
13
|
-
expect(page).to have_text /No Pages found
|
17
|
+
expect(page).to have_text /No Pages found/i
|
14
18
|
|
15
19
|
click_link 'New page'
|
16
|
-
|
20
|
+
|
21
|
+
expect(page).to have_text 'New page'
|
17
22
|
|
18
23
|
fill_in 'page_title', with: 'Contact us'
|
19
24
|
fill_in 'page_slug', with: 'contact-us'
|
@@ -56,11 +61,9 @@ RSpec.feature 'Admin Static Content', js: true do
|
|
56
61
|
|
57
62
|
scenario 'can be deleted' do
|
58
63
|
within_row(1) do
|
59
|
-
click_icon :trash
|
64
|
+
accept_confirm { click_icon :trash }
|
60
65
|
end
|
61
66
|
|
62
|
-
page.driver.browser.switch_to.alert.accept unless Capybara.javascript_driver == :poltergeist
|
63
|
-
|
64
67
|
expect(page).not_to have_text static_page.title
|
65
68
|
end
|
66
69
|
end
|
@@ -29,10 +29,12 @@ feature 'Static Content Page', js: true do
|
|
29
29
|
expect(page).to have_text 'Root Page Test'
|
30
30
|
end
|
31
31
|
|
32
|
-
scenario 'is limited within its own constraints' do
|
33
|
-
create(:
|
34
|
-
|
35
|
-
|
32
|
+
scenario 'is limited within its own constraints', js: false do
|
33
|
+
create(:taxon, permalink: 'test', name: 'The Taxon')
|
34
|
+
create(:page, slug: '/t/test', title: 'The Page', stores: [store])
|
35
|
+
visit '/t/test'
|
36
|
+
expect(page).to have_content('The Taxon')
|
37
|
+
expect(page).not_to have_content('The Page')
|
36
38
|
end
|
37
39
|
|
38
40
|
scenario 'fetch correct page' do
|
File without changes
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe SolidusStaticContent::Engine do
|
4
|
+
describe '.activate_menu_item' do
|
5
|
+
it 'adds the menu item only once' do
|
6
|
+
described_class.activate_menu_items
|
7
|
+
|
8
|
+
expect {
|
9
|
+
described_class.activate_menu_items
|
10
|
+
described_class.activate_menu_items
|
11
|
+
}.not_to change(Spree::Backend::Config.menu_items, :size)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -1,33 +1,24 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe
|
4
|
-
context '.remove_spree_mount_point' do
|
5
|
-
specify do
|
6
|
-
path = '/hello'
|
7
|
-
expect(subject.remove_spree_mount_point(path)).to eq 'hello'
|
8
|
-
end
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
describe Spree::StaticPage do
|
3
|
+
describe SolidusStaticContent::RouteMatcher do
|
13
4
|
subject { described_class }
|
14
5
|
|
15
6
|
context '.matches?' do
|
16
7
|
it 'is true when valid page' do
|
17
8
|
page = create(:page, slug: 'hello', visible: true)
|
18
|
-
request =
|
9
|
+
request = instance_double(Rack::Request, path_info: page.slug)
|
19
10
|
expect(subject.matches?(request)).to be true
|
20
11
|
end
|
21
12
|
|
22
13
|
it 'is false when using reserved slug name' do
|
23
14
|
page = create(:page, slug: 'login', visible: true)
|
24
|
-
request =
|
15
|
+
request = instance_double(Rack::Request, path_info: page.slug)
|
25
16
|
expect(subject.matches?(request)).to be false
|
26
17
|
end
|
27
18
|
|
28
19
|
it 'is false when page is not accessible' do
|
29
20
|
page = create(:page, slug: 'hello', visible: false)
|
30
|
-
request =
|
21
|
+
request = instance_double(Rack::Request, path_info: page.slug)
|
31
22
|
expect(subject.matches?(request)).to be false
|
32
23
|
end
|
33
24
|
end
|
@@ -9,11 +9,6 @@ describe Spree::Page do
|
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
12
|
-
it 'always add / prefix to slug' do
|
13
|
-
page = create(:page, slug: 'hello')
|
14
|
-
expect(page.slug).to eq '/hello'
|
15
|
-
end
|
16
|
-
|
17
12
|
context '.link' do
|
18
13
|
it 'return slug if foreign_link blank' do
|
19
14
|
page = create(:page, slug: 'hello')
|
@@ -26,9 +21,7 @@ describe Spree::Page do
|
|
26
21
|
end
|
27
22
|
end
|
28
23
|
|
29
|
-
|
30
24
|
context "pages in stores" do
|
31
|
-
|
32
25
|
before(:each) do
|
33
26
|
@store = create(:store)
|
34
27
|
@page = create(:page, :stores => [@store])
|
@@ -40,7 +33,29 @@ describe Spree::Page do
|
|
40
33
|
expect(pages_by_store).to include(@page)
|
41
34
|
expect(pages_by_store).to_not include(@page2)
|
42
35
|
end
|
36
|
+
end
|
43
37
|
|
38
|
+
describe '#slug' do
|
39
|
+
it 'always adds a "/" (slash) prefix to the slug' do
|
40
|
+
page = create(:page, slug: 'hello')
|
41
|
+
expect(page.slug).to eq '/hello'
|
42
|
+
end
|
43
|
+
|
44
|
+
context 'when a title is present' do
|
45
|
+
it 'is generated from the title' do
|
46
|
+
page = create(:page, slug: nil, title: 'Hello World!')
|
47
|
+
|
48
|
+
expect(page).to be_valid
|
49
|
+
expect(page.slug).to eq('/hello-world')
|
50
|
+
end
|
51
|
+
end
|
44
52
|
end
|
45
53
|
|
54
|
+
describe '.meta_title' do
|
55
|
+
it 'falls back to title' do
|
56
|
+
page = build(:page, title: "Foo Bar", meta_title: nil)
|
57
|
+
|
58
|
+
expect(page.meta_title).to eq("Foo Bar")
|
59
|
+
end
|
60
|
+
end
|
46
61
|
end
|