From 6b85c7d639b96b73bb813ba48d19d45d4c484701 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Gaya?= <sebastien.gaya@gmail.com>
Date: Fri, 16 Dec 2022 16:34:23 +0100
Subject: [PATCH] website can have a default lang

---
 .../communication/websites_controller.rb      |  2 +-
 app/models/communication/website.rb           | 42 +++++----
 .../website/configs/default_languages.rb      | 41 +++++----
 .../website/configs/default_permalinks.rb     | 41 +++++----
 .../website/configs/development_config.rb     | 41 +++++----
 .../website/configs/production_config.rb      | 41 +++++----
 .../communication/websites/_form.html.erb     |  1 +
 config/locales/communication/en.yml           |  4 +
 config/locales/communication/fr.yml           |  6 +-
 ...ault_language_to_communication_websites.rb | 14 +++
 db/schema.rb                                  | 89 ++++++++++---------
 test/fixtures/communication/websites.yml      | 41 +++++----
 12 files changed, 204 insertions(+), 159 deletions(-)
 create mode 100644 db/migrate/20221216152525_add_default_language_to_communication_websites.rb

diff --git a/app/controllers/admin/communication/websites_controller.rb b/app/controllers/admin/communication/websites_controller.rb
index 731546ff8..ffdff0776 100644
--- a/app/controllers/admin/communication/websites_controller.rb
+++ b/app/controllers/admin/communication/websites_controller.rb
@@ -82,7 +82,7 @@ class Admin::Communication::WebsitesController < Admin::Communication::Applicati
   def website_params
     params.require(:communication_website).permit(
       :name, :url, :repository, :access_token, :about_type, :about_id, :in_production,
-      :git_provider, :git_endpoint, :git_branch, :plausible_url, language_ids: []
+      :git_provider, :git_endpoint, :git_branch, :plausible_url, :default_language_id, language_ids: []
     )
   end
 end
diff --git a/app/models/communication/website.rb b/app/models/communication/website.rb
index 30298135c..6139d6a52 100644
--- a/app/models/communication/website.rb
+++ b/app/models/communication/website.rb
@@ -2,31 +2,34 @@
 #
 # Table name: communication_websites
 #
-#  id               :uuid             not null, primary key
-#  about_type       :string           indexed => [about_id]
-#  access_token     :string
-#  git_branch       :string
-#  git_endpoint     :string
-#  git_provider     :integer          default("github")
-#  in_production    :boolean          default(FALSE)
-#  name             :string
-#  plausible_url    :string
-#  repository       :string
-#  style            :text
-#  style_updated_at :date
-#  url              :string
-#  created_at       :datetime         not null
-#  updated_at       :datetime         not null
-#  about_id         :uuid             indexed => [about_type]
-#  university_id    :uuid             not null, indexed
+#  id                  :uuid             not null, primary key
+#  about_type          :string           indexed => [about_id]
+#  access_token        :string
+#  git_branch          :string
+#  git_endpoint        :string
+#  git_provider        :integer          default("github")
+#  in_production       :boolean          default(FALSE)
+#  name                :string
+#  plausible_url       :string
+#  repository          :string
+#  style               :text
+#  style_updated_at    :date
+#  url                 :string
+#  created_at          :datetime         not null
+#  updated_at          :datetime         not null
+#  about_id            :uuid             indexed => [about_type]
+#  default_language_id :uuid             indexed
+#  university_id       :uuid             not null, indexed
 #
 # Indexes
 #
-#  index_communication_websites_on_about          (about_type,about_id)
-#  index_communication_websites_on_university_id  (university_id)
+#  index_communication_websites_on_about                (about_type,about_id)
+#  index_communication_websites_on_default_language_id  (default_language_id)
+#  index_communication_websites_on_university_id        (university_id)
 #
 # Foreign Keys
 #
+#  fk_rails_2b6d929310  (default_language_id => languages.id)
 #  fk_rails_bb6a496c08  (university_id => universities.id)
 #
 class Communication::Website < ApplicationRecord
@@ -49,6 +52,7 @@ class Communication::Website < ApplicationRecord
     gitlab: 1
   }
 
