Compare commits
2 Commits
206c4da31f
...
3ba4a49a26
Author | SHA1 | Date |
---|---|---|
maddiebaka | 3ba4a49a26 | |
maddiebaka | c2891a66f8 |
|
@ -0,0 +1,10 @@
|
|||
class ActiveLanguageController < ApplicationController
|
||||
|
||||
def set_active_language
|
||||
if Language.find_by_id(params[:active_language_id]) != nil
|
||||
cookies[:active_language_id] = params[:active_language_id]
|
||||
else
|
||||
redirect_to root_path, status: :unprocessable_entity
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,4 +1,4 @@
|
|||
class LanguagesController < ApplicationController
|
||||
class Admin::LanguagesController < ApplicationController
|
||||
|
||||
def index
|
||||
@languages = Language.all
|
||||
|
@ -12,7 +12,7 @@ class LanguagesController < ApplicationController
|
|||
@language = Language.new(language_params)
|
||||
if @language.save
|
||||
flash[:notice] = "Language successfully created."
|
||||
redirect_to languages_path
|
||||
redirect_to admin_languages_path
|
||||
else
|
||||
render :new, status: :unprocessable_entity
|
||||
end
|
||||
|
@ -26,7 +26,7 @@ class LanguagesController < ApplicationController
|
|||
@language = Language.find_by_id(params[:id])
|
||||
if @language.update(language_params)
|
||||
flash[:notice] = "Language successfully updated."
|
||||
redirect_to languages_path
|
||||
redirect_to admin_languages_path
|
||||
else
|
||||
render :edit, status: :unprocessable_entity
|
||||
end
|
||||
|
@ -36,7 +36,7 @@ class LanguagesController < ApplicationController
|
|||
@language = Language.find_by_id(params[:id])
|
||||
if @language.destroy
|
||||
flash[:notice] = "Language successfully deleted."
|
||||
redirect_to languages_path
|
||||
redirect_to admin_languages_path
|
||||
else
|
||||
render :index, status: :not_modified
|
||||
end
|
|
@ -0,0 +1,8 @@
|
|||
module ActiveLanguageHelper
|
||||
|
||||
def active_language_select_tag
|
||||
languages = Language.all.to_a.delete_if {|language| language.name == "English" }
|
||||
options = options_from_collection_for_select(languages, "id", "name", cookies[:active_language_id] || 1)
|
||||
select_tag "active_language_id", options
|
||||
end
|
||||
end
|
|
@ -1,4 +1,4 @@
|
|||
<%= form_for language do |f| %>
|
||||
<%= form_for [:admin, language] do |f| %>
|
||||
<%= f.label :name %>
|
||||
<%= f.text_field :name %><br/>
|
||||
<br/>
|
|
@ -0,0 +1,5 @@
|
|||
<%= render "admin/languages/errors", language: @language %>
|
||||
|
||||
<h1>Edit Language</h1>
|
||||
|
||||
<%= render "admin/languages/form", language: @language %>
|
|
@ -7,9 +7,9 @@
|
|||
<% @languages.each do |language| %>
|
||||
<tr>
|
||||
<td><%= language.name %></td>
|
||||
<td><%= link_to "Edit", edit_language_path(language) %></td>
|
||||
<td><%= link_to "Edit", edit_admin_language_path(language) %></td>
|
||||
<td> | </td>
|
||||
<td><%= link_to "Delete", language_path(language), data: { turbo_method: :delete,
|
||||
<td><%= link_to "Delete", admin_language_path(language), data: { turbo_method: :delete,
|
||||
turbo_confirm: "Are you sure?" } %></td>
|
||||
</tr>
|
||||
<% end %>
|
||||
|
@ -17,4 +17,4 @@
|
|||
|
||||
<br/>
|
||||
<br/>
|
||||
<%= link_to "New Language", new_language_path %>
|
||||
<%= link_to "New Language", new_admin_language_path %>
|
|
@ -0,0 +1,5 @@
|
|||
<%= render "admin/languages/errors", language: @language %>
|
||||
|
||||
<h1>New Language</h1>
|
||||
|
||||
<%= render "admin/languages/form", language: @language %>
|
|
@ -1,4 +1,5 @@
|
|||
<h1>Parts of Speech</h1>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td><b>Part of Speech</b></td>
|
||||
|
@ -11,4 +12,3 @@
|
|||
</tr>
|
||||
<% end %>
|
||||
</table>
|
||||
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
<%= render "languages/errors", language: @language %>
|
||||
|
||||
<h1>Edit Language</h1>
|
||||
|
||||
<%= render "languages/form", language: @language %>
|
|
@ -1,5 +0,0 @@
|
|||
<%= render "languages/errors", language: @language %>
|
||||
|
||||
<h1>New Language</h1>
|
||||
|
||||
<%= render "languages/form", language: @language %>
|
|
@ -17,7 +17,12 @@
|
|||
<%= link_to "Dictionary", dictionary_index_path %>
|
||||
<% if user_signed_in? %>
|
||||
<pre style="display: inline;">|</pre>
|
||||
<%= link_to "Languages", languages_path %>
|
||||
<%= link_to "Languages", admin_languages_path %>
|
||||
<pre style="display: inline;">|</pre>
|
||||
<%= form_tag '/set_active_language', class: "d-inline" do %>
|
||||
<%= active_language_select_tag %>
|
||||
<%= submit_tag "Switch Language" %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
</div>
|
||||
<div class="ms-auto p-2">
|
||||
|
|
|
@ -1,9 +1,14 @@
|
|||
Rails.application.routes.draw do
|
||||
devise_for :users
|
||||
#get 'dictionary/index'
|
||||
resources :dictionary, only: [:index, :show]
|
||||
resources :dictionary, only: [:index, :show, :create]
|
||||
resources :words, only: [:index, :show]
|
||||
resources :languages
|
||||
|
||||
post '/set_active_language', action: :set_active_language, controller: :active_language
|
||||
|
||||
namespace :admin do
|
||||
resources :languages
|
||||
end
|
||||
# Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html
|
||||
|
||||
# Reveal health status on /up that returns 200 if the app boots with no exceptions, otherwise 500.
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
FactoryBot.define do
|
||||
factory :language do
|
||||
name { "MyString" }
|
||||
sequence(:name) { |n| "MyString#{n.to_s}" }
|
||||
end
|
||||
|
||||
factory :language_english, class: :language do
|
||||
name { "English" }
|
||||
end
|
||||
end
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
require 'rails_helper'
|
||||
|
||||
# Specs in this file have access to a helper object that includes
|
||||
# the ActiveLanguageHelper. For example:
|
||||
#
|
||||
# describe ActiveLanguageHelper do
|
||||
# describe "string concat" do
|
||||
# it "concats two strings with spaces" do
|
||||
# expect(helper.concat_strings("this","that")).to eq("this that")
|
||||
# end
|
||||
# end
|
||||
# end
|
||||
RSpec.describe ActiveLanguageHelper, type: :helper do
|
||||
|
||||
describe "active_language_helper_tag" do
|
||||
before :each do
|
||||
english = FactoryBot.create(:language_english)
|
||||
2.times { FactoryBot.create(:language) }
|
||||
@tag = active_language_select_tag
|
||||
end
|
||||
|
||||
it "should return a select tag" do
|
||||
expect(@tag).to have_selector(%(select))
|
||||
end
|
||||
|
||||
it "should not contain an English option" do
|
||||
expect(@tag).to_not include("English")
|
||||
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,20 @@
|
|||
require 'rails_helper'
|
||||
|
||||
RSpec.describe "ActiveLanguages", type: :request do
|
||||
|
||||
describe "POST :set_active_language" do
|
||||
|
||||
it "should set the cookie" do
|
||||
language = FactoryBot.create(:language)
|
||||
post "/set_active_language/", params: { active_language_id: language.id }
|
||||
expect(cookies[:active_language_id]).to_not be_nil
|
||||
end
|
||||
|
||||
it "should not set the cookie if language does not exist" do
|
||||
language = FactoryBot.create(:language)
|
||||
id = language.id + 1
|
||||
post "/set_active_language/", params: { active_language_id: id }
|
||||
expect(response).to have_http_status(:unprocessable_entity)
|
||||
end
|
||||
end
|
||||
end
|
|
@ -4,59 +4,59 @@ RSpec.describe "Languages", type: :request do
|
|||
|
||||
describe "GET :index" do
|
||||
it "returns http success" do
|
||||
get "/languages/"
|
||||
get "/admin/languages/"
|
||||
expect(response).to have_http_status(:success)
|
||||
end
|
||||
|
||||
it "lists all languages" do
|
||||
language = FactoryBot.create(:language)
|
||||
get "/languages/"
|
||||
get "/admin/languages/"
|
||||
expect(response.body).to include(language.name)
|
||||
end
|
||||
|
||||
it "has a new-language link" do
|
||||
get "/languages/"
|
||||
expect(response.body).to have_selector(%(a[href="#{new_language_path}"]))
|
||||
get "/admin/languages/"
|
||||
expect(response.body).to have_selector(%(a[href="#{new_admin_language_path}"]))
|
||||
end
|
||||
|
||||
it "has an edit button" do
|
||||
language = FactoryBot.create(:language)
|
||||
get "/languages/"
|
||||
get "/admin/languages/"
|
||||
expect(response.body).to have_link("Edit")
|
||||
end
|
||||
|
||||
it "has a delete button" do
|
||||
language = FactoryBot.create(:language)
|
||||
get "/languages/"
|
||||
get "/admin/languages/"
|
||||
expect(response.body).to have_link("Delete")
|
||||
end
|
||||
end
|
||||
|
||||
describe "GET :new" do
|
||||
it "returns http success" do
|
||||
get "/languages/new"
|
||||
get "/admin/languages/new"
|
||||
expect(response).to have_http_status(:success)
|
||||
end
|
||||
|
||||
it "has a form for a new language" do
|
||||
get "/languages/new"
|
||||
get "/admin/languages/new"
|
||||
expect(response.body).to have_selector(%(input[name="language[name]"]))
|
||||
end
|
||||
end
|
||||
|
||||
describe "POST :create" do
|
||||
it "redirect to languages_path on success" do
|
||||
post "/languages", params: { language: { name: "Test Name" } }
|
||||
expect(response).to redirect_to(languages_path)
|
||||
it "redirect to admin_languages_path on success" do
|
||||
post "/admin/languages", params: { language: { name: "Test Name" } }
|
||||
expect(response).to redirect_to(admin_languages_path)
|
||||
end
|
||||
|
||||
it "creates a new language" do
|
||||
post "/languages", params: { language: { name: "Test Name" } }
|
||||
post "/admin/languages", params: { language: { name: "Test Name" } }
|
||||
expect(Language.count).to eq(1)
|
||||
end
|
||||
|
||||
it "requires a name for a new language" do
|
||||
post "/languages", params: { language: { name: nil } }
|
||||
post "/admin/languages", params: { language: { name: nil } }
|
||||
expect(response).to have_http_status(:unprocessable_entity)
|
||||
end
|
||||
end
|
||||
|
@ -64,7 +64,7 @@ RSpec.describe "Languages", type: :request do
|
|||
describe "GET :edit" do
|
||||
before :each do
|
||||
@language = FactoryBot.create(:language)
|
||||
get "/languages/#{@language.id}/edit"
|
||||
get "/admin/languages/#{@language.id}/edit"
|
||||
end
|
||||
|
||||
it "returns http success" do
|
||||
|
@ -83,13 +83,13 @@ RSpec.describe "Languages", type: :request do
|
|||
end
|
||||
|
||||
it "updates a language" do
|
||||
patch "/languages/#{@language.id}", params: @params
|
||||
expect(response).to redirect_to(languages_path)
|
||||
patch "/admin/languages/#{@language.id}", params: @params
|
||||
expect(response).to redirect_to(admin_languages_path)
|
||||
end
|
||||
|
||||
it "requires params to update a language" do
|
||||
@params = { language: { name: nil, invalid: "oh no" } }
|
||||
patch "/languages/#{@language.id}", params: @params
|
||||
patch "/admin/languages/#{@language.id}", params: @params
|
||||
expect(response).to have_http_status(:unprocessable_entity)
|
||||
end
|
||||
|
||||
|
@ -99,7 +99,7 @@ RSpec.describe "Languages", type: :request do
|
|||
it "deletes a language" do
|
||||
language = FactoryBot.create(:language)
|
||||
language2 = FactoryBot.create(:language)
|
||||
delete "/languages/#{language.id}"
|
||||
delete "/admin/languages/#{language.id}"
|
||||
expect(Language.all).to eq([language2])
|
||||
end
|
||||
end
|
||||
|
|
|
@ -30,7 +30,7 @@ RSpec.describe "Root path", type: :request do
|
|||
it "should have the 'Languages' link" do
|
||||
sign_in FactoryBot.create(:user)
|
||||
get root_path
|
||||
expect(response.body).to have_selector(%(a[href="#{languages_path}"]))
|
||||
expect(response.body).to have_selector(%(a[href="#{admin_languages_path}"]))
|
||||
end
|
||||
|
||||
it "should welcome user by username" do
|
||||
|
@ -39,5 +39,12 @@ RSpec.describe "Root path", type: :request do
|
|||
get root_path
|
||||
expect(response.body).to include(user.username)
|
||||
end
|
||||
|
||||
it "should have a language drop-down" do
|
||||
user = FactoryBot.create(:user)
|
||||
sign_in user
|
||||
get root_path
|
||||
expect(response.body).to have_field("active_language_id")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue