Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file not shown.
Binary file not shown.
79 changes: 76 additions & 3 deletions test/models/tutorial_test.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,80 @@
require 'test_helper'

class TutorialTest < ActiveSupport::TestCase
# test "the truth" do
# assert true
# end
test 'batch parses a name from a spreadsheet' do
tutorial = upload_batch_spreadsheet('SCR_UploadBatch-Nanoclepta.xlsx')

assert_equal 1, tutorial.step
assert_empty tutorial.value(:genomes)
assert_equal 1, tutorial.value(:names).size
assert_equal 'Nanoclepta', tutorial.value(:names).first['name']
assert_equal 'Nanobdellaceae', tutorial.value(:names).first['parent']
end

test 'batch parses an incertae sedis name from a spreadsheet' do
tutorial = upload_batch_spreadsheet(
'SCR_UploadBatch-Luteria-Incertae_sedis.xlsx'
)

assert_equal 1, tutorial.step
assert_empty tutorial.value(:genomes)
assert_equal 1, tutorial.value(:names).size
assert_equal 'Luteria', tutorial.value(:names).first['name']
assert_equal(
'incertae sedis (Bacteria)', tutorial.value(:names).first['parent']
)
end

test 'batch creates a parent placement' do
parent = Name.create!(
name: 'Nanobdellaceae', rank: 'family', status: 15
)
placement = create_batch_placement(
name: 'Nanoclepta', rank: 'genus',
description: 'A genus of ectosymbiotic archaea.', parent: parent.name
)

assert_equal parent, placement.parent
assert_nil placement.incertae_sedis
end

test 'batch creates an incertae sedis placement' do
explanation = 'The genus cannot currently be assigned to a family.'
placement = create_batch_placement(
name: 'Luteria', rank: 'genus', description: explanation,
parent: 'incertae sedis (Bacteria)'
)

assert_nil placement.parent
assert_equal 'incertae sedis (Bacteria)', placement.incertae_sedis
assert_equal explanation, placement.incertae_sedis_text.to_plain_text
end

private

def create_batch_placement(name:, **attributes)
tutorial = Tutorial.create!(
pipeline: 'batch', user: users(:contributor), step: 1,
data: {
names: [attributes.merge(name: name)], genomes: []
}.to_json
)

assert tutorial.batch_step_01({}, users(:contributor))

placement = Name.find_by!(name: name).placement
assert_not_nil placement
assert_predicate placement, :preferred?
placement
end

def upload_batch_spreadsheet(filename)
tutorial = Tutorial.create!(
pipeline: 'batch', user: users(:contributor), step: 0, ongoing: true
)
File.open(Rails.root.join('test/fixtures/files', filename)) do |file|
assert tutorial.batch_step_00({ file: file }, users(:contributor))
end
tutorial
end
end
98 changes: 97 additions & 1 deletion test/system/tutorials_test.rb
Original file line number Diff line number Diff line change
@@ -1,8 +1,104 @@
# frozen_string_literal: true

require 'application_system_test_case'

class TutorialsTest < ApplicationSystemTestCase
include Warden::Test::Helpers

setup do
@tutorial = tutorials(:one)
@user = users(:contributor)
@tutorial = Tutorial.create!(
pipeline: 'batch', user: @user, step: 0, ongoing: true
)

login_as(@user, scope: :user)
end

teardown { Warden.test_reset! }

test 'batch uploading a single genus' do
family = Name.create!(name: 'Nanobdellaceae', rank: 'family', status: 15)
type_species = Name.create!(
name: 'Nanoclepta minutus', rank: 'species', status: 15
)
visit tutorial_url(@tutorial)

assert_text 'Step 0: Upload spreadsheet'

upload_batch_spreadsheet('SCR_UploadBatch-Nanoclepta.xlsx')
assert_batch_review(name: 'Nanoclepta', parent: 'Nanobdellaceae')
create_batch_entries

genus = Name.find_by!(name: 'Nanoclepta')
@tutorial.reload

assert_equal 'genus', genus.rank
assert_equal family, genus.parent
assert_equal type_species, genus.nomenclatural_type
assert_equal @tutorial, genus.tutorial
assert_equal ['Nanoclepta'], @tutorial.names.pluck(:name)

complete_batch_tutorial
end

test 'batch uploading a single incertae sedis genus' do
type_species = Name.create!(
name: 'Luteria ianthellae', rank: 'species', status: 15
)
visit tutorial_url(@tutorial)

upload_batch_spreadsheet('SCR_UploadBatch-Luteria-Incertae_sedis.xlsx')
assert_batch_review(name: 'Luteria', parent: 'unknown')
create_batch_entries

genus = Name.find_by!(name: 'Luteria')
@tutorial.reload

assert_equal 'genus', genus.rank
assert_nil genus.parent
assert_equal 'incertae sedis (Bacteria)', genus.incertae_sedis
assert_equal type_species, genus.nomenclatural_type
assert_equal @tutorial, genus.tutorial
assert_equal ['Luteria'], @tutorial.names.pluck(:name)

complete_batch_tutorial
end

private

def complete_batch_tutorial
click_button 'Continue'

assert_current_path new_register_path(tutorial: @tutorial)
assert_not @tutorial.reload.ongoing?
end

def upload_batch_spreadsheet(filename)
attach_file(
'Batch spreadsheet',
Rails.root.join('test/fixtures/files', filename)
)
click_button 'Continue'
end

def assert_batch_review(name:, parent:)
assert_text 'Step 1: Review parsed data'
within '#batch-names-0-h' do
assert_text name
assert_text 'genus of'
assert_text parent
end
assert_no_selector '#batch-names-1-h'

assert_no_selector '#batch-genomes-0-h'
end

def create_batch_entries
assert_difference('Name.count', 1) do
assert_no_difference('Genome.count') do
click_button 'Continue'
assert_text 'Step 2: Validation list'
end
end
end
end
Loading