+  belongs_to :default_language, class_name: "Language", optional: true
   has_and_belongs_to_many :languages,
                           class_name: 'Language',
                           join_table: 'communication_websites_languages',
diff --git a/app/models/communication/website/configs/default_languages.rb b/app/models/communication/website/configs/default_languages.rb
index 56f6c9865..d3d276779 100644
--- a/app/models/communication/website/configs/default_languages.rb
+++ b/app/models/communication/website/configs/default_languages.rb
@@ -2,31 +2,34 @@
 #
 # Table name: communication_websites
 #
-#  id               :uuid             not null, primary key
-#  about_type       :string           indexed => [about_id]
-#  access_token     :string
-#  git_branch       :string
-#  git_endpoint     :string
-#  git_provider     :integer          default("github")
-#  in_production    :boolean          default(FALSE)
-#  name             :string
-#  plausible_url    :string
-#  repository       :string
-#  style            :text
-#  style_updated_at :date
-#  url              :string
-#  created_at       :datetime         not null
-#  updated_at       :datetime         not null
-#  about_id         :uuid             indexed => [about_type]
-#  university_id    :uuid             not null, indexed
+#  id                  :uuid             not null, primary key
+#  about_type          :string           indexed => [about_id]
+#  access_token        :string
+#  git_branch          :string
+#  git_endpoint        :string
+#  git_provider        :integer          default("github")
+#  in_production       :boolean          default(FALSE)
+#  name                :string
+#  plausible_url       :string
+#  repository          :string
+#  style               :text
+#  style_updated_at    :date
+#  url                 :string
+#  created_at          :datetime         not null
+#  updated_at          :datetime         not null
+#  about_id            :uuid             indexed => [about_type]
+#  default_language_id :uuid             indexed
+#  university_id       :uuid             not null, indexed
 #
 # Indexes
 #
-#  index_communication_websites_on_about          (about_type,about_id)
-#  index_communication_websites_on_university_id  (university_id)
+#  index_communication_websites_on_about                (about_type,about_id)
+#  index_communication_websites_on_default_language_id  (default_language_id)
+#  index_communication_websites_on_university_id        (university_id)
 #
 # Foreign Keys
 #
+#  fk_rails_2b6d929310  (default_language_id => languages.id)
 #  fk_rails_bb6a496c08  (university_id => universities.id)
 #
 class Communication::Website::Configs::DefaultLanguages < Communication::Website
diff --git a/app/models/communication/website/configs/default_permalinks.rb b/app/models/communication/website/configs/default_permalinks.rb
index b028dd2b6..842de1d49 100644
--- a/app/models/communication/website/configs/default_permalinks.rb
+++ b/app/models/communication/website/configs/default_permalinks.rb
@@ -2,31 +2,34 @@
 #
 # Table name: communication_websites
 #
-#  id               :uuid             not null, primary key
-#  about_type       :string           indexed => [about_id]
-#  access_token     :string
-#  git_branch       :string
-#  git_endpoint     :string
-#  git_provider     :integer          default("github")
-#  in_production    :boolean          default(FALSE)
-#  name             :string
-#  plausible_url    :string
-#  repository       :string
-#  style            :text
-#  style_updated_at :date
-#  url              :string
-#  created_at       :datetime         not null
-#  updated_at       :datetime         not null
-#  about_id         :uuid             indexed => [about_type]
-#  university_id    :uuid             not null, indexed
+#  id                  :uuid             not null, primary key
+#  about_type          :string           indexed => [about_id]
+#  access_token        :string
+#  git_branch          :string
+#  git_endpoint        :string
+#  git_provider        :integer          default("github")
+#  in_production       :boolean          default(FALSE)
+#  name                :string
+#  plausible_url       :string
+#  repository          :string
+#  style               :text
+#  style_updated_at    :date
+#  url                 :string
+#  created_at          :datetime         not null
+#  updated_at          :datetime         not null
+#  about_id            :uuid             indexed => [about_type]
+#  default_language_id :uuid             indexed
+#  university_id       :uuid             not null, indexed
 #
 # Indexes
 #
-#  index_communication_websites_on_about          (about_type,about_id)
-#  index_communication_websites_on_university_id  (university_id)
+#  index_communication_websites_on_about                (about_type,about_id)
+#  index_communication_websites_on_default_language_id  (default_language_id)
+#  index_communication_websites_on_university_id        (university_id)
 #
 # Foreign Keys
 #
