From d593a4809f900a6c0778e8d106560421c41b930e Mon Sep 17 00:00:00 2001
From: Ceithir
Date: Sun, 12 Nov 2023 17:36:19 +0100
Subject: [PATCH 1/8] Use ElasticSearch to filter works per language
https://otwarchive.atlassian.net/browse/AO3-3471
---
app/controllers/works_controller.rb | 3 ++-
app/models/language.rb | 1 +
app/models/search/work_query.rb | 6 ++++++
features/step_definitions/work_steps.rb | 8 ++++++++
features/works/work_browse.feature | 24 ++++++++++++++++++++++++
5 files changed, 41 insertions(+), 1 deletion(-)
diff --git a/app/controllers/works_controller.rb b/app/controllers/works_controller.rb
index a18a6be9e51..1f7f70832cf 100755
--- a/app/controllers/works_controller.rb
+++ b/app/controllers/works_controller.rb
@@ -771,7 +771,8 @@ def load_owner
end
end
end
- @owner = @pseud || @user || @collection || @tag
+ @language = Language.find_by(short: params[:language_id]) if params[:language_id].present?
+ @owner = @pseud || @user || @collection || @tag || @language
end
def load_work
diff --git a/app/models/language.rb b/app/models/language.rb
index f7d7ce974de..2e36a25d13b 100644
--- a/app/models/language.rb
+++ b/app/models/language.rb
@@ -1,4 +1,5 @@
class Language < ApplicationRecord
+ include WorksOwner
validates_presence_of :short
validates :short, uniqueness: true
validates_presence_of :name
diff --git a/app/models/search/work_query.rb b/app/models/search/work_query.rb
index c09eef009f2..75fa7cd7c06 100644
--- a/app/models/search/work_query.rb
+++ b/app/models/search/work_query.rb
@@ -44,6 +44,12 @@ def queries
def add_owner
owner = options[:works_parent]
+
+ if owner.is_a?(Language)
+ options[:language_id] = owner.short
+ return
+ end
+
field = case owner
when Tag
:filter_ids
diff --git a/features/step_definitions/work_steps.rb b/features/step_definitions/work_steps.rb
index 0560591ef9f..8010cc11295 100644
--- a/features/step_definitions/work_steps.rb
+++ b/features/step_definitions/work_steps.rb
@@ -564,6 +564,14 @@
step "the periodic tag count task is run"
end
+When "I browse works in {string}" do |language_name|
+ step %{all indexing jobs have been run}
+ step "the periodic tag count task is run"
+
+ language = Language.find_by(name: language_name)
+ visit language_works_path(language)
+end
+
When /^I delete the work "([^"]*)"$/ do |work|
work = Work.find_by(title: CGI.escapeHTML(work))
visit edit_work_path(work)
diff --git a/features/works/work_browse.feature b/features/works/work_browse.feature
index 4540fa91cf8..c4731fd9447 100644
--- a/features/works/work_browse.feature
+++ b/features/works/work_browse.feature
@@ -147,3 +147,27 @@ chapter when the chapters are reordered.
When I follow the comments link for the work "Awesome Work"
Then I should be on the work "Awesome Work"
And I should see "Bravo!"
+
+Scenario: Can also browse work indexed by language
+ Given basic languages
+ And Persian language
+ And basic tags
+ And I am logged in
+ And I post the work "Whatever 1" with fandom "Aggressive Retsuko"
+ And I post the work "Whatever 2" with fandom "Aggressive Retsuko"
+ When I go to the new work page
+ And I select "Not Rated" from "Rating"
+ And I check "No Archive Warnings Apply"
+ And I fill in "Fandoms" with "Weiß Kreuz"
+ And I fill in "Work Title" with "Überraschende Überraschung"
+ And I fill in "content" with "Dies ist eine Fanfic in Deutsch."
+ And I select "Deutsch" from "Choose a language"
+ When I press "Post"
+ Then I should see "Work was successfully posted."
+ And I should see "Deutsch" within "dd.language"
+ When I browse works in "English"
+ Then I should see "2 Works"
+ When I browse works in "Deutsch"
+ Then I should see "1 Work"
+ When I browse works in "Persian"
+ Then I should see "0 Works"
From 3ea98ed860701a19c4f6b1b8a552ccb78291edc1 Mon Sep 17 00:00:00 2001
From: Ceithir
Date: Sun, 12 Nov 2023 17:50:01 +0100
Subject: [PATCH 2/8] Display which language
At least once outside the url
---
app/helpers/search_helper.rb | 2 ++
features/works/work_browse.feature | 6 +++---
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/app/helpers/search_helper.rb b/app/helpers/search_helper.rb
index d977b0b42f0..dcb9be97318 100644
--- a/app/helpers/search_helper.rb
+++ b/app/helpers/search_helper.rb
@@ -25,6 +25,8 @@ def search_header(collection, search, item_name, parent=nil)
header << ts("by %{byline}", byline: parent.byline)
when User
header << ts("by %{username}", username: parent.login)
+ when Language
+ header << ts("in %{language}", language: parent.name)
end
header << ts("in %{tag_link}", tag_link: link_to_tag_with_text(parent, parent.name)) if parent.is_a?(Tag)
diff --git a/features/works/work_browse.feature b/features/works/work_browse.feature
index c4731fd9447..2e7d71d4f21 100644
--- a/features/works/work_browse.feature
+++ b/features/works/work_browse.feature
@@ -166,8 +166,8 @@ Scenario: Can also browse work indexed by language
Then I should see "Work was successfully posted."
And I should see "Deutsch" within "dd.language"
When I browse works in "English"
- Then I should see "2 Works"
+ Then I should see "2 Works in English"
When I browse works in "Deutsch"
- Then I should see "1 Work"
+ Then I should see "1 Work in Deutsch"
When I browse works in "Persian"
- Then I should see "0 Works"
+ Then I should see "0 Works in Persian"
From f88ed839e31e45e5ab2ca8a712bf187df69f5825 Mon Sep 17 00:00:00 2001
From: Ceithir
Date: Thu, 16 Nov 2023 14:00:10 +0100
Subject: [PATCH 3/8] Syntax
---
features/step_definitions/work_steps.rb | 2 +-
features/works/work_browse.feature | 6 +++---
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/features/step_definitions/work_steps.rb b/features/step_definitions/work_steps.rb
index 8010cc11295..2937753f6ae 100644
--- a/features/step_definitions/work_steps.rb
+++ b/features/step_definitions/work_steps.rb
@@ -564,7 +564,7 @@
step "the periodic tag count task is run"
end
-When "I browse works in {string}" do |language_name|
+When "I browse works in language {string}" do |language_name|
step %{all indexing jobs have been run}
step "the periodic tag count task is run"
diff --git a/features/works/work_browse.feature b/features/works/work_browse.feature
index 2e7d71d4f21..85bc9c82b17 100644
--- a/features/works/work_browse.feature
+++ b/features/works/work_browse.feature
@@ -165,9 +165,9 @@ Scenario: Can also browse work indexed by language
When I press "Post"
Then I should see "Work was successfully posted."
And I should see "Deutsch" within "dd.language"
- When I browse works in "English"
+ When I browse works in language "English"
Then I should see "2 Works in English"
- When I browse works in "Deutsch"
+ When I browse works in language "Deutsch"
Then I should see "1 Work in Deutsch"
- When I browse works in "Persian"
+ When I browse works in language "Persian"
Then I should see "0 Works in Persian"
From faed19849778025761e5d1a02abdde1fe962cb0a Mon Sep 17 00:00:00 2001
From: Ceithir
Date: Thu, 16 Nov 2023 14:16:57 +0100
Subject: [PATCH 4/8] Replace languages#show with a redirect
---
app/controllers/languages_controller.rb | 7 +------
app/views/languages/show.html.erb | 21 ---------------------
config/routes.rb | 3 ++-
3 files changed, 3 insertions(+), 28 deletions(-)
delete mode 100644 app/views/languages/show.html.erb
diff --git a/app/controllers/languages_controller.rb b/app/controllers/languages_controller.rb
index 0eb79453393..8d1336fefcd 100644
--- a/app/controllers/languages_controller.rb
+++ b/app/controllers/languages_controller.rb
@@ -4,11 +4,6 @@ def index
@languages = Language.default_order
end
- def show
- @language = Language.find_by(short: params[:id])
- @works = @language.works.recent.visible.limit(ArchiveConfig.NUMBER_OF_ITEMS_VISIBLE_IN_DASHBOARD)
- end
-
def new
@language = Language.new
authorize @language
@@ -35,7 +30,7 @@ def update
authorize @language
if @language.update(language_params)
flash[:notice] = t('successfully_updated', default: 'Language was successfully updated.')
- redirect_to @language
+ redirect_to languages_path
else
render action: "new"
end
diff --git a/app/views/languages/show.html.erb b/app/views/languages/show.html.erb
deleted file mode 100644
index 561bd98554e..00000000000
--- a/app/views/languages/show.html.erb
+++ /dev/null
@@ -1,21 +0,0 @@
-<%= @language.name %>
-
-
-<% if logged_in_as_admin? %>
-
- <%= link_to ts('Edit Language'), edit_language_path(@language) %>
-
-<% end %>
-
-
-
-<%= link_to t('.work_count', :default => "%{count} works", :count => @language.work_count), language_works_path(@language) %> in <%= @language.fandom_count %> fandoms
-
-<% unless @works.blank? %>
- Most recent works:
-
- <% for work in @works %>
- <%= render :partial => 'works/work_blurb', :locals => {:work => work} %>
- <% end %>
-
-<% end %>
\ No newline at end of file
diff --git a/config/routes.rb b/config/routes.rb
index e0c027fe8f0..04315aaba66 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -509,10 +509,11 @@
#### I18N ####
# should stay below the main works mapping
- resources :languages do
+ resources :languages, except: [:show] do
resources :works
resources :admin_posts
end
+ get '/languages/:id', to: redirect('/languages/%{id}/works', status: 302)
resources :locales, except: :destroy
#### API ####
From 4bce5014145ce8d8eb65c244e2d123f6ff889c7c Mon Sep 17 00:00:00 2001
From: Ceithir
Date: Thu, 16 Nov 2023 14:20:21 +0100
Subject: [PATCH 5/8] Cop
---
config/routes.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/config/routes.rb b/config/routes.rb
index 04315aaba66..59c40e47760 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -513,7 +513,7 @@
resources :works
resources :admin_posts
end
- get '/languages/:id', to: redirect('/languages/%{id}/works', status: 302)
+ get "/languages/:id", to: redirect("/languages/%{id}/works", status: 302)
resources :locales, except: :destroy
#### API ####
From e8a0c8946ec9b59144c6c85a8b3a129a85d9060c Mon Sep 17 00:00:00 2001
From: Ceithir
Date: Thu, 16 Nov 2023 16:56:25 +0100
Subject: [PATCH 6/8] Update tests to new behavior
---
features/other_a/languages.feature | 3 ++-
spec/controllers/languages_controller_spec.rb | 22 +------------------
2 files changed, 3 insertions(+), 22 deletions(-)
diff --git a/features/other_a/languages.feature b/features/other_a/languages.feature
index 79cc74b47d5..37a7f1537af 100644
--- a/features/other_a/languages.feature
+++ b/features/other_a/languages.feature
@@ -37,9 +37,10 @@ Feature: Languages
# Browse works in a language
When I am on the languages page
+ And all indexing jobs have been run
Then I should see "Deutsch"
When I follow "Deutsch"
- Then I should see "1 works in 1 fandoms"
+ Then I should see "1 Work in Deutsch"
And I should see "Die Rache der Sith"
And I should not see "Revenge of the Sith"
diff --git a/spec/controllers/languages_controller_spec.rb b/spec/controllers/languages_controller_spec.rb
index 17d8f2383c9..11ce30ce6c3 100644
--- a/spec/controllers/languages_controller_spec.rb
+++ b/spec/controllers/languages_controller_spec.rb
@@ -25,26 +25,6 @@
end
end
- describe "GET show" do
- context "when not logged in" do
- it "renders the show template" do
- get :show, params: { id: "en" }
- expect(response).to render_template("show")
- end
- end
-
- Admin::VALID_ROLES.each do |role|
- context "when logged in as an admin with #{role} role" do
- let(:admin) { create(:admin, roles: [role]) }
-
- it "renders the show template" do
- get :show, params: { id: "en" }
- expect(response).to render_template("show")
- end
- end
- end
- end
-
describe "GET new" do
context "when not logged in" do
it "redirects with error" do
@@ -227,7 +207,7 @@
end
it "redirects and returns success message" do
- it_redirects_to_with_notice(finnish, "Language was successfully updated.")
+ it_redirects_to_with_notice(languages_path, "Language was successfully updated.")
end
end
end
From 3af690d75dfc66d79af27869034763aa03b0a311 Mon Sep 17 00:00:00 2001
From: Ceithir
Date: Fri, 17 Nov 2023 15:35:59 +0100
Subject: [PATCH 7/8] Alt route syntax
---
config/routes.rb | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/config/routes.rb b/config/routes.rb
index 59c40e47760..bc5304d1c8c 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -512,8 +512,11 @@
resources :languages, except: [:show] do
resources :works
resources :admin_posts
+
+ member do
+ get :show, to: redirect("/languages/%{id}/works", status: 302)
+ end
end
- get "/languages/:id", to: redirect("/languages/%{id}/works", status: 302)
resources :locales, except: :destroy
#### API ####
From 0b81a95a40d0ba5402d00d3beb37efa495ce82b2 Mon Sep 17 00:00:00 2001
From: Ceithir
Date: Fri, 17 Nov 2023 17:37:01 +0100
Subject: [PATCH 8/8] Revert "Alt route syntax"
This reverts commit 3af690d75dfc66d79af27869034763aa03b0a311.
---
config/routes.rb | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/config/routes.rb b/config/routes.rb
index bc5304d1c8c..59c40e47760 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -512,11 +512,8 @@
resources :languages, except: [:show] do
resources :works
resources :admin_posts
-
- member do
- get :show, to: redirect("/languages/%{id}/works", status: 302)
- end
end
+ get "/languages/:id", to: redirect("/languages/%{id}/works", status: 302)
resources :locales, except: :destroy
#### API ####