From ded292c65da7c41f3e3ee379651c56e798905eb4 Mon Sep 17 00:00:00 2001 From: vangberg Date: Mon, 29 Jun 2026 12:08:32 +0200 Subject: [PATCH 1/4] Use explicit test fixtures for names and registers --- test/controllers/names_controller_test.rb | 2 +- test/controllers/registers_controller_test.rb | 2 +- test/fixtures/checks.yml | 4 ++-- test/fixtures/contacts.yml | 4 ++-- test/fixtures/curations.yml | 4 ++-- test/fixtures/name_correspondences.yml | 4 ++-- test/fixtures/names.yml | 5 +---- test/fixtures/notifications.yml | 4 ++-- test/fixtures/observe_names.yml | 4 ++-- test/fixtures/observe_registers.yml | 4 ++-- test/fixtures/register_coauthors.yml | 4 ++-- test/fixtures/register_correspondences.yml | 4 ++-- test/fixtures/registers.yml | 20 +++++++++---------- test/fixtures/tutorials.yml | 4 ++-- test/fixtures/users.yml | 13 ++++++------ test/system/names_test.rb | 4 ++++ test/system/registers_test.rb | 2 +- 17 files changed, 44 insertions(+), 44 deletions(-) diff --git a/test/controllers/names_controller_test.rb b/test/controllers/names_controller_test.rb index 153a371d..7d12432f 100644 --- a/test/controllers/names_controller_test.rb +++ b/test/controllers/names_controller_test.rb @@ -2,7 +2,7 @@ class NamesControllerTest < ActionDispatch::IntegrationTest setup do - @name = names(:one) + @name = names(:unregistered) end end diff --git a/test/controllers/registers_controller_test.rb b/test/controllers/registers_controller_test.rb index 23d0f729..b06258a1 100644 --- a/test/controllers/registers_controller_test.rb +++ b/test/controllers/registers_controller_test.rb @@ -2,7 +2,7 @@ class RegistersControllerTest < ActionDispatch::IntegrationTest setup do - @register = registers(:one) + @register = registers(:draft) end end diff --git a/test/fixtures/checks.yml b/test/fixtures/checks.yml index fb030049..cd21879a 100644 --- a/test/fixtures/checks.yml +++ b/test/fixtures/checks.yml @@ -2,12 +2,12 @@ one: name: one - user: one + user: contributor kind: MyText pass: false two: name: two - user: two + user: contributor kind: MyText pass: false diff --git a/test/fixtures/contacts.yml b/test/fixtures/contacts.yml index e215ba0b..bb9ca126 100644 --- a/test/fixtures/contacts.yml +++ b/test/fixtures/contacts.yml @@ -2,7 +2,7 @@ one: publication: one - user: one + user: contributor to: MyString cc: MyString subject: MyString @@ -10,7 +10,7 @@ one: two: publication: two - user: two + user: contributor to: MyString cc: MyString subject: MyString diff --git a/test/fixtures/curations.yml b/test/fixtures/curations.yml index 8cbb6501..a82d6408 100644 --- a/test/fixtures/curations.yml +++ b/test/fixtures/curations.yml @@ -2,14 +2,14 @@ one: name: one - user: one + user: contributor kind_int: 1 status_int: 1 notes: MyText two: name: two - user: two + user: contributor kind_int: 1 status_int: 1 notes: MyText diff --git a/test/fixtures/name_correspondences.yml b/test/fixtures/name_correspondences.yml index f882e9b3..04a1487c 100644 --- a/test/fixtures/name_correspondences.yml +++ b/test/fixtures/name_correspondences.yml @@ -2,8 +2,8 @@ one: name: one - user: one + user: contributor two: name: two - user: two + user: contributor diff --git a/test/fixtures/names.yml b/test/fixtures/names.yml index dfc554df..258c4d6c 100644 --- a/test/fixtures/names.yml +++ b/test/fixtures/names.yml @@ -1,7 +1,4 @@ # Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html -one: +unregistered: name: MyString - -two: - name: MyOtherString diff --git a/test/fixtures/notifications.yml b/test/fixtures/notifications.yml index 69220618..14df8529 100644 --- a/test/fixtures/notifications.yml +++ b/test/fixtures/notifications.yml @@ -3,7 +3,7 @@ one: seen: false notified_email: false - user: one + user: contributor notifiable: one notifiable_type: Notifiable linkeable: one @@ -13,7 +13,7 @@ one: two: seen: false notified_email: false - user: two + user: contributor notifiable: two notifiable_type: Notifiable linkeable: two diff --git a/test/fixtures/observe_names.yml b/test/fixtures/observe_names.yml index 352151c3..4001dba3 100644 --- a/test/fixtures/observe_names.yml +++ b/test/fixtures/observe_names.yml @@ -1,9 +1,9 @@ # Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html one: - user: one + user: contributor name: one two: - user: two + user: contributor name: two diff --git a/test/fixtures/observe_registers.yml b/test/fixtures/observe_registers.yml index d3de03ec..cf89694b 100644 --- a/test/fixtures/observe_registers.yml +++ b/test/fixtures/observe_registers.yml @@ -1,9 +1,9 @@ # Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html one: - user: one + user: contributor register: one two: - user: two + user: contributor register: two diff --git a/test/fixtures/register_coauthors.yml b/test/fixtures/register_coauthors.yml index 923ec8e3..d732ce2c 100644 --- a/test/fixtures/register_coauthors.yml +++ b/test/fixtures/register_coauthors.yml @@ -2,10 +2,10 @@ one: register: one - user: one + user: contributor order: 1 two: register: two - user: two + user: contributor order: 1 diff --git a/test/fixtures/register_correspondences.yml b/test/fixtures/register_correspondences.yml index f0689cc2..0af78f49 100644 --- a/test/fixtures/register_correspondences.yml +++ b/test/fixtures/register_correspondences.yml @@ -2,8 +2,8 @@ one: register: one - user: one + user: contributor two: register: two - user: two + user: contributor diff --git a/test/fixtures/registers.yml b/test/fixtures/registers.yml index 91e93e79..8a74d6f9 100644 --- a/test/fixtures/registers.yml +++ b/test/fixtures/registers.yml @@ -1,17 +1,17 @@ # Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html -one: - accession: MyString - user: one - validated_by: one +draft: + accession: r:draft01 + user: contributor submitted: false + notified: false validated: false publication: one -two: - accession: MyOtherString - user: two - validated_by: two - submitted: false +submitted: + accession: r:sumbit01 + user: contributor + submitted: true + notified: false validated: false - publication: two + publication: one diff --git a/test/fixtures/tutorials.yml b/test/fixtures/tutorials.yml index 65d186ef..a95bce6a 100644 --- a/test/fixtures/tutorials.yml +++ b/test/fixtures/tutorials.yml @@ -2,12 +2,12 @@ one: pipeline: MyString - user: one + user: contributor ongoing: false step: 1 two: pipeline: MyString - user: two + user: contributor ongoing: false step: 1 diff --git a/test/fixtures/users.yml b/test/fixtures/users.yml index 4f5cab7b..faf403d3 100644 --- a/test/fixtures/users.yml +++ b/test/fixtures/users.yml @@ -1,10 +1,9 @@ # Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html -one: - username: user_one - email: user_one@example.com - -two: - username: user_two - email: user_two@example.com +contributor: + username: contributor + email: contributor@example.com + contributor: true + curator: true + confirmed_at: <%= Time.current %> # column: value diff --git a/test/system/names_test.rb b/test/system/names_test.rb index 214aec85..d0992b70 100644 --- a/test/system/names_test.rb +++ b/test/system/names_test.rb @@ -1,6 +1,10 @@ require 'application_system_test_case' class NamesTest < ApplicationSystemTestCase + setup do + @user = users(:contributor) + end + # test "visiting the index" do # visit names_url # diff --git a/test/system/registers_test.rb b/test/system/registers_test.rb index 7b503ed2..98977a2a 100644 --- a/test/system/registers_test.rb +++ b/test/system/registers_test.rb @@ -2,7 +2,7 @@ class RegistersTest < ApplicationSystemTestCase setup do - @register = registers(:one) + @register = registers(:draft) end end From 3e11cca9b44d5638d4291a2221b718b67afe9195 Mon Sep 17 00:00:00 2001 From: vangberg Date: Mon, 29 Jun 2026 12:08:32 +0200 Subject: [PATCH 2/4] Prevent adding names to non-draft registers --- app/models/name.rb | 5 +++++ test/models/name_test.rb | 21 ++++++++++++++++++--- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/app/models/name.rb b/app/models/name.rb index 573bc57f..04d605fc 100644 --- a/app/models/name.rb +++ b/app/models/name.rb @@ -1265,6 +1265,11 @@ def genome # ============ --- REGISTER LISTS --- ============ def add_to_register(register, user) + unless register&.draft? + errors.add(:register, 'must be a draft') + return false + end + self.register = register unless created_by self.created_by = user diff --git a/test/models/name_test.rb b/test/models/name_test.rb index 5f9eba9e..30b26064 100644 --- a/test/models/name_test.rb +++ b/test/models/name_test.rb @@ -1,7 +1,22 @@ require 'test_helper' class NameTest < ActiveSupport::TestCase - # test "the truth" do - # assert true - # end + test 'add_to_register adds name to a draft register' do + name = names(:unregistered) + register = registers(:draft) + + assert register.draft? + assert name.add_to_register(register, users(:contributor)) + assert_equal register, name.reload.register + end + + test 'add_to_register refuses non-draft registers' do + name = names(:unregistered) + register = registers(:submitted) + + assert_not register.draft? + assert_not name.add_to_register(register, users(:contributor)) + assert_includes name.errors[:register], 'must be a draft' + assert_nil name.reload.register + end end From acdda7182878cbc4bfd699d2de654df2516e10a0 Mon Sep 17 00:00:00 2001 From: vangberg Date: Mon, 29 Jun 2026 12:21:04 +0200 Subject: [PATCH 3/4] `Register#draft` scope --- app/controllers/registers_controller.rb | 7 +++-- app/models/register.rb | 2 ++ test/controllers/registers_controller_test.rb | 27 +++++++++++++++++++ test/fixtures/registers.yml | 8 ++++++ 4 files changed, 40 insertions(+), 4 deletions(-) diff --git a/app/controllers/registers_controller.rb b/app/controllers/registers_controller.rb index 359b3ae4..c3f2b401 100644 --- a/app/controllers/registers_controller.rb +++ b/app/controllers/registers_controller.rb @@ -78,7 +78,7 @@ def index(status = :validated) end when :draft authenticate_curator! && return - Register.where(validated: false, notified: false, submitted: false) + Register.drafts when :submitted authenticate_curator! && return Register.where(validated: false, notified: false, submitted: true) @@ -129,8 +129,7 @@ def tree # GET /registers/new def new @register = Register.new - @registers = - current_user.registers.where(submitted: false, validated: false) + @registers = current_user.registers.drafts.order(created_at: :desc) @crumbs = ['Lists'] end @@ -145,7 +144,7 @@ def create @register = Register.where(accession: params[:existing_register]).first end @register ||= Register.new(user: current_user) - @registers = current_user.registers.where(submitted: false) + @registers = current_user.registers.drafts.order(created_at: :desc) if @register.can_edit?(current_user) && @register.save && (!@name || @name.add_to_register(@register, current_user)) && diff --git a/app/models/register.rb b/app/models/register.rb index 230009f0..93c77d67 100644 --- a/app/models/register.rb +++ b/app/models/register.rb @@ -40,6 +40,8 @@ class Register < ApplicationRecord has_rich_text(:abstract) has_rich_text(:submitter_authorship_explanation) + scope :drafts, -> { where(validated: false, notified: false, submitted: false) } + before_create(:assign_accession) before_validation(:propose_and_save_title, if: :submitted?) before_destroy(:return_names_to_draft) diff --git a/test/controllers/registers_controller_test.rb b/test/controllers/registers_controller_test.rb index b06258a1..77235cca 100644 --- a/test/controllers/registers_controller_test.rb +++ b/test/controllers/registers_controller_test.rb @@ -1,8 +1,35 @@ require 'test_helper' class RegistersControllerTest < ActionDispatch::IntegrationTest + include Devise::Test::IntegrationHelpers + setup do + @user = users(:contributor) @register = registers(:draft) + @submitted_register = registers(:submitted) + @notified_register = registers(:notified) + + sign_in(@user) end + test 'draft index only includes draft registers' do + get registers_path(status: :draft) + + assert_response :success + assert_includes response.body, @register.acc_url + assert_not_includes response.body, @submitted_register.acc_url + assert_not_includes response.body, @notified_register.acc_url + end + + test 'new register form only offers draft registers' do + get new_register_path + + assert_response :success + assert_select 'select[name=existing_register]' do |select| + options = select.css('option').map(&:text).join(' ') + assert_includes options, @register.accession + assert_not_includes options, @submitted_register.accession + assert_not_includes options, @notified_register.accession + end + end end diff --git a/test/fixtures/registers.yml b/test/fixtures/registers.yml index 8a74d6f9..b0fe0580 100644 --- a/test/fixtures/registers.yml +++ b/test/fixtures/registers.yml @@ -15,3 +15,11 @@ submitted: notified: false validated: false publication: one + +notified: + accession: r:notified01 + user: contributor + submitted: false + notified: true + validated: false + publication: one From 143fd2cc358bd5a5923be49c987bc92f17962ef5 Mon Sep 17 00:00:00 2001 From: vangberg Date: Mon, 29 Jun 2026 14:19:14 +0200 Subject: [PATCH 4/4] fixtures: contributor/curator --- test/controllers/registers_controller_test.rb | 9 ++++++--- test/fixtures/checks.yml | 4 ++-- test/fixtures/curations.yml | 4 ++-- test/fixtures/users.yml | 7 +++++++ 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/test/controllers/registers_controller_test.rb b/test/controllers/registers_controller_test.rb index 77235cca..bcda1eda 100644 --- a/test/controllers/registers_controller_test.rb +++ b/test/controllers/registers_controller_test.rb @@ -4,15 +4,16 @@ class RegistersControllerTest < ActionDispatch::IntegrationTest include Devise::Test::IntegrationHelpers setup do - @user = users(:contributor) + @contributor = users(:contributor) + @curator = users(:curator) @register = registers(:draft) @submitted_register = registers(:submitted) @notified_register = registers(:notified) - - sign_in(@user) end test 'draft index only includes draft registers' do + sign_in(@curator) + get registers_path(status: :draft) assert_response :success @@ -22,6 +23,8 @@ class RegistersControllerTest < ActionDispatch::IntegrationTest end test 'new register form only offers draft registers' do + sign_in(@contributor) + get new_register_path assert_response :success diff --git a/test/fixtures/checks.yml b/test/fixtures/checks.yml index cd21879a..0ae3b97c 100644 --- a/test/fixtures/checks.yml +++ b/test/fixtures/checks.yml @@ -2,12 +2,12 @@ one: name: one - user: contributor + user: curator kind: MyText pass: false two: name: two - user: contributor + user: curator kind: MyText pass: false diff --git a/test/fixtures/curations.yml b/test/fixtures/curations.yml index a82d6408..08f6ab8a 100644 --- a/test/fixtures/curations.yml +++ b/test/fixtures/curations.yml @@ -2,14 +2,14 @@ one: name: one - user: contributor + user: curator kind_int: 1 status_int: 1 notes: MyText two: name: two - user: contributor + user: curator kind_int: 1 status_int: 1 notes: MyText diff --git a/test/fixtures/users.yml b/test/fixtures/users.yml index faf403d3..5da6443d 100644 --- a/test/fixtures/users.yml +++ b/test/fixtures/users.yml @@ -4,6 +4,13 @@ contributor: username: contributor email: contributor@example.com contributor: true + curator: false + confirmed_at: <%= Time.current %> + +curator: + username: curator + email: curator@example.com + contributor: true curator: true confirmed_at: <%= Time.current %> # column: value