+#  fk_rails_2b6d929310  (default_language_id => languages.id)
 #  fk_rails_bb6a496c08  (university_id => universities.id)
 #
 class Communication::Website::Configs::DefaultPermalinks < Communication::Website
diff --git a/app/models/communication/website/configs/development_config.rb b/app/models/communication/website/configs/development_config.rb
index 5d5d9a8cb..3d9d48815 100644
--- a/app/models/communication/website/configs/development_config.rb
+++ b/app/models/communication/website/configs/development_config.rb
@@ -2,31 +2,34 @@
 #
 # Table name: communication_websites
 #
-#  id               :uuid             not null, primary key
-#  about_type       :string           indexed => [about_id]
-#  access_token     :string
-#  git_branch       :string
-#  git_endpoint     :string
-#  git_provider     :integer          default("github")
-#  in_production    :boolean          default(FALSE)
-#  name             :string
-#  plausible_url    :string
-#  repository       :string
-#  style            :text
-#  style_updated_at :date
-#  url              :string
-#  created_at       :datetime         not null
-#  updated_at       :datetime         not null
-#  about_id         :uuid             indexed => [about_type]
-#  university_id    :uuid             not null, indexed
+#  id                  :uuid             not null, primary key
+#  about_type          :string           indexed => [about_id]
+#  access_token        :string
+#  git_branch          :string
+#  git_endpoint        :string
+#  git_provider        :integer          default("github")
+#  in_production       :boolean          default(FALSE)
+#  name                :string
+#  plausible_url       :string
+#  repository          :string
+#  style               :text
+#  style_updated_at    :date
+#  url                 :string
+#  created_at          :datetime         not null
+#  updated_at          :datetime         not null
+#  about_id            :uuid             indexed => [about_type]
+#  default_language_id :uuid             indexed
+#  university_id       :uuid             not null, indexed
 #
 # Indexes
 #
-#  index_communication_websites_on_about          (about_type,about_id)
-#  index_communication_websites_on_university_id  (university_id)
+#  index_communication_websites_on_about                (about_type,about_id)
+#  index_communication_websites_on_default_language_id  (default_language_id)
+#  index_communication_websites_on_university_id        (university_id)
 #
 # Foreign Keys
 #
+#  fk_rails_2b6d929310  (default_language_id => languages.id)
 #  fk_rails_bb6a496c08  (university_id => universities.id)
 #
 class Communication::Website::Configs::DevelopmentConfig < Communication::Website
diff --git a/app/models/communication/website/configs/production_config.rb b/app/models/communication/website/configs/production_config.rb
index b5aff1621..f16360bd6 100644
--- a/app/models/communication/website/configs/production_config.rb
+++ b/app/models/communication/website/configs/production_config.rb
@@ -2,31 +2,34 @@
 #
 # Table name: communication_websites
 #
-#  id               :uuid             not null, primary key
-#  about_type       :string           indexed => [about_id]
-#  access_token     :string
-#  git_branch       :string
-#  git_endpoint     :string
-#  git_provider     :integer          default("github")
-#  in_production    :boolean          default(FALSE)
-#  name             :string
-#  plausible_url    :string
-#  repository       :string
-#  style            :text
-#  style_updated_at :date
-#  url              :string
-#  created_at       :datetime         not null
-#  updated_at       :datetime         not null
-#  about_id         :uuid             indexed => [about_type]
-#  university_id    :uuid             not null, indexed
+#  id                  :uuid             not null, primary key
+#  about_type          :string           indexed => [about_id]
+#  access_token        :string
+#  git_branch          :string
+#  git_endpoint        :string
+#  git_provider        :integer          default("github")
+#  in_production       :boolean          default(FALSE)
+#  name                :string
+#  plausible_url       :string
+#  repository          :string
+#  style               :text
+#  style_updated_at    :date
+#  url                 :string
+#  created_at          :datetime         not null
+#  updated_at          :datetime         not null
+#  about_id            :uuid             indexed => [about_type]
+#  default_language_id :uuid             indexed
+#  university_id       :uuid             not null, indexed
 #
 # Indexes
 #
