From 99327fb3071dd28acbba2348fa629e82edba0412 Mon Sep 17 00:00:00 2001
From: Arnaud Levy <contact@arnaudlevy.com>
Date: Mon, 7 Mar 2022 08:57:09 +0100
Subject: [PATCH] import

---
 .../organization/imports_controller.rb        | 43 ++++++++++
 .../university/organizations_controller.rb    |  1 +
 app/models/university/organization/import.rb  | 51 ++++++++++++
 .../with_people_and_organizations.rb          | 11 ++-
 .../organization/imports/index.html.erb       | 21 +++++
 .../organization/imports/new.html.erb         | 75 ++++++++++++++++++
 .../organization/imports/show.html.erb        |  5 ++
 .../university/organizations/_form.html.erb   | 78 +++++++++----------
 .../university/organizations/_list.html.erb   |  4 +-
 .../university/organizations/index.html.erb   |  6 ++
 .../university/organizations/index.html.erb   | 18 +++++
 .../university/organizations/show.html.erb    |  1 +
 config/environments/development.rb            |  1 +
 config/locales/en.yml                         |  1 +
 config/locales/fr.yml                         |  1 +
 config/locales/university/en.yml              |  6 ++
 config/locales/university/fr.yml              |  6 ++
 config/routes/admin/university.rb             |  3 +
 config/routes/extranet.rb                     |  3 +
 ..._create_university_organization_imports.rb | 10 +++
 db/schema.rb                                  | 13 +++-
 .../organization/imports_controller_test.rb   | 48 ++++++++++++
 .../university/organization/imports.yml       | 29 +++++++
 .../university/organization/import_test.rb    | 27 +++++++
 .../university/organization/imports_test.rb   | 45 +++++++++++
 25 files changed, 463 insertions(+), 44 deletions(-)
 create mode 100644 app/controllers/admin/university/organization/imports_controller.rb
 create mode 100644 app/models/university/organization/import.rb
 create mode 100644 app/views/admin/university/organization/imports/index.html.erb
 create mode 100644 app/views/admin/university/organization/imports/new.html.erb
 create mode 100644 app/views/admin/university/organization/imports/show.html.erb
 create mode 100644 app/views/university/organizations/index.html.erb
 create mode 100644 app/views/university/organizations/show.html.erb
 create mode 100644 db/migrate/20220307070155_create_university_organization_imports.rb
 create mode 100644 test/controllers/university/organization/imports_controller_test.rb
 create mode 100644 test/fixtures/university/organization/imports.yml
 create mode 100644 test/models/university/organization/import_test.rb
 create mode 100644 test/system/university/organization/imports_test.rb

diff --git a/app/controllers/admin/university/organization/imports_controller.rb b/app/controllers/admin/university/organization/imports_controller.rb
new file mode 100644
index 000000000..493f55a44
--- /dev/null
+++ b/app/controllers/admin/university/organization/imports_controller.rb
@@ -0,0 +1,43 @@
+class Admin::University::Organization::ImportsController < Admin::University::ApplicationController
+  load_and_authorize_resource class: University::Organization::Import,
+                              through: :current_university,
+                              through_association: :organization_imports
+
+  def index
+    breadcrumb
+  end
+
+  def show
+    breadcrumb
+  end
+
+  def new
+    breadcrumb
+  end
+
+  def create
+    @import.university = current_university
+    @import.user = current_user
+    if @import.save
+      redirect_to [:admin, @import], notice: "Import was successfully created."
+    else
+      render :new, status: :unprocessable_entity
+    end
+  end
+
+  protected
+
+  def breadcrumb
+    super
+    add_breadcrumb  University::Organization.model_name.human(count: 2),
+                    admin_university_organizations_path
+    add_breadcrumb  University::Organization::Import.model_name.human(count: 2),
+                    admin_university_organization_imports_path
+    breadcrumb_for  @import
+  end
+
+  def import_params
+    params.require(:university_organization_import)
+          .permit(:file)
+  end
+end
diff --git a/app/controllers/university/organizations_controller.rb b/app/controllers/university/organizations_controller.rb
index 145babc5c..f33404189 100644
--- a/app/controllers/university/organizations_controller.rb
+++ b/app/controllers/university/organizations_controller.rb
@@ -4,6 +4,7 @@ class University::OrganizationsController < ApplicationController
                               through_association: :organizations
 
   def index
