From e7aed8607168d3c8954fbced97c20d1e08714e2a Mon Sep 17 00:00:00 2001 From: Arnaud Levy <contact@arnaudlevy.com> Date: Wed, 22 Sep 2021 11:35:12 +0200 Subject: [PATCH] seeds --- .../admin/application_controller.rb | 6 ++ .../server/languages_controller.rb | 62 +++++++++++++++++++ .../server/universities_controller.rb | 1 + app/models/language.rb | 18 ++++++ app/views/server/languages/_form.html.erb | 14 +++++ app/views/server/languages/edit.html.erb | 3 + app/views/server/languages/index.html.erb | 27 ++++++++ app/views/server/languages/new.html.erb | 3 + app/views/server/languages/show.html.erb | 10 +++ .../universities/_university.json.jbuilder | 2 - .../server/universities/index.json.jbuilder | 1 - .../server/universities/show.json.jbuilder | 1 - config/locales/fr.yml | 3 + config/routes.rb | 2 + config/server_navigation.rb | 1 + db/migrate/20210922091537_create_languages.rb | 10 +++ db/schema.rb | 9 ++- db/seeds.rb | 3 + test/controllers/languages_controller_test.rb | 48 ++++++++++++++ test/fixtures/languages.yml | 18 ++++++ test/models/language_test.rb | 17 +++++ test/system/languages_test.rb | 45 ++++++++++++++ 22 files changed, 299 insertions(+), 5 deletions(-) create mode 100644 app/controllers/server/languages_controller.rb create mode 100644 app/models/language.rb create mode 100644 app/views/server/languages/_form.html.erb create mode 100644 app/views/server/languages/edit.html.erb create mode 100644 app/views/server/languages/index.html.erb create mode 100644 app/views/server/languages/new.html.erb create mode 100644 app/views/server/languages/show.html.erb delete mode 100644 app/views/server/universities/_university.json.jbuilder delete mode 100644 app/views/server/universities/index.json.jbuilder delete mode 100644 app/views/server/universities/show.json.jbuilder create mode 100644 db/migrate/20210922091537_create_languages.rb create mode 100644 test/controllers/languages_controller_test.rb create mode 100644 test/fixtures/languages.yml create mode 100644 test/models/language_test.rb create mode 100644 test/system/languages_test.rb diff --git a/app/controllers/admin/application_controller.rb b/app/controllers/admin/application_controller.rb index 5ed9a73d7..95c1434d3 100644 --- a/app/controllers/admin/application_controller.rb +++ b/app/controllers/admin/application_controller.rb @@ -2,6 +2,7 @@ class Admin::ApplicationController < ApplicationController layout 'admin/layouts/application' before_action :authenticate_user! + before_action :set_locale protected @@ -20,4 +21,9 @@ class Admin::ApplicationController < ApplicationController object.persisted? ? add_breadcrumb(object, [:admin, object, options]) : add_breadcrumb('Créer') end + + def set_locale + return unless current_user + # I18n.locale = current_user.locale + end end diff --git a/app/controllers/server/languages_controller.rb b/app/controllers/server/languages_controller.rb new file mode 100644 index 000000000..05a3de530 --- /dev/null +++ b/app/controllers/server/languages_controller.rb @@ -0,0 +1,62 @@ +class Server::LanguagesController < Server::ApplicationController + load_and_authorize_resource + + def index + breadcrumb + end + + def show + breadcrumb + end + + def new + breadcrumb + end + + def edit + breadcrumb + add_breadcrumb 'Modifier' + end + + def create + breadcrumb + if @language.save + redirect_to @language, notice: "Language was successfully created." + else + render :new, status: :unprocessable_entity + end + end + + def update + breadcrumb + add_breadcrumb 'Modifier' + if @language.update(language_params) + redirect_to @language, notice: "Language was successfully updated." + else + render :edit, status: :unprocessable_entity + end + end + + def destroy + @language.destroy + redirect_to languages_url, notice: "Language was successfully destroyed." + end + + protected + + def breadcrumb + super + add_breadcrumb Language.model_name.human(count: 2), server_languages_path + if @language + if @language.persisted? + add_breadcrumb @language, [:server, @language] + else + add_breadcrumb 'Créer' + end + end + end + + def language_params + params.require(:language).permit(:name, :iso_code) + end +end diff --git a/app/controllers/server/universities_controller.rb b/app/controllers/server/universities_controller.rb index 196f639dc..efd9c6e57 100644 --- a/app/controllers/server/universities_controller.rb +++ b/app/controllers/server/universities_controller.rb @@ -33,6 +33,7 @@ class Server::UniversitiesController < Server::ApplicationController def update breadcrumb + add_breadcrumb 'Modifier' respond_to do |format| if @university.update(university_params) format.html { redirect_to [:server, @university], notice: "University was successfully updated." } diff --git a/app/models/language.rb b/app/models/language.rb new file mode 100644 index 000000000..b6f2b20ac --- /dev/null +++ b/app/models/language.rb @@ -0,0 +1,18 @@ +# == Schema Information +# +# Table name: languages +# +# id :uuid not null, primary key +# iso_code :string +# name :string +# created_at :datetime not null +# updated_at :datetime not null +# +class Language < ApplicationRecord + + validates_uniqueness_of :iso_code + + def to_s + "#{name}" + end +end diff --git a/app/views/server/languages/_form.html.erb b/app/views/server/languages/_form.html.erb new file mode 100644 index 000000000..17a932c39 --- /dev/null +++ b/app/views/server/languages/_form.html.erb @@ -0,0 +1,14 @@ +<%= simple_form_for [:server, language] do |f| %> + <div class="row"> + <div class="col-md-8"> + <%= f.input :name %> + </div> + <div class="col-md-4"> + <%= f.input :iso_code %> + </div> + </div> + + <% content_for :buttons do %> + <%= submit f %> + <% end %> +<% end %> diff --git a/app/views/server/languages/edit.html.erb b/app/views/server/languages/edit.html.erb new file mode 100644 index 000000000..78b30fd4b --- /dev/null +++ b/app/views/server/languages/edit.html.erb @@ -0,0 +1,3 @@ +<% content_for :title, @language %> + +<%= render 'form', language: @language %> diff --git a/app/views/server/languages/index.html.erb b/app/views/server/languages/index.html.erb new file mode 100644 index 000000000..c051503a2 --- /dev/null +++ b/app/views/server/languages/index.html.erb @@ -0,0 +1,27 @@ +<% content_for :title, Language.model_name.human(count: 2) %> + +<table class="table"> + <thead> + <tr> + <th>Name</th> + <th>Iso code</th> + <th></th> + </tr> + </thead> + + <tbody> + <% @languages.each do |language| %> + <tr> + <td><%= link_to language, [:server, language] %></td> + <td><%= language.iso_code %></td> + <td class="text-end"> + <%= link_to t('edit'), edit_server_language_path(language), class: button_classes %> + </td> + </tr> + <% end %> + </tbody> +</table> + +<% content_for :buttons do %> + <%= link_to t('create'), new_server_language_path, class: button_classes %> +<% end %> diff --git a/app/views/server/languages/new.html.erb b/app/views/server/languages/new.html.erb new file mode 100644 index 000000000..ec8343274 --- /dev/null +++ b/app/views/server/languages/new.html.erb @@ -0,0 +1,3 @@ +<% content_for :title, Language.model_name.human %> + +<%= render 'form', language: @language %> diff --git a/app/views/server/languages/show.html.erb b/app/views/server/languages/show.html.erb new file mode 100644 index 000000000..56a8fc028 --- /dev/null +++ b/app/views/server/languages/show.html.erb @@ -0,0 +1,10 @@ +<% content_for :title, @language %> + +<p> + <strong>Iso code:</strong> + <%= @language.iso_code %> +</p> + +<% content_for :buttons do %> + <%= link_to t('edit'), edit_server_language_path(@language), class: button_classes %> +<% end %> diff --git a/app/views/server/universities/_university.json.jbuilder b/app/views/server/universities/_university.json.jbuilder deleted file mode 100644 index 9b20654a6..000000000 --- a/app/views/server/universities/_university.json.jbuilder +++ /dev/null @@ -1,2 +0,0 @@ -json.extract! university, :id, :name, :address, :zipcode, :city, :country, :private, :created_at, :updated_at -json.url university_url(university, format: :json) diff --git a/app/views/server/universities/index.json.jbuilder b/app/views/server/universities/index.json.jbuilder deleted file mode 100644 index 93258cd65..000000000 --- a/app/views/server/universities/index.json.jbuilder +++ /dev/null @@ -1 +0,0 @@ -json.array! @universities, partial: "universities/university", as: :university diff --git a/app/views/server/universities/show.json.jbuilder b/app/views/server/universities/show.json.jbuilder deleted file mode 100644 index c8b159aca..000000000 --- a/app/views/server/universities/show.json.jbuilder +++ /dev/null @@ -1 +0,0 @@ -json.partial! "universities/university", university: @university diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 505810077..ccc4744ce 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -13,6 +13,9 @@ fr: university: one: Université other: Universités + language: + one: Langue + other: Langues user: one: Utilisateur other: Utilisateurs diff --git a/config/routes.rb b/config/routes.rb index 92dfc427e..540db86ee 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,4 +1,5 @@ Rails.application.routes.draw do + resources :languages devise_for :users, controllers: { registrations: 'users/registrations', sessions: 'users/sessions' @@ -15,6 +16,7 @@ Rails.application.routes.draw do namespace :server do resources :universities + resources :languages root to: 'dashboard#index' end diff --git a/config/server_navigation.rb b/config/server_navigation.rb index c94ce20eb..72d21f859 100644 --- a/config/server_navigation.rb +++ b/config/server_navigation.rb @@ -6,5 +6,6 @@ SimpleNavigation::Configuration.run do |navigation| navigation.items do |primary| primary.item :dashboard, t('dashboard'), server_root_path, { icon: 'tachometer-alt', highlights_on: %r{adminserver$} } primary.item :universities, University.model_name.human(count: 2), server_universities_path, { icon: 'university' } + primary.item :languages, Language.model_name.human(count: 2), server_languages_path, { icon: 'flag' } end end diff --git a/db/migrate/20210922091537_create_languages.rb b/db/migrate/20210922091537_create_languages.rb new file mode 100644 index 000000000..aff8421ea --- /dev/null +++ b/db/migrate/20210922091537_create_languages.rb @@ -0,0 +1,10 @@ +class CreateLanguages < ActiveRecord::Migration[6.1] + def change + create_table :languages, id: :uuid do |t| + t.string :name + t.string :iso_code + + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb index f5d944117..f7cf9f0e8 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2021_09_21_170648) do +ActiveRecord::Schema.define(version: 2021_09_22_091537) do # These are extensions that must be enabled in order to support this database enable_extension "pgcrypto" @@ -137,6 +137,13 @@ ActiveRecord::Schema.define(version: 2021_09_21_170648) do t.index ["university_id"], name: "index_education_programs_on_university_id" end + create_table "languages", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + t.string "name" + t.string "iso_code" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + end + create_table "research_journal_articles", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.string "title" t.text "text" diff --git a/db/seeds.rb b/db/seeds.rb index 91fe7b01f..1f63f50f7 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -1,5 +1,8 @@ University.create name: 'Osuny', identifier: 'demo' +Language.where(name: 'French', iso_code: 'fr').first_or_create +Language.where(name: 'English', iso_code: 'en').first_or_create + Administration::Qualiopi::Criterion.destroy_all Administration::Qualiopi::Criterion.create [ { diff --git a/test/controllers/languages_controller_test.rb b/test/controllers/languages_controller_test.rb new file mode 100644 index 000000000..e7d19856b --- /dev/null +++ b/test/controllers/languages_controller_test.rb @@ -0,0 +1,48 @@ +require "test_helper" + +class LanguagesControllerTest < ActionDispatch::IntegrationTest + setup do + @language = languages(:one) + end + + test "should get index" do + get languages_url + assert_response :success + end + + test "should get new" do + get new_language_url + assert_response :success + end + + test "should create language" do + assert_difference('Language.count') do + post languages_url, params: { language: { iso_code: @language.iso_code, name: @language.name } } + end + + assert_redirected_to language_url(Language.last) + end + + test "should show language" do + get language_url(@language) + assert_response :success + end + + test "should get edit" do + get edit_language_url(@language) + assert_response :success + end + + test "should update language" do + patch language_url(@language), params: { language: { iso_code: @language.iso_code, name: @language.name } } + assert_redirected_to language_url(@language) + end + + test "should destroy language" do + assert_difference('Language.count', -1) do + delete language_url(@language) + end + + assert_redirected_to languages_url + end +end diff --git a/test/fixtures/languages.yml b/test/fixtures/languages.yml new file mode 100644 index 000000000..45b6db808 --- /dev/null +++ b/test/fixtures/languages.yml @@ -0,0 +1,18 @@ +# == Schema Information +# +# Table name: languages +# +# id :uuid not null, primary key +# iso_code :string +# name :string +# created_at :datetime not null +# updated_at :datetime not null +# + +one: + name: MyString + iso_code: MyString + +two: + name: MyString + iso_code: MyString diff --git a/test/models/language_test.rb b/test/models/language_test.rb new file mode 100644 index 000000000..e43f8ceee --- /dev/null +++ b/test/models/language_test.rb @@ -0,0 +1,17 @@ +# == Schema Information +# +# Table name: languages +# +# id :uuid not null, primary key +# iso_code :string +# name :string +# created_at :datetime not null +# updated_at :datetime not null +# +require "test_helper" + +class LanguageTest < ActiveSupport::TestCase + # test "the truth" do + # assert true + # end +end diff --git a/test/system/languages_test.rb b/test/system/languages_test.rb new file mode 100644 index 000000000..b5d0360f2 --- /dev/null +++ b/test/system/languages_test.rb @@ -0,0 +1,45 @@ +require "application_system_test_case" + +class LanguagesTest < ApplicationSystemTestCase + setup do + @language = languages(:one) + end + + test "visiting the index" do + visit languages_url + assert_selector "h1", text: "Languages" + end + + test "creating a Language" do + visit languages_url + click_on "New Language" + + fill_in "Iso code", with: @language.iso_code + fill_in "Name", with: @language.name + click_on "Create Language" + + assert_text "Language was successfully created" + click_on "Back" + end + + test "updating a Language" do + visit languages_url + click_on "Edit", match: :first + + fill_in "Iso code", with: @language.iso_code + fill_in "Name", with: @language.name + click_on "Update Language" + + assert_text "Language was successfully updated" + click_on "Back" + end + + test "destroying a Language" do + visit languages_url + page.accept_confirm do + click_on "Destroy", match: :first + end + + assert_text "Language was successfully destroyed" + end +end -- GitLab