-#  index_communication_websites_on_about          (about_type,about_id)
-#  index_communication_websites_on_university_id  (university_id)
+#  index_communication_websites_on_about                (about_type,about_id)
+#  index_communication_websites_on_default_language_id  (default_language_id)
+#  index_communication_websites_on_university_id        (university_id)
 #
 # Foreign Keys
 #
+#  fk_rails_2b6d929310  (default_language_id => languages.id)
 #  fk_rails_bb6a496c08  (university_id => universities.id)
 #
 class Communication::Website::Configs::ProductionConfig < Communication::Website
diff --git a/app/views/admin/communication/websites/_form.html.erb b/app/views/admin/communication/websites/_form.html.erb
index 64f4e9484..30a3dcc40 100644
--- a/app/views/admin/communication/websites/_form.html.erb
+++ b/app/views/admin/communication/websites/_form.html.erb
@@ -13,6 +13,7 @@
           <%= f.input :url %>
           <%= render 'admin/communication/abouts', f: f, i18n_key: 'activerecord.attributes.communication/website.about_' %>
           <%= f.association :languages, as: :check_boxes %>
+          <%= f.association :default_language %>
           <%= f.input :in_production %>
         </div>
       </div>
diff --git a/config/locales/communication/en.yml b/config/locales/communication/en.yml
index f6742bb36..571724324 100644
--- a/config/locales/communication/en.yml
+++ b/config/locales/communication/en.yml
@@ -73,6 +73,7 @@ en:
         about_Research::Laboratory: Laboratory website
         about_type: About
         access_token: Access token
+        default_language: Default language
         git_branch: Git branch
         git_endpoint: Git endpoint
         git_provider: Git provider
@@ -697,3 +698,6 @@ en:
         full_width: On large screens, a full width page uses all available space for the content. This is good for landing pages, or to make them spectacular. If the page is not full width, the content column will be smaller to make reading easier. The unused space might be used for a table of contents.
       communication_website_post:
         description: If this field is empty, the "lead text" field will be used. If also emty the main text's begining will be used.
+  include_blanks:
+      communication_website:
+        default_language: "Select a language"
\ No newline at end of file
diff --git a/config/locales/communication/fr.yml b/config/locales/communication/fr.yml
index 6af324365..2e98a1652 100644
--- a/config/locales/communication/fr.yml
+++ b/config/locales/communication/fr.yml
@@ -73,6 +73,7 @@ fr:
         about_Research::Laboratory: Site de laboratoire
         about_type: Type de site
         access_token: Access token
+        default_language: Langue par défaut
         git_branch: Branche
         git_endpoint: Point d'accès Git
         git_provider: Provider Git
@@ -438,7 +439,7 @@ fr:
                 description: Une grille avec toutes les images à la même taille.
               list:
                 label: Liste
-                description: Une liste d'articles avec de petites images à la même largeur. 
+                description: Une liste d'articles avec de petites images à la même largeur.
             edit:
               add_post: Ajouter un article
               mode:
@@ -697,3 +698,6 @@ fr:
         full_width: Sur de grands écrans, la page en pleine largeur utilisera tout l'espace disponible, ce qui est pertinent pour événementialiser une page. Si la page n'est pas en pleine largeur, l'espace dédié au contenu sera réduit pour faciliter la lecture, et l'espace libre pourra être utilisé pour une table des matières facilitant la navigation.
       communication_website_post:
         description: Si ce champ est vide le "chapô" sera utilisé. Si il est également vide le début du texte principal sera utilisé.
+  include_blanks:
+    communication_website:
+      default_language: "Sélectionnez une langue"
\ No newline at end of file
diff --git a/db/migrate/20221216152525_add_default_language_to_communication_websites.rb b/db/migrate/20221216152525_add_default_language_to_communication_websites.rb
new file mode 100644
index 000000000..7ce384483
--- /dev/null
+++ b/db/migrate/20221216152525_add_default_language_to_communication_websites.rb
@@ -0,0 +1,14 @@
+class AddDefaultLanguageToCommunicationWebsites < ActiveRecord::Migration[7.0]
+  def up
+    add_reference :communication_websites, :default_language, null: true, foreign_key: { to_table: :languages }, type: :uuid
+
+    Communication::Website.find_each do |website|
+      next if website.languages.none?
+      website.update_column :default_language_id, website.languages.first.id
+    end
+  end
+
+  def down
+    remove_reference :communication_websites, :default_language
+  end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 3b9e215a0..13d83e590 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,13 +10,13 @@
 #
 # It's strongly recommended that you check this file into your version control system.
 