+    @organizations = @organizations.ordered.page(params[:page])
   end
 
   def show
diff --git a/app/models/university/organization/import.rb b/app/models/university/organization/import.rb
new file mode 100644
index 000000000..b4e5f7e06
--- /dev/null
+++ b/app/models/university/organization/import.rb
@@ -0,0 +1,51 @@
+# == Schema Information
+#
+# Table name: university_organization_imports
+#
+#  id            :uuid             not null, primary key
+#  created_at    :datetime         not null
+#  updated_at    :datetime         not null
+#  university_id :uuid             not null, indexed
+#  user_id       :uuid             not null, indexed
+#
+# Indexes
+#
+#  index_university_organization_imports_on_university_id  (university_id)
+#  index_university_organization_imports_on_user_id        (user_id)
+#
+# Foreign Keys
+#
+#  fk_rails_31152af0cd  (university_id => universities.id)
+#  fk_rails_da057ff44d  (user_id => users.id)
+#
+class University::Organization::Import < ApplicationRecord
+  belongs_to :university
+  belongs_to :user
+
+  has_one_attached :file
+
+  after_save :parse
+
+  def lines
+    @lines ||= csv.rows
+  rescue
+    []
+  end
+
+  def to_s
+    "#{user}, #{I18n.l created_at}"
+  end
+
+  protected
+
+  def parse
+    byebug
+    lines.each do |line|
+
+    end
+  end
+
+  def csv
+    @csv ||= CSV.parse file.blob.download, headers: true
+  end
+end
diff --git a/app/models/university/with_people_and_organizations.rb b/app/models/university/with_people_and_organizations.rb
index e9f4c637e..d943867e0 100644
--- a/app/models/university/with_people_and_organizations.rb
+++ b/app/models/university/with_people_and_organizations.rb
@@ -2,7 +2,14 @@ module University::WithPeopleAndOrganizations
   extend ActiveSupport::Concern
 
   included do
-    has_many :people, class_name: 'University::Person', dependent: :destroy
-    has_many :organizations, class_name: 'University::Organization', dependent: :destroy
+    has_many  :people,
+              class_name: 'University::Person',
+              dependent: :destroy
+    has_many  :organizations,
+              class_name: 'University::Organization',
+              dependent: :destroy
+    has_many  :organization_imports,
+              class_name: 'University::Organization::Import',
+              dependent: :destroy
   end
 end
