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/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/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/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..bcda1eda 100644 --- a/test/controllers/registers_controller_test.rb +++ b/test/controllers/registers_controller_test.rb @@ -1,8 +1,38 @@ require 'test_helper' class RegistersControllerTest < ActionDispatch::IntegrationTest + include Devise::Test::IntegrationHelpers + setup do - @register = registers(:one) + @contributor = users(:contributor) + @curator = users(:curator) + @register = registers(:draft) + @submitted_register = registers(:submitted) + @notified_register = registers(:notified) + end + + test 'draft index only includes draft registers' do + sign_in(@curator) + + 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 + sign_in(@contributor) + + 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/checks.yml b/test/fixtures/checks.yml index fb030049..0ae3b97c 100644 --- a/test/fixtures/checks.yml +++ b/test/fixtures/checks.yml @@ -2,12 +2,12 @@ one: name: one - user: one + user: curator kind: MyText pass: false two: name: two - user: two + user: curator 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..08f6ab8a 100644 --- a/test/fixtures/curations.yml +++ b/test/fixtures/curations.yml @@ -2,14 +2,14 @@ one: name: one - user: one + user: curator kind_int: 1 status_int: 1 notes: MyText two: name: two - user: two + user: curator 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..b0fe0580 100644 --- a/test/fixtures/registers.yml +++ b/test/fixtures/registers.yml @@ -1,17 +1,25 @@ # 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: + accession: r:sumbit01 + user: contributor + submitted: true + notified: false + validated: false + publication: one + +notified: + accession: r:notified01 + user: contributor submitted: false + notified: true 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..5da6443d 100644 --- a/test/fixtures/users.yml +++ b/test/fixtures/users.yml @@ -1,10 +1,16 @@ # Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html -one: - username: user_one - email: user_one@example.com +contributor: + username: contributor + email: contributor@example.com + contributor: true + curator: false + confirmed_at: <%= Time.current %> -two: - username: user_two - email: user_two@example.com +curator: + username: curator + email: curator@example.com + contributor: true + curator: true + confirmed_at: <%= Time.current %> # column: value 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 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