-ActiveRecord::Schema[7.0].define(version: 2022_12_12_165617) do
+ActiveRecord::Schema[7.0].define(version: 2022_12_16_152525) do
   # These are extensions that must be enabled in order to support this database
   enable_extension "pgcrypto"
   enable_extension "plpgsql"
   enable_extension "unaccent"
 
-  create_table "action_text_rich_texts", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+  create_table "action_text_rich_texts", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
     t.string "name", null: false
     t.text "body"
     t.string "record_type", null: false
@@ -26,7 +26,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_12_165617) do
     t.index ["record_type", "record_id", "name"], name: "index_action_text_rich_texts_uniqueness", unique: true
   end
 
-  create_table "active_storage_attachments", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+  create_table "active_storage_attachments", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
     t.string "name", null: false
     t.string "record_type", null: false
     t.uuid "record_id", null: false
@@ -36,7 +36,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_12_165617) do
     t.index ["record_type", "record_id", "name", "blob_id"], name: "index_active_storage_attachments_uniqueness", unique: true
   end
 
-  create_table "active_storage_blobs", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+  create_table "active_storage_blobs", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
     t.string "key", null: false
     t.string "filename", null: false
     t.string "content_type"
@@ -50,13 +50,13 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_12_165617) do
     t.index ["university_id"], name: "index_active_storage_blobs_on_university_id"
   end
 
-  create_table "active_storage_variant_records", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+  create_table "active_storage_variant_records", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
     t.uuid "blob_id", null: false
     t.string "variation_digest", null: false
     t.index ["blob_id", "variation_digest"], name: "index_active_storage_variant_records_uniqueness", unique: true
   end
 
-  create_table "administration_qualiopi_criterions", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+  create_table "administration_qualiopi_criterions", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
     t.integer "number"
     t.text "name"
     t.text "description"
@@ -64,7 +64,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_12_165617) do
     t.datetime "updated_at", null: false
   end
 
-  create_table "administration_qualiopi_indicators", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+  create_table "administration_qualiopi_indicators", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
     t.uuid "criterion_id", null: false
     t.integer "number"
     t.text "name"
@@ -78,7 +78,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_12_165617) do
     t.index ["criterion_id"], name: "index_administration_qualiopi_indicators_on_criterion_id"
   end
 
-  create_table "communication_blocks", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+  create_table "communication_blocks", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
     t.uuid "university_id", null: false
     t.string "about_type"
     t.uuid "about_id"
@@ -93,7 +93,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_12_165617) do
     t.index ["university_id"], name: "index_communication_blocks_on_university_id"
   end
 
-  create_table "communication_extranets", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+  create_table "communication_extranets", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
     t.string "name"
     t.uuid "university_id", null: false
     t.string "host"
@@ -117,7 +117,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_12_165617) do
     t.index ["university_id"], name: "index_communication_extranets_on_university_id"
   end
 
-  create_table "communication_website_categories", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+  create_table "communication_website_categories", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
     t.uuid "university_id", null: false
     t.uuid "communication_website_id", null: false
     t.string "name"
@@ -147,7 +147,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_12_165617) do
     t.index ["communication_website_post_id", "communication_website_category_id"], name: "post_category"
   end
 
-  create_table "communication_website_git_files", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+  create_table "communication_website_git_files", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
     t.string "previous_path"
     t.string "about_type", null: false
     t.uuid "about_id", null: false
@@ -159,7 +159,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_12_165617) do
     t.index ["website_id"], name: "index_communication_website_git_files_on_website_id"
   end
 
-  create_table "communication_website_imported_authors", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+  create_table "communication_website_imported_authors", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
     t.uuid "university_id", null: false
     t.uuid "website_id", null: false
     t.uuid "author_id"