diff --git a/app/views/admin/university/organization/imports/index.html.erb b/app/views/admin/university/organization/imports/index.html.erb
new file mode 100644
index 000000000..df3fc7199
--- /dev/null
+++ b/app/views/admin/university/organization/imports/index.html.erb
@@ -0,0 +1,21 @@
+<% content_for :title, University::Organization::Import.model_name.human(count: 2) %>
+
+<table class="<%= table_classes %>">
+  <thead>
+    <tr>
+      <th><%= University::Organization::Import.human_attribute_name('name') %></th>
+      <th><%= University::Organization::Import.human_attribute_name('lines') %></th>
+    </tr>
+  </thead>
+  <tbody>
+    <% @imports.each do |import| %>
+      <tr>
+        <td><%= link_to import, [:admin, import] %></td>
+        <td><%= import.lines.count %></td>
+      </tr>
+    <% end %>
+  </tbody>
+</table>
+<% content_for :action_bar_right do %>
+  <%= create_link University::Organization::Import %>
+<% end %>
diff --git a/app/views/admin/university/organization/imports/new.html.erb b/app/views/admin/university/organization/imports/new.html.erb
new file mode 100644
index 000000000..460abdd79
--- /dev/null
+++ b/app/views/admin/university/organization/imports/new.html.erb
@@ -0,0 +1,75 @@
+<% content_for :title, University::Organization::Import.model_name.human %>
+
+<div class="row">
+  <div class="col-md-6">
+    <p>
+      Les données doivent être au format csv, comme l'exemple suivant.<br>
+      La première ligne doit être dédiée aux entêtes.<br>
+      Le champ name est obligatoire.<br>
+      Les noms des entêtes sont indicatifs, l'import est basé sur la position des champs.<br>
+      Les caractères doivent être encodés en UTF-8.<br>
+      Les valeurs possibles pour kind sont : company, non_profit, government.
+    </p>
+    <%= simple_form_for [:admin, @import] do |f| %>
+      <%= f.input :file %>
+      <% content_for :action_bar_right do %>
+        <%= submit f %>
+      <% end %>
+    <% end %>
+
+  </div>
+  <div class="col-md-6">
+    <table class="table table-small">
+      <tbody>
+        <tr>
+          <th>name*</th>
+          <td>Le Monde</td>
+        </tr>
+        <tr>
+          <th>long_name</th>
+          <td>Société Editrice du Monde</td>
+        </tr>
+        <tr>
+          <th>kind</th>
+          <td>company</td>
+        </tr>
+        <tr>
+          <th>sirene</th>
+          <td>00000000</td>
+        </tr>
+        <tr>
+          <th>description</th>
+          <td>Le quotidien de référence</td>
+        </tr>
+        <tr>
+          <th>address</th>
+          <td>13 rue Auguste Blanqui</td>
+        </tr>
+        <tr>
+          <th>zipcode</th>
+          <td>75013</td>
+        </tr>
+        <tr>
+          <th>city</th>
+          <td>Paris</td>
+        </tr>
+        <tr>
+          <th>country</th>
+          <td>FR</td>
+        </tr>
+        <tr>
+          <th>mail</th>
+          <td>contact@lemonde.fr</td>
+        </tr>
+        <tr>
+          <th>phone</th>
+          <td>+33 1 01 01 01 01</td>
+        </tr>
+        <tr>
+          <th>website</th>
+          <td>https://www.lemonde.fr</td>
+        </tr>
+      </tbody>
+    </table>
+  </div>
+</div>
diff --git a/app/views/admin/university/organization/imports/show.html.erb b/app/views/admin/university/organization/imports/show.html.erb
new file mode 100644
index 000000000..179493a22
--- /dev/null
+++ b/app/views/admin/university/organization/imports/show.html.erb
@@ -0,0 +1,5 @@
+<% content_for :title, @import %>
+
+<%= link_to "#{@import.file.filename} (#{number_to_human_size @import.file.byte_size})",
+            url_for(@import.file),
+            class: button_classes %>
diff --git a/app/views/admin/university/organizations/_form.html.erb b/app/views/admin/university/organizations/_form.html.erb
index 3f4d31f61..c70eee1d0 100644
--- a/app/views/admin/university/organizations/_form.html.erb
+++ b/app/views/admin/university/organizations/_form.html.erb
@@ -1,46 +1,46 @@
 <%= simple_form_for [:admin, organization] do |f| %>
