From 603a5010d16c98e978858adf8f0481607616c5f1 Mon Sep 17 00:00:00 2001 From: vangberg Date: Wed, 19 Aug 2026 11:06:56 +0200 Subject: [PATCH] System tests for placement --- test/fixtures/names.yml | 1 + test/fixtures/placements.yml | 5 +++ test/system/placements_test.rb | 80 +++++++++++++++++++++++++++++++++- 3 files changed, 85 insertions(+), 1 deletion(-) diff --git a/test/fixtures/names.yml b/test/fixtures/names.yml index 43f70479..45acddfb 100644 --- a/test/fixtures/names.yml +++ b/test/fixtures/names.yml @@ -17,6 +17,7 @@ escherichia_coli: name: Escherichia coli rank: species status: 15 # SeqCode + parent: escherichia escherichia_colie: name: Escherichia colie diff --git a/test/fixtures/placements.yml b/test/fixtures/placements.yml index 4cb5ee4a..2488e35d 100644 --- a/test/fixtures/placements.yml +++ b/test/fixtures/placements.yml @@ -9,3 +9,8 @@ two: name: two parent: two preferred: false + +escherichia_coli: + name: escherichia_coli + parent: escherichia + preferred: true diff --git a/test/system/placements_test.rb b/test/system/placements_test.rb index e72852de..49284cd9 100644 --- a/test/system/placements_test.rb +++ b/test/system/placements_test.rb @@ -1,8 +1,86 @@ +# frozen_string_literal: true + require 'application_system_test_case' class PlacementsTest < ApplicationSystemTestCase + include Warden::Test::Helpers + setup do - @placement = placements(:one) + @user = users(:curator) + @parent = names(:escherichia) + + login_as(@user, scope: :user) + end + + teardown { Warden.test_reset! } + + test 'creating the first placement for a name' do + name = Name.create!( + name: 'Escherichia fergusonii', rank: 'species', status: 5, + created_by: @user + ) + + assert_nil(name.placement) + + visit new_placement_path(name) + fill_in 'Genus', with: @parent.name + click_button 'Submit' + + assert_text 'Placement successfully updated' + assert_current_path name_path(name) + + name.reload + + assert_equal(@parent, name.placement.parent) + assert_predicate(name.placement, :preferred?) + end + + test 'declaring incertae sedis in Bacteria' do + name = Name.create!( + name: 'Escherichia fergusonii', rank: 'species', status: 5, + created_by: @user + ) + explanation = 'Its placement within Bacteria is unresolved.' + + visit new_placement_path(name) + select 'Incertae sedis (Bacteria)', from: 'Incertae sedis' + fill_in_rich_text_area( + 'Description of the classification problems', with: explanation + ) + click_button 'Submit' + + assert_text 'Placement successfully updated' + assert_current_path name_path(name) + + name.reload + placement = name.placement + + assert_equal('Incertae sedis (Bacteria)', placement.incertae_sedis) + assert_equal(explanation, placement.incertae_sedis_text.to_plain_text) + assert_nil(placement.parent) + assert_predicate(placement, :preferred?) + end + + test 'adding a second non-preferred placement' do + name = names(:escherichia_coli) + alternative_parent = Name.create!( + name: 'Shigella', rank: 'genus', status: 15 + ) + + visit name_path(name) + click_link 'Report alternative placement' + fill_in 'Genus', with: alternative_parent.name + click_button 'Submit' + + assert_text 'Placement successfully updated' + assert_current_path name_path(name) + + name.reload + alternative_placements = name.alt_placements + + assert_equal(@parent, name.placement.parent) + assert_equal([alternative_parent], alternative_placements.map(&:parent)) + assert_not_predicate(alternative_placements.first, :preferred?) end end