@@ -175,7 +175,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_12_165617) do
     t.index ["website_id"], name: "idx_communication_website_imported_auth_on_website"
   end
 
-  create_table "communication_website_imported_categories", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+  create_table "communication_website_imported_categories", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
     t.uuid "university_id", null: false
     t.uuid "website_id", null: false
     t.uuid "category_id"
@@ -193,7 +193,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_12_165617) do
     t.index ["website_id"], name: "idx_communication_website_imported_cat_on_website"
   end
 
-  create_table "communication_website_imported_media", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+  create_table "communication_website_imported_media", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
     t.string "identifier"
     t.jsonb "data"
     t.text "file_url"
@@ -208,7 +208,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_12_165617) do
     t.index ["website_id"], name: "index_communication_website_imported_media_on_website_id"
   end
 
-  create_table "communication_website_imported_pages", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+  create_table "communication_website_imported_pages", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
     t.uuid "university_id", null: false
     t.uuid "website_id", null: false
     t.uuid "page_id"
@@ -232,7 +232,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_12_165617) do
     t.index ["website_id"], name: "index_communication_website_imported_pages_on_website_id"
   end
 
-  create_table "communication_website_imported_posts", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+  create_table "communication_website_imported_posts", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
     t.uuid "university_id", null: false
     t.uuid "website_id", null: false
     t.uuid "post_id"
@@ -257,7 +257,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_12_165617) do
     t.index ["website_id"], name: "index_communication_website_imported_posts_on_website_id"
   end
 
-  create_table "communication_website_imported_websites", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+  create_table "communication_website_imported_websites", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
     t.uuid "university_id", null: false
     t.uuid "website_id", null: false
     t.integer "status", default: 0
@@ -267,7 +267,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_12_165617) do
     t.index ["website_id"], name: "index_communication_website_imported_websites_on_website_id"
   end
 
-  create_table "communication_website_menu_items", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+  create_table "communication_website_menu_items", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
     t.uuid "university_id", null: false
     t.uuid "website_id", null: false
     t.uuid "menu_id", null: false
@@ -287,7 +287,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_12_165617) do
     t.index ["website_id"], name: "index_communication_website_menu_items_on_website_id"
   end
 
-  create_table "communication_website_menus", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+  create_table "communication_website_menus", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
     t.uuid "university_id", null: false
     t.uuid "communication_website_id", null: false
     t.string "title"
@@ -299,7 +299,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_12_165617) do
     t.index ["university_id"], name: "index_communication_website_menus_on_university_id"
   end
 
-  create_table "communication_website_pages", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+  create_table "communication_website_pages", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
     t.uuid "university_id", null: false
     t.uuid "communication_website_id", null: false
     t.string "title"
@@ -314,10 +314,10 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_12_165617) do
     t.text "github_path"
     t.string "featured_image_alt"
     t.text "text"
+    t.text "description_short"
     t.string "breadcrumb_title"
     t.text "header_text"
     t.integer "kind"
-    t.text "description_short"
     t.string "bodyclass"
     t.uuid "language_id"
     t.text "featured_image_credit"
@@ -341,7 +341,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_12_165617) do
     t.index ["website_id"], name: "index_communication_website_permalinks_on_website_id"
   end
 
-  create_table "communication_website_posts", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+  create_table "communication_website_posts", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
     t.uuid "university_id", null: false
     t.uuid "communication_website_id", null: false
     t.string "title"
@@ -365,7 +365,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_12_165617) do
     t.index ["university_id"], name: "index_communication_website_posts_on_university_id"
   end
 
-  create_table "communication_websites", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+  create_table "communication_websites", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
     t.uuid "university_id", null: false
     t.string "name"
     t.string "url"
@@ -382,7 +382,9 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_12_165617) do
     t.string "plausible_url"
     t.string "git_branch"
     t.boolean "in_production", default: false
+    t.uuid "default_language_id"
     t.index ["about_type", "about_id"], name: "index_communication_websites_on_about"
+    t.index ["default_language_id"], name: "index_communication_websites_on_default_language_id"
     t.index ["university_id"], name: "index_communication_websites_on_university_id"
   end
 