-<div class="row">
-  <div class="col-md-6">
-    <div class="card flex-fill w-100">
-      <div class="card-header">
-        <h5 class="card-title mb-0"><%= t('content') %></h5>
-      </div>
-      <div class="card-body">
-        <%= f.input :name %>
-        <%= f.input :long_name %>
-        <%= f.input :kind, include_blank: false %>
-        <%= f.input :active %>
-        <%= f.input :sirene %>
-        <%= f.input :description %>
-        <%= f.input :logo,
-                    as: :single_deletable_file,
-                    input_html: { accept: '.jpg,.jpeg,.png,.svg' },
-                    preview: 200,
-                    resize: 1,
-                    direct_upload: true %>
+  <div class="row">
+    <div class="col-md-6">
+      <div class="card flex-fill w-100">
+        <div class="card-header">
+          <h5 class="card-title mb-0"><%= t('content') %></h5>
+        </div>
+        <div class="card-body">
+          <%= f.input :name %>
+          <%= f.input :long_name %>
+          <%= f.input :kind, include_blank: false %>
+          <%= f.input :active %>
+          <%= f.input :sirene %>
+          <%= f.input :description %>
+          <%= f.input :logo,
+                      as: :single_deletable_file,
+                      input_html: { accept: '.jpg,.jpeg,.png,.svg' },
+                      preview: 200,
+                      resize: 1,
+                      direct_upload: true %>
+        </div>
       </div>
     </div>
-  </div>
-  <div class="col-md-6">
-    <div class="card flex-fill w-100">
-      <div class="card-header">
-        <h5 class="card-title mb-0">
-          <%= University::Organization.human_attribute_name('contact_informations') %>
-        </h5>
-      </div>
-      <div class="card-body">
-        <%= f.input :address %>
-        <%= f.input :zipcode %>
-        <%= f.input :city %>
-        <%= f.input :country %>
-        <%= f.input :website %>
-        <%= f.input :phone %>
-        <%= f.input :mail %>
+    <div class="col-md-6">
+      <div class="card flex-fill w-100">
+        <div class="card-header">
+          <h5 class="card-title mb-0">
+            <%= University::Organization.human_attribute_name('contact_informations') %>
+          </h5>
+        </div>
+        <div class="card-body">
+          <%= f.input :address %>
+          <%= f.input :zipcode %>
+          <%= f.input :city %>
+          <%= f.input :country %>
+          <%= f.input :website %>
+          <%= f.input :phone %>
+          <%= f.input :mail %>
+        </div>
       </div>
     </div>
   </div>
-</div>
-    <% content_for :action_bar_right do %>
-      <%= submit f %>
-    <% end %>
+  <% content_for :action_bar_right do %>
+    <%= submit f %>
+  <% end %>
 <% end %>
diff --git a/app/views/admin/university/organizations/_list.html.erb b/app/views/admin/university/organizations/_list.html.erb
index 6eb06b201..83fe50179 100644
--- a/app/views/admin/university/organizations/_list.html.erb
+++ b/app/views/admin/university/organizations/_list.html.erb
@@ -13,8 +13,8 @@
         <td><%= organization.kind %></td>
         <td class="text-end">
           <div class="btn-group" role="group">
-            <%= edit_button organization %>
-            <%= delete_button organization %>
+            <%= edit_link organization %>
+            <%= destroy_link organization %>
           </div>
         </td>
       </tr>
diff --git a/app/views/admin/university/organizations/index.html.erb b/app/views/admin/university/organizations/index.html.erb
index 3911980fb..1fd6f4dbf 100644
--- a/app/views/admin/university/organizations/index.html.erb
+++ b/app/views/admin/university/organizations/index.html.erb
@@ -3,6 +3,12 @@
 <%= render 'admin/university/organizations/list', organizations: @organizations %>
 <%= paginate @organizations, theme: 'bootstrap-5' %>
 
+<% content_for :action_bar_left do %>
+  <%= link_to t('import'),
+              admin_university_organization_imports_path,
+              class: button_classes if can? :manage, University::Organization::Import %>
+<% end %>
+
 <% content_for :action_bar_right do %>
   <%= create_link University::Organization %>
 <% end %>
