From de27840755d324133dbf17dd98afe0208af4458b Mon Sep 17 00:00:00 2001 From: Arnaud Levy <contact@arnaudlevy.com> Date: Wed, 16 Mar 2022 16:27:26 +0100 Subject: [PATCH] academic years --- .../extranet/academic_years_controller.rb | 12 +++++ .../organizations_controller.rb | 2 +- .../administration/qualiopi/indicator.rb | 2 +- app/models/communication/website.rb | 2 +- .../communication/website/configs/base_url.rb | 2 +- .../website/configs/permalinks.rb | 2 +- app/models/education/academic_year.rb | 27 +++++++++++ app/models/education/program.rb | 2 +- app/models/university/person/alumnus.rb | 48 +++++++++++++++++++ app/models/university/with_education.rb | 1 + .../extranet/academic_years/index.html.erb | 19 ++++++++ .../extranet/academic_years/show.html.erb | 14 ++++++ .../organizations/index.html.erb | 0 .../organizations/show.html.erb | 2 + config/routes.rb | 1 + config/routes/admin/communication.rb | 5 ++ config/routes/extranet.rb | 10 ++-- ...6144230_create_education_academic_years.rb | 10 ++++ db/schema.rb | 22 ++++++++- docs/benchmark.md | 29 ----------- .../academic_years_controller_test.rb | 48 +++++++++++++++++++ test/fixtures/communication/websites.yml | 2 +- test/fixtures/education/academic_years.yml | 26 ++++++++++ test/models/education/academic_year_test.rb | 25 ++++++++++ test/system/education/academic_years_test.rb | 45 +++++++++++++++++ 25 files changed, 315 insertions(+), 43 deletions(-) create mode 100644 app/controllers/extranet/academic_years_controller.rb rename app/controllers/{university => extranet}/organizations_controller.rb (81%) create mode 100644 app/models/education/academic_year.rb create mode 100644 app/models/university/person/alumnus.rb create mode 100644 app/views/extranet/academic_years/index.html.erb create mode 100644 app/views/extranet/academic_years/show.html.erb rename app/views/{university => extranet}/organizations/index.html.erb (100%) rename app/views/{university => extranet}/organizations/show.html.erb (56%) create mode 100644 db/migrate/20220316144230_create_education_academic_years.rb delete mode 100644 docs/benchmark.md create mode 100644 test/controllers/education/academic_years_controller_test.rb create mode 100644 test/fixtures/education/academic_years.yml create mode 100644 test/models/education/academic_year_test.rb create mode 100644 test/system/education/academic_years_test.rb diff --git a/app/controllers/extranet/academic_years_controller.rb b/app/controllers/extranet/academic_years_controller.rb new file mode 100644 index 000000000..c1d759ee0 --- /dev/null +++ b/app/controllers/extranet/academic_years_controller.rb @@ -0,0 +1,12 @@ +class Extranet::AcademicYearsController < ApplicationController + load_and_authorize_resource class: Education::AcademicYear, + through: :current_university, + through_association: :academic_years + + def index + @academic_years = @academic_years.ordered.page(params[:page]) + end + + def show + end +end diff --git a/app/controllers/university/organizations_controller.rb b/app/controllers/extranet/organizations_controller.rb similarity index 81% rename from app/controllers/university/organizations_controller.rb rename to app/controllers/extranet/organizations_controller.rb index f33404189..33633e234 100644 --- a/app/controllers/university/organizations_controller.rb +++ b/app/controllers/extranet/organizations_controller.rb @@ -1,4 +1,4 @@ -class University::OrganizationsController < ApplicationController +class Extranet::OrganizationsController < ApplicationController load_and_authorize_resource class: University::Organization, through: :current_university, through_association: :organizations diff --git a/app/models/administration/qualiopi/indicator.rb b/app/models/administration/qualiopi/indicator.rb index 300286f22..6e06a0273 100644 --- a/app/models/administration/qualiopi/indicator.rb +++ b/app/models/administration/qualiopi/indicator.rb @@ -20,7 +20,7 @@ # # Foreign Keys # -# fk_rails_31f1a0a2c9 (criterion_id => administration_qualiopi_criterions.id) +# fk_rails_eed87f7acf (criterion_id => administration_qualiopi_criterions.id) # class Administration::Qualiopi::Indicator < ApplicationRecord include Sanitizable diff --git a/app/models/communication/website.rb b/app/models/communication/website.rb index 5d96aa34c..f23530348 100644 --- a/app/models/communication/website.rb +++ b/app/models/communication/website.rb @@ -22,7 +22,7 @@ # # Foreign Keys # -# fk_rails_94b0abd85b (university_id => universities.id) +# fk_rails_bb6a496c08 (university_id => universities.id) # class Communication::Website < ApplicationRecord include WithUniversity diff --git a/app/models/communication/website/configs/base_url.rb b/app/models/communication/website/configs/base_url.rb index a71222014..a2510c716 100644 --- a/app/models/communication/website/configs/base_url.rb +++ b/app/models/communication/website/configs/base_url.rb @@ -22,7 +22,7 @@ # # Foreign Keys # -# fk_rails_94b0abd85b (university_id => universities.id) +# fk_rails_bb6a496c08 (university_id => universities.id) # class Communication::Website::Configs::BaseUrl < Communication::Website diff --git a/app/models/communication/website/configs/permalinks.rb b/app/models/communication/website/configs/permalinks.rb index 387417dae..04a9cc323 100644 --- a/app/models/communication/website/configs/permalinks.rb +++ b/app/models/communication/website/configs/permalinks.rb @@ -22,7 +22,7 @@ # # Foreign Keys # -# fk_rails_94b0abd85b (university_id => universities.id) +# fk_rails_bb6a496c08 (university_id => universities.id) # class Communication::Website::Configs::Permalinks < Communication::Website diff --git a/app/models/education/academic_year.rb b/app/models/education/academic_year.rb new file mode 100644 index 000000000..efbe632f9 --- /dev/null +++ b/app/models/education/academic_year.rb @@ -0,0 +1,27 @@ +# == Schema Information +# +# Table name: education_academic_years +# +# id :uuid not null, primary key +# year :integer +# created_at :datetime not null +# updated_at :datetime not null +# university_id :uuid not null, indexed +# +# Indexes +# +# index_education_academic_years_on_university_id (university_id) +# +# Foreign Keys +# +# fk_rails_7d376afe35 (university_id => universities.id) +# +class Education::AcademicYear < ApplicationRecord + include WithUniversity + + scope :ordered, -> { order(year: :desc) } + + def to_s + "#{year}" + end +end diff --git a/app/models/education/program.rb b/app/models/education/program.rb index a88582d9d..360d5ba5f 100644 --- a/app/models/education/program.rb +++ b/app/models/education/program.rb @@ -39,7 +39,7 @@ # # Foreign Keys # -# fk_rails_6e16107511 (university_id => universities.id) +# fk_rails_08b351087c (university_id => universities.id) # fk_rails_ec1f16f607 (parent_id => education_programs.id) # class Education::Program < ApplicationRecord diff --git a/app/models/university/person/alumnus.rb b/app/models/university/person/alumnus.rb new file mode 100644 index 000000000..242788896 --- /dev/null +++ b/app/models/university/person/alumnus.rb @@ -0,0 +1,48 @@ +# == Schema Information +# +# Table name: university_people +# +# id :uuid not null, primary key +# biography :text +# description :text +# email :string +# first_name :string +# habilitation :boolean default(FALSE) +# is_administration :boolean +# is_researcher :boolean +# is_teacher :boolean +# last_name :string +# linkedin :string +# phone :string +# slug :string +# tenure :boolean default(FALSE) +# twitter :string +# url :string +# created_at :datetime not null +# updated_at :datetime not null +# university_id :uuid not null, indexed +# user_id :uuid indexed +# +# Indexes +# +# index_university_people_on_university_id (university_id) +# index_university_people_on_user_id (user_id) +# +# Foreign Keys +# +# fk_rails_b47a769440 (user_id => users.id) +# fk_rails_da35e70d61 (university_id => universities.id) +# +class University::Person::Alumnus < University::Person + def self.polymorphic_name + 'University::Person::Alumnus' + end + + def git_path(website) + # TODO + end + + def for_website?(website) + # TODO + end +end diff --git a/app/models/university/with_education.rb b/app/models/university/with_education.rb index 5acddc90f..c7448f3d3 100644 --- a/app/models/university/with_education.rb +++ b/app/models/university/with_education.rb @@ -4,5 +4,6 @@ module University::WithEducation included do has_many :education_programs, class_name: 'Education::Program', dependent: :destroy has_many :education_schools, class_name: 'Education::School', dependent: :destroy + has_many :academic_years, class_name: 'Education::AcademicYear', dependent: :destroy end end diff --git a/app/views/extranet/academic_years/index.html.erb b/app/views/extranet/academic_years/index.html.erb new file mode 100644 index 000000000..6bb47711d --- /dev/null +++ b/app/views/extranet/academic_years/index.html.erb @@ -0,0 +1,19 @@ +<% content_for :title, Education::AcademicYear.model_name.human(count: 2) %> + +<table class="<%= table_classes %>"> + <thead> + <tr> + <th>Year</th> + <th></th> + </tr> + </thead> + + <tbody> + <% @academic_years.each do |year| %> + <tr> + <td><%= year.year %></td> + <td></td> + </tr> + <% end %> + </tbody> +</table> diff --git a/app/views/extranet/academic_years/show.html.erb b/app/views/extranet/academic_years/show.html.erb new file mode 100644 index 000000000..4c9b91dbf --- /dev/null +++ b/app/views/extranet/academic_years/show.html.erb @@ -0,0 +1,14 @@ +<p id="notice"><%= notice %></p> + +<p> + <strong>University:</strong> + <%= @education_academic_year.university_id %> +</p> + +<p> + <strong>Year:</strong> + <%= @education_academic_year.year %> +</p> + +<%= link_to 'Edit', edit_education_academic_year_path(@education_academic_year) %> | +<%= link_to 'Back', education_academic_years_path %> diff --git a/app/views/university/organizations/index.html.erb b/app/views/extranet/organizations/index.html.erb similarity index 100% rename from app/views/university/organizations/index.html.erb rename to app/views/extranet/organizations/index.html.erb diff --git a/app/views/university/organizations/show.html.erb b/app/views/extranet/organizations/show.html.erb similarity index 56% rename from app/views/university/organizations/show.html.erb rename to app/views/extranet/organizations/show.html.erb index 1a8858a81..39b24130f 100644 --- a/app/views/university/organizations/show.html.erb +++ b/app/views/extranet/organizations/show.html.erb @@ -1 +1,3 @@ <% content_for :title, @organization %> + +<h1><%= @organization %></h1> diff --git a/config/routes.rb b/config/routes.rb index 7bf2ee0b0..45bd12e82 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,4 +1,5 @@ Rails.application.routes.draw do + resources :university_person_alumnus_imports authenticated :user, -> user { user.server_admin? } do match "/delayed_job" => DelayedJobWeb, :anchor => false, :via => [:get, :post] end diff --git a/config/routes/admin/communication.rb b/config/routes/admin/communication.rb index 7b07d35b5..8b65d9c85 100644 --- a/config/routes/admin/communication.rb +++ b/config/routes/admin/communication.rb @@ -57,4 +57,9 @@ namespace :communication do end end resources :extranets, controller: 'extranets' + resources :alumni do + collection do + resources :imports, only: [:index, :show, :new, :create] + end + end end diff --git a/config/routes/extranet.rb b/config/routes/extranet.rb index 186b49d38..e23246ed5 100644 --- a/config/routes/extranet.rb +++ b/config/routes/extranet.rb @@ -1,6 +1,4 @@ -namespace :university do - resources :organizations, only: [:index, :show] -end - -get 'organizations' => 'university/organizations#index', as: :organizations -get 'organization/:id' => 'university/organizations#show', as: :organization +get 'organizations' => 'extranet/organizations#index', as: :organizations +get 'organization/:id' => 'extranet/organizations#show', as: :university_organization +get 'years' => 'extranet/academic_years#index', as: :academic_years +get 'years/:id' => 'extranet/academic_years#show', as: :academic_year diff --git a/db/migrate/20220316144230_create_education_academic_years.rb b/db/migrate/20220316144230_create_education_academic_years.rb new file mode 100644 index 000000000..25b594c36 --- /dev/null +++ b/db/migrate/20220316144230_create_education_academic_years.rb @@ -0,0 +1,10 @@ +class CreateEducationAcademicYears < ActiveRecord::Migration[6.1] + def change + create_table :education_academic_years, id: :uuid do |t| + t.references :university, null: false, foreign_key: true, type: :uuid + t.integer :year + + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb index e30fc9ba9..67016a4c7 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: 2022_03_08_114213) do +ActiveRecord::Schema.define(version: 2022_03_16_151533) do # These are extensions that must be enabled in order to support this database enable_extension "pgcrypto" @@ -384,6 +384,14 @@ ActiveRecord::Schema.define(version: 2022_03_08_114213) do t.index ["priority", "run_at"], name: "delayed_jobs_priority" end + create_table "education_academic_years", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + t.uuid "university_id", null: false + t.integer "year" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.index ["university_id"], name: "index_education_academic_years_on_university_id" + end + create_table "education_programs", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.uuid "university_id", null: false t.string "name" @@ -642,6 +650,15 @@ ActiveRecord::Schema.define(version: 2022_03_08_114213) do t.index ["user_id"], name: "index_university_people_on_user_id" end + create_table "university_person_alumnus_imports", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + t.uuid "university_id", null: false + t.uuid "user_id", null: false + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.index ["university_id"], name: "index_university_person_alumnus_imports_on_university_id" + t.index ["user_id"], name: "index_university_person_alumnus_imports_on_user_id" + end + create_table "university_person_involvements", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.uuid "university_id", null: false t.uuid "person_id", null: false @@ -756,6 +773,7 @@ ActiveRecord::Schema.define(version: 2022_03_08_114213) do add_foreign_key "communication_website_posts", "universities" add_foreign_key "communication_website_posts", "university_people", column: "author_id" add_foreign_key "communication_websites", "universities" + add_foreign_key "education_academic_years", "universities" add_foreign_key "education_programs", "education_programs", column: "parent_id" add_foreign_key "education_programs", "universities" add_foreign_key "education_schools", "universities" @@ -780,6 +798,8 @@ ActiveRecord::Schema.define(version: 2022_03_08_114213) do add_foreign_key "university_organizations", "universities" add_foreign_key "university_people", "universities" add_foreign_key "university_people", "users" + add_foreign_key "university_person_alumnus_imports", "universities" + add_foreign_key "university_person_alumnus_imports", "users" add_foreign_key "university_person_involvements", "universities" add_foreign_key "university_person_involvements", "university_people", column: "person_id" add_foreign_key "university_roles", "universities" diff --git a/docs/benchmark.md b/docs/benchmark.md deleted file mode 100644 index 94e442e84..000000000 --- a/docs/benchmark.md +++ /dev/null @@ -1,29 +0,0 @@ -# Benchmark - -## Ecoles - -### Excellent websites - -- https://www.harvard.edu/ -- https://www.mit.edu/ - -### Other websites - -- https://www.stanford.edu/ -- https://www.brown.edu/ -- https://www.columbia.edu/ -- https://home.dartmouth.edu/ -- https://www.upenn.edu/ -- https://www.princeton.edu/ -- https://www.yale.edu/ -- https://www.ox.ac.uk/ -- https://www.cam.ac.uk/ -- https://www.caltech.edu/ -- https://www.imperial.ac.uk/ -- https://ethz.ch/ -- https://www.ucl.ac.uk/ -- https://psl.eu/ -- https://www.ip-paris.fr/ -- https://www.sorbonne-universite.fr/ -- https://www.hec.edu/fr -- https://www.essec.edu/fr/ diff --git a/test/controllers/education/academic_years_controller_test.rb b/test/controllers/education/academic_years_controller_test.rb new file mode 100644 index 000000000..3e5bf7bdc --- /dev/null +++ b/test/controllers/education/academic_years_controller_test.rb @@ -0,0 +1,48 @@ +require "test_helper" + +class Education::AcademicYearsControllerTest < ActionDispatch::IntegrationTest + setup do + @education_academic_year = education_academic_years(:one) + end + + test "should get index" do + get education_academic_years_url + assert_response :success + end + + test "should get new" do + get new_education_academic_year_url + assert_response :success + end + + test "should create education_academic_year" do + assert_difference('Education::AcademicYear.count') do + post education_academic_years_url, params: { education_academic_year: { university_id: @education_academic_year.university_id, year: @education_academic_year.year } } + end + + assert_redirected_to education_academic_year_url(Education::AcademicYear.last) + end + + test "should show education_academic_year" do + get education_academic_year_url(@education_academic_year) + assert_response :success + end + + test "should get edit" do + get edit_education_academic_year_url(@education_academic_year) + assert_response :success + end + + test "should update education_academic_year" do + patch education_academic_year_url(@education_academic_year), params: { education_academic_year: { university_id: @education_academic_year.university_id, year: @education_academic_year.year } } + assert_redirected_to education_academic_year_url(@education_academic_year) + end + + test "should destroy education_academic_year" do + assert_difference('Education::AcademicYear.count', -1) do + delete education_academic_year_url(@education_academic_year) + end + + assert_redirected_to education_academic_years_url + end +end diff --git a/test/fixtures/communication/websites.yml b/test/fixtures/communication/websites.yml index 44c31f2ca..aea91b89a 100644 --- a/test/fixtures/communication/websites.yml +++ b/test/fixtures/communication/websites.yml @@ -22,7 +22,7 @@ # # Foreign Keys # -# fk_rails_94b0abd85b (university_id => universities.id) +# fk_rails_bb6a496c08 (university_id => universities.id) # website_with_github: university: default_university diff --git a/test/fixtures/education/academic_years.yml b/test/fixtures/education/academic_years.yml new file mode 100644 index 000000000..2a7ea54e6 --- /dev/null +++ b/test/fixtures/education/academic_years.yml @@ -0,0 +1,26 @@ +# == Schema Information +# +# Table name: education_academic_years +# +# id :uuid not null, primary key +# year :integer +# created_at :datetime not null +# updated_at :datetime not null +# university_id :uuid not null, indexed +# +# Indexes +# +# index_education_academic_years_on_university_id (university_id) +# +# Foreign Keys +# +# fk_rails_7d376afe35 (university_id => universities.id) +# + +one: + university: one + year: 1 + +two: + university: two + year: 1 diff --git a/test/models/education/academic_year_test.rb b/test/models/education/academic_year_test.rb new file mode 100644 index 000000000..f5535a748 --- /dev/null +++ b/test/models/education/academic_year_test.rb @@ -0,0 +1,25 @@ +# == Schema Information +# +# Table name: education_academic_years +# +# id :uuid not null, primary key +# year :integer +# created_at :datetime not null +# updated_at :datetime not null +# university_id :uuid not null, indexed +# +# Indexes +# +# index_education_academic_years_on_university_id (university_id) +# +# Foreign Keys +# +# fk_rails_7d376afe35 (university_id => universities.id) +# +require "test_helper" + +class Education::AcademicYearTest < ActiveSupport::TestCase + # test "the truth" do + # assert true + # end +end diff --git a/test/system/education/academic_years_test.rb b/test/system/education/academic_years_test.rb new file mode 100644 index 000000000..68b9d54ab --- /dev/null +++ b/test/system/education/academic_years_test.rb @@ -0,0 +1,45 @@ +require "application_system_test_case" + +class Education::AcademicYearsTest < ApplicationSystemTestCase + setup do + @education_academic_year = education_academic_years(:one) + end + + test "visiting the index" do + visit education_academic_years_url + assert_selector "h1", text: "Education/Academic Years" + end + + test "creating a Academic year" do + visit education_academic_years_url + click_on "New Education/Academic Year" + + fill_in "University", with: @education_academic_year.university_id + fill_in "Year", with: @education_academic_year.year + click_on "Create Academic year" + + assert_text "Academic year was successfully created" + click_on "Back" + end + + test "updating a Academic year" do + visit education_academic_years_url + click_on "Edit", match: :first + + fill_in "University", with: @education_academic_year.university_id + fill_in "Year", with: @education_academic_year.year + click_on "Update Academic year" + + assert_text "Academic year was successfully updated" + click_on "Back" + end + + test "destroying a Academic year" do + visit education_academic_years_url + page.accept_confirm do + click_on "Destroy", match: :first + end + + assert_text "Academic year was successfully destroyed" + end +end -- GitLab