@@ -414,7 +416,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_12_165617) 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|
+  create_table "education_academic_years", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
     t.uuid "university_id", null: false
     t.integer "year"
     t.datetime "created_at", null: false
@@ -429,7 +431,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_12_165617) do
     t.index ["university_person_id", "education_academic_year_id"], name: "index_person_academic_year"
   end
 
-  create_table "education_cohorts", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+  create_table "education_cohorts", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
     t.uuid "university_id", null: false
     t.uuid "program_id", null: false
     t.uuid "academic_year_id", null: false
@@ -450,7 +452,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_12_165617) do
     t.index ["university_person_id", "education_cohort_id"], name: "index_person_cohort"
   end
 
-  create_table "education_diplomas", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+  create_table "education_diplomas", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
     t.string "name"
     t.string "short_name"
     t.integer "level", default: 0
@@ -464,7 +466,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_12_165617) do
     t.index ["university_id"], name: "index_education_diplomas_on_university_id"
   end
 
-  create_table "education_programs", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+  create_table "education_programs", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
     t.uuid "university_id", null: false
     t.string "name"
     t.integer "capacity"
@@ -524,7 +526,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_12_165617) do
     t.index ["education_program_id", "user_id"], name: "index_education_programs_users_on_program_id_and_user_id"
   end
 
-  create_table "education_schools", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+  create_table "education_schools", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
     t.uuid "university_id", null: false
     t.string "name"
     t.string "address"
@@ -539,7 +541,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_12_165617) do
     t.index ["university_id"], name: "index_education_schools_on_university_id"
   end
 
-  create_table "imports", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+  create_table "imports", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
     t.integer "number_of_lines"
     t.jsonb "processing_errors"
     t.integer "kind"
@@ -552,14 +554,14 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_12_165617) do
     t.index ["user_id"], name: "index_imports_on_user_id"
   end
 
-  create_table "languages", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+  create_table "languages", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
     t.string "name"
     t.string "iso_code"
     t.datetime "created_at", null: false
     t.datetime "updated_at", null: false
   end
 
-  create_table "research_journal_papers", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+  create_table "research_journal_papers", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
     t.string "title"
     t.datetime "published_at", precision: nil
     t.uuid "university_id", null: false
@@ -589,7 +591,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_12_165617) do
     t.index ["researcher_id"], name: "index_research_journal_papers_researchers_on_researcher_id"
   end
 
-  create_table "research_journal_volumes", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+  create_table "research_journal_volumes", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
     t.uuid "university_id", null: false
     t.uuid "research_journal_id", null: false
     t.string "title"
@@ -608,7 +610,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_12_165617) do
     t.index ["university_id"], name: "index_research_journal_volumes_on_university_id"
   end
 
-  create_table "research_journals", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+  create_table "research_journals", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
     t.uuid "university_id", null: false
     t.string "title"
     t.text "description"
@@ -620,7 +622,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_12_165617) do
     t.index ["university_id"], name: "index_research_journals_on_university_id"
   end
 
-  create_table "research_laboratories", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+  create_table "research_laboratories", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
     t.uuid "university_id", null: false
     t.string "name"
     t.string "address"
@@ -632,7 +634,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_12_165617) do
     t.index ["university_id"], name: "index_research_laboratories_on_university_id"
   end
 
-  create_table "research_laboratory_axes", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+  create_table "research_laboratory_axes", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
     t.uuid "university_id", null: false
     t.uuid "research_laboratory_id", null: false
     t.string "name"
@@ -646,7 +648,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_12_165617) do
     t.index ["university_id"], name: "index_research_laboratory_axes_on_university_id"
   end
 
-  create_table "research_theses", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+  create_table "research_theses", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
     t.uuid "university_id", null: false
     t.uuid "research_laboratory_id", null: false
     t.uuid "author_id", null: false
@@ -664,7 +666,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_12_165617) do
     t.index ["university_id"], name: "index_research_theses_on_university_id"
   end
 
-  create_table "universities", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+  create_table "universities", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
     t.string "name"
     t.string "identifier"
     t.string "address"
@@ -689,7 +691,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_12_165617) do
     t.string "sso_button_label"
   end
 
-  create_table "university_organizations", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+  create_table "university_organizations", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
     t.uuid "university_id", null: false
     t.string "name"
     t.string "long_name"