diff --git a/app/views/university/organizations/index.html.erb b/app/views/university/organizations/index.html.erb
new file mode 100644
index 000000000..e8810d4f6
--- /dev/null
+++ b/app/views/university/organizations/index.html.erb
@@ -0,0 +1,18 @@
+<% content_for :title, University::Organization.model_name.human(count: 2) %>
+
+<table class="<%= table_classes %>">
+  <thead>
+    <tr>
+      <th><%= University::Organization.human_attribute_name('name') %></th>
+      <th><%= University::Organization.human_attribute_name('kind') %></th>
+    </tr>
+  </thead>
+  <tbody>
+    <% @organizations.each do |organization| %>
+      <tr>
+        <td><%= link_to organization, organization %></td>
+        <td><%= organization.kind %></td>
+      </tr>
+    <% end %>
+  </tbody>
+</table>
diff --git a/app/views/university/organizations/show.html.erb b/app/views/university/organizations/show.html.erb
new file mode 100644
index 000000000..1a8858a81
--- /dev/null
+++ b/app/views/university/organizations/show.html.erb
@@ -0,0 +1 @@
+<% content_for :title, @organization %>
diff --git a/config/environments/development.rb b/config/environments/development.rb
index bea91d402..6968ff7e0 100644
--- a/config/environments/development.rb
+++ b/config/environments/development.rb
@@ -34,6 +34,7 @@ Rails.application.configure do
 
   # Store uploaded files on the local file system (see config/storage.yml for options).
   config.active_storage.service = :scaleway
+  # config.active_storage.service = :local
 
   # Don't care if the mailer can't send.
   config.action_mailer.raise_delivery_errors = false
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 6234469eb..e15d7f974 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -104,6 +104,7 @@ en:
     privacy_policy: https://osuny.org/politique-de-confidentialite
   hello: "Hello %{name}!"
   home: Home
+  import: Import
   languages:
     en: English
     fr: French
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index 5d3348026..cfa6f2e2a 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -104,6 +104,7 @@ fr:
     privacy_policy: https://osuny.org/politique-de-confidentialite
   hello: "Bonjour %{name} !"
   home: Accueil
+  import: Importer
   languages:
     en: Anglais
     fr: Français
diff --git a/config/locales/university/en.yml b/config/locales/university/en.yml
index de3374063..b346f35e0 100644
--- a/config/locales/university/en.yml
+++ b/config/locales/university/en.yml
@@ -44,6 +44,9 @@ en:
       university/organization:
         name: Name
         long_name: Long name
+        description: Description (SEO)
+      university/organization/import:
+        file: File (.csv)
       university/role:
         description: Description (SEO)
         people: People
@@ -60,6 +63,9 @@ en:
       university/organization:
         one: Third party
         other: Third parties
+      university/organization/import:
+        one: Import
+        other: Imports
       university/role:
         one: Role
         other: Roles
diff --git a/config/locales/university/fr.yml b/config/locales/university/fr.yml
index 6be4c7d73..34e714b19 100644
--- a/config/locales/university/fr.yml
+++ b/config/locales/university/fr.yml
@@ -44,6 +44,9 @@ fr:
       university/organization:
         name: Nom
         long_name: Nom complet
+        description: Description (SEO)
+      university/organization/import:
+        file: Fichier (.csv)
       university/role:
         description: Description (SEO)
         people: Personnes
@@ -60,6 +63,9 @@ fr:
       university/organization:
         one: Tierce partie
         other: Tierces parties
+      university/organization/import:
+        one: Import
+        other: Imports
       university/role:
         one: Rôle
         other: Rôles
diff --git a/config/routes/admin/university.rb b/config/routes/admin/university.rb
index 25328e0bc..cb94a97ad 100644
--- a/config/routes/admin/university.rb
+++ b/config/routes/admin/university.rb
@@ -1,3 +1,6 @@
 namespace :university do
   resources :people, :organizations
+  namespace :organization do
+    resources :imports, only: [:index, :show, :new, :create]
+  end
 end
