diff --git a/publify_core/app/views/articles/search.html.erb b/publify_core/app/views/articles/search.html.erb
index bf31e332c0..b60e63e56b 100644
--- a/publify_core/app/views/articles/search.html.erb
+++ b/publify_core/app/views/articles/search.html.erb
@@ -1,7 +1,9 @@
<% for article in @articles %>
<%= link_to_permalink article, article.title %>
- <%= article.html(:body).gsub(%r{?[^>]*>}, '').slice(0..300) %>...
+ <% if article.password.blank? %>
+ <%= article.html(:body).gsub(%r{?[^>]*>}, '').slice(0..300) %>...
+ <% end %>
<% end %>
diff --git a/publify_core/spec/controllers/articles_controller_spec.rb b/publify_core/spec/controllers/articles_controller_spec.rb
index d8cf99266f..9788550ee3 100644
--- a/publify_core/spec/controllers/articles_controller_spec.rb
+++ b/publify_core/spec/controllers/articles_controller_spec.rb
@@ -126,44 +126,49 @@
end
describe "#search" do
+ render_views
+
let!(:blog) { create(:blog) }
let!(:user) { create :user }
+ let!(:matching_article) { create(:article, body: "public foobar") }
+ let!(:not_matching_article) { create(:article, body: "barbaz") }
+ let!(:protected_article) { create(:article, body: "protected foobar", password: "secret!") }
- before do
- create(:article,
- body: <<~MARKDOWN,
- in markdown format
-
- * we
- * use
- [ok](http://blog.ok.com) to define a link
- MARKDOWN
- text_filter_name: "markdown")
- create(:article, body: "xyz")
- end
-
- describe "a valid search" do
- before { get :search, params: { q: "a" } }
+ it "renders result with only matching articles" do
+ get :search, params: { q: "oba" }
- it { expect(response).to render_template(:search) }
- it { expect(assigns[:articles]).not_to be_nil }
+ aggregate_failures do
+ expect(response).to render_template(:search)
+ expect(assigns[:articles]).to match_array [matching_article, protected_article]
+ expect(response.body).to have_text "public foobar"
+ expect(response.body).not_to have_text "protected foobar"
+ end
end
it "renders feed rss by search" do
- get "search", params: { q: "a", format: "rss" }
- expect(response).to be_successful
- expect(response).to render_template("index_rss_feed", layout: false)
+ get "search", params: { q: "oba", format: "rss" }
+ aggregate_failures do
+ expect(response).to be_successful
+ expect(response).to render_template("index_rss_feed", layout: false)
+ expect(response.body).to have_text "public foobar"
+ expect(response.body).not_to have_text "protected foobar"
+ end
end
it "renders feed atom by search" do
- get "search", params: { q: "a", format: "atom" }
- expect(response).to be_successful
- expect(response).to render_template("index_atom_feed", layout: false)
+ get "search", params: { q: "oba", format: "atom" }
+ aggregate_failures do
+ expect(response).to be_successful
+ expect(response).to render_template("index_atom_feed", layout: false)
+ expect(response.body).to have_text "public foobar"
+ expect(response.body).not_to have_text "protected foobar"
+ end
end
it "search with empty result" do
get "search", params: { q: "abcdefghijklmnopqrstuvwxyz" }
expect(response).to render_template("articles/error", layout: false)
+ expect(assigns[:articles]).to eq []
end
end