@@ -712,7 +714,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_12_165617) do
     t.index ["university_id"], name: "index_university_organizations_on_university_id"
   end
 
-  create_table "university_people", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+  create_table "university_people", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
     t.uuid "university_id", null: false
     t.uuid "user_id"
     t.string "last_name"
@@ -748,7 +750,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_12_165617) do
     t.index ["user_id"], name: "index_university_people_on_user_id"
   end
 
-  create_table "university_person_experiences", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+  create_table "university_person_experiences", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
     t.uuid "university_id", null: false
     t.uuid "person_id", null: false
     t.uuid "organization_id", null: false
@@ -762,7 +764,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_12_165617) do
     t.index ["university_id"], name: "index_university_person_experiences_on_university_id"
   end
 
-  create_table "university_person_involvements", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+  create_table "university_person_involvements", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
     t.uuid "university_id", null: false
     t.uuid "person_id", null: false
     t.integer "kind"
@@ -777,7 +779,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_12_165617) do
     t.index ["university_id"], name: "index_university_person_involvements_on_university_id"
   end
 
-  create_table "university_roles", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+  create_table "university_roles", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
     t.uuid "university_id", null: false
     t.string "target_type"
     t.uuid "target_id"
@@ -789,7 +791,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_12_165617) do
     t.index ["university_id"], name: "index_university_roles_on_university_id"
   end
 
-  create_table "users", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+  create_table "users", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
     t.uuid "university_id", null: false
     t.string "first_name"
     t.string "last_name"
@@ -877,6 +879,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_12_165617) do
   add_foreign_key "communication_website_posts", "communication_websites"
   add_foreign_key "communication_website_posts", "universities"
   add_foreign_key "communication_website_posts", "university_people", column: "author_id"
+  add_foreign_key "communication_websites", "languages", column: "default_language_id"
   add_foreign_key "communication_websites", "universities"
   add_foreign_key "education_academic_years", "universities"
   add_foreign_key "education_cohorts", "education_academic_years", column: "academic_year_id"
diff --git a/test/fixtures/communication/websites.yml b/test/fixtures/communication/websites.yml
index a72ecbcf7..4b9fff274 100644
--- a/test/fixtures/communication/websites.yml
+++ b/test/fixtures/communication/websites.yml
@@ -2,31 +2,34 @@
 #
 # Table name: communication_websites
 #
-#  id               :uuid             not null, primary key
-#  about_type       :string           indexed => [about_id]
-#  access_token     :string
-#  git_branch       :string
-#  git_endpoint     :string
-#  git_provider     :integer          default("github")
-#  in_production    :boolean          default(FALSE)
-#  name             :string
-#  plausible_url    :string
-#  repository       :string
-#  style            :text
-#  style_updated_at :date
-#  url              :string
-#  created_at       :datetime         not null
-#  updated_at       :datetime         not null
-#  about_id         :uuid             indexed => [about_type]
-#  university_id    :uuid             not null, indexed
+#  id                  :uuid             not null, primary key
+#  about_type          :string           indexed => [about_id]
+#  access_token        :string
+#  git_branch          :string
+#  git_endpoint        :string
+#  git_provider        :integer          default("github")
+#  in_production       :boolean          default(FALSE)
+#  name                :string
+#  plausible_url       :string
+#  repository          :string
+#  style               :text
+#  style_updated_at    :date
+#  url                 :string
+#  created_at          :datetime         not null
+#  updated_at          :datetime         not null
+#  about_id            :uuid             indexed => [about_type]
+#  default_language_id :uuid             indexed
+#  university_id       :uuid             not null, indexed
 #
 # Indexes
 #
-#  index_communication_websites_on_about          (about_type,about_id)
-#  index_communication_websites_on_university_id  (university_id)
+#  index_communication_websites_on_about                (about_type,about_id)
+#  index_communication_websites_on_default_language_id  (default_language_id)
+#  index_communication_websites_on_university_id        (university_id)
 #
 # Foreign Keys
 #
+#  fk_rails_2b6d929310  (default_language_id => languages.id)
 #  fk_rails_bb6a496c08  (university_id => universities.id)
 #
 website_with_github:
-- 
GitLab