diff --git a/config/routes/extranet.rb b/config/routes/extranet.rb
index 2741f6f22..186b49d38 100644
--- a/config/routes/extranet.rb
+++ b/config/routes/extranet.rb
@@ -1,3 +1,6 @@
 namespace :university do
   resources :organizations, only: [:index, :show]
 end
+
+get 'organizations' => 'university/organizations#index', as: :organizations
+get 'organization/:id' => 'university/organizations#show', as: :organization
diff --git a/db/migrate/20220307070155_create_university_organization_imports.rb b/db/migrate/20220307070155_create_university_organization_imports.rb
new file mode 100644
index 000000000..4b613152b
--- /dev/null
+++ b/db/migrate/20220307070155_create_university_organization_imports.rb
@@ -0,0 +1,10 @@
+class CreateUniversityOrganizationImports < ActiveRecord::Migration[6.1]
+  def change
+    create_table :university_organization_imports, id: :uuid do |t|
+      t.references :university, null: false, foreign_key: true, type: :uuid
+      t.references :user, null: false, foreign_key: true, type: :uuid
+
+      t.timestamps
+    end
+  end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 26287d96d..ed57cfb44 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_07_053000) do
+ActiveRecord::Schema.define(version: 2022_03_07_070155) do
 
   # These are extensions that must be enabled in order to support this database
   enable_extension "pgcrypto"
@@ -589,6 +589,15 @@ ActiveRecord::Schema.define(version: 2022_03_07_053000) do
     t.string "invoice_amount"
   end
 
+  create_table "university_organization_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_organization_imports_on_university_id"
+    t.index ["user_id"], name: "index_university_organization_imports_on_user_id"
+  end
+
   create_table "university_organizations", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
     t.uuid "university_id", null: false
     t.string "name"
@@ -763,6 +772,8 @@ ActiveRecord::Schema.define(version: 2022_03_07_053000) do
   add_foreign_key "research_theses", "universities"
   add_foreign_key "research_theses", "university_people", column: "author_id"
   add_foreign_key "research_theses", "university_people", column: "director_id"
+  add_foreign_key "university_organization_imports", "universities"
+  add_foreign_key "university_organization_imports", "users"
   add_foreign_key "university_organizations", "universities"
   add_foreign_key "university_people", "universities"
   add_foreign_key "university_people", "users"
diff --git a/test/controllers/university/organization/imports_controller_test.rb b/test/controllers/university/organization/imports_controller_test.rb
new file mode 100644
index 000000000..34bbfd482
--- /dev/null
+++ b/test/controllers/university/organization/imports_controller_test.rb
@@ -0,0 +1,48 @@
+require "test_helper"
+
+class University::Organization::ImportsControllerTest < ActionDispatch::IntegrationTest
+  setup do
+    @university_organization_import = university_organization_imports(:one)
+  end
+
+  test "should get index" do
+    get university_organization_imports_url
+    assert_response :success
+  end
+
+  test "should get new" do
+    get new_university_organization_import_url
+    assert_response :success
+  end
+
+  test "should create university_organization_import" do
+    assert_difference('University::Organization::Import.count') do
+      post university_organization_imports_url, params: { university_organization_import: { university_id: @university_organization_import.university_id, user_id: @university_organization_import.user_id } }
+    end
+
+    assert_redirected_to university_organization_import_url(University::Organization::Import.last)
+  end
+
+  test "should show university_organization_import" do
+    get university_organization_import_url(@university_organization_import)
+    assert_response :success
+  end
+
+  test "should get edit" do
+    get edit_university_organization_import_url(@university_organization_import)
+    assert_response :success
+  end
+
+  test "should update university_organization_import" do
+    patch university_organization_import_url(@university_organization_import), params: { university_organization_import: { university_id: @university_organization_import.university_id, user_id: @university_organization_import.user_id } }
+    assert_redirected_to university_organization_import_url(@university_organization_import)
+  end
+
+  test "should destroy university_organization_import" do
+    assert_difference('University::Organization::Import.count', -1) do
+      delete university_organization_import_url(@university_organization_import)
+    end
+
+    assert_redirected_to university_organization_imports_url
+  end
+end
diff --git a/test/fixtures/university/organization/imports.yml b/test/fixtures/university/organization/imports.yml
new file mode 100644
index 000000000..0f6959317
--- /dev/null
+++ b/test/fixtures/university/organization/imports.yml
@@ -0,0 +1,29 @@
+# == Schema Information
+#
+# Table name: university_organization_imports
+#
+#  id            :uuid             not null, primary key
+#  created_at    :datetime         not null
+#  updated_at    :datetime         not null
+#  university_id :uuid             not null, indexed
+#  user_id       :uuid             not null, indexed
+#
+# Indexes
+#
+#  index_university_organization_imports_on_university_id  (university_id)
+#  index_university_organization_imports_on_user_id        (user_id)
+#
+# Foreign Keys
+#
+#  fk_rails_31152af0cd  (university_id => universities.id)
+#  fk_rails_da057ff44d  (user_id => users.id)
+#
+# Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
+
+one:
+  university: one
+  user: one
+
+two:
+  university: two
+  user: two
diff --git a/test/models/university/organization/import_test.rb b/test/models/university/organization/import_test.rb
new file mode 100644
index 000000000..e5fc2e500
--- /dev/null
+++ b/test/models/university/organization/import_test.rb
@@ -0,0 +1,27 @@
+# == Schema Information
+#
+# Table name: university_organization_imports
+#
+#  id            :uuid             not null, primary key
+#  created_at    :datetime         not null
+#  updated_at    :datetime         not null
+#  university_id :uuid             not null, indexed
+#  user_id       :uuid             not null, indexed
+#
+# Indexes
+#
+#  index_university_organization_imports_on_university_id  (university_id)
+#  index_university_organization_imports_on_user_id        (user_id)
+#
+# Foreign Keys
+#
+#  fk_rails_31152af0cd  (university_id => universities.id)
+#  fk_rails_da057ff44d  (user_id => users.id)
+#
+require "test_helper"
+
+class University::Organization::ImportTest < ActiveSupport::TestCase
+  # test "the truth" do
+  #   assert true
+  # end
+end
diff --git a/test/system/university/organization/imports_test.rb b/test/system/university/organization/imports_test.rb
new file mode 100644
index 000000000..050b8720c
--- /dev/null
+++ b/test/system/university/organization/imports_test.rb
@@ -0,0 +1,45 @@
+require "application_system_test_case"
+
+class University::Organization::ImportsTest < ApplicationSystemTestCase
+  setup do
+    @university_organization_import = university_organization_imports(:one)
+  end
+
+  test "visiting the index" do
+    visit university_organization_imports_url
+    assert_selector "h1", text: "University/Organization/Imports"
+  end
+
+  test "creating a Import" do
+    visit university_organization_imports_url
+    click_on "New University/Organization/Import"
+
+    fill_in "University", with: @university_organization_import.university_id
+    fill_in "User", with: @university_organization_import.user_id
+    click_on "Create Import"
+
+    assert_text "Import was successfully created"
+    click_on "Back"
+  end
+
+  test "updating a Import" do
+    visit university_organization_imports_url
+    click_on "Edit", match: :first
+
+    fill_in "University", with: @university_organization_import.university_id
+    fill_in "User", with: @university_organization_import.user_id
+    click_on "Update Import"
+
+    assert_text "Import was successfully updated"
+    click_on "Back"
+  end
+
+  test "destroying a Import" do
+    visit university_organization_imports_url
+    page.accept_confirm do
+      click_on "Destroy", match: :first
+    end
+
+    assert_text "Import was successfully destroyed"
+  end
+end
-- 
GitLab