scinote-web/test/models/protocol_test.rb
2017-01-25 13:56:43 +01:00

162 lines
3.6 KiB
Ruby

require 'test_helper'
class ProtocolTest < ActiveSupport::TestCase
def setup
@user = users(:steve)
@team = teams(:biosistemika)
@my_module = my_modules(:sample_prep)
@global = protocols(:rna_test_protocol_global)
@p = Protocol.new(
my_module: @my_module,
team: @team
)
end
should validate_length_of(:name).is_at_most(Constants::NAME_MAX_LENGTH)
should validate_length_of(:description).is_at_most(Constants::TEXT_MAX_LENGTH)
test 'protocol_type enum works' do
@p.protocol_type = :unlinked
assert @p.in_module?
@p.protocol_type = :linked
assert @p.in_module?
@p.protocol_type = :in_repository_private
assert @p.in_repository?
@p.protocol_type = :in_repository_public
assert @p.in_repository?
@p.protocol_type = :in_repository_archived
assert @p.in_repository?
end
test 'should not validate without team' do
@p.team = @team
assert @p.valid?
@p.team = nil
assert_not @p.valid?
end
test 'should not validate without protocol type' do
assert @p.valid?
@p.protocol_type = nil
assert_not @p.valid?
end
test 'should count steps of protocol' do
assert_equal 0, @p.number_of_steps
end
test 'specific validations for :unlinked' do
p = new_unlinked_protocol
assert p.valid?
p.my_module = nil
assert_not p.valid?
end
test 'specific validations for :linked' do
p = new_linked_protocol
assert p.valid?
p.my_module = nil
assert_not p.valid?
p = new_linked_protocol
p.added_by = nil
assert_not p.valid?
p = new_linked_protocol
p.parent = nil
assert_not p.valid?
p = new_linked_protocol
p.parent_updated_at = nil
assert_not p.valid?
end
test 'specific validations for :in_repository' do
[
:in_repository_private,
:in_repository_public,
:in_repository_archived
].each do |protocol_type|
p = new_repository_protocol(protocol_type)
if protocol_type == :in_repository_archived
p.archived_by = @user
p.archived_on = Time.now
elsif protocol_type == :in_repository_public
p.published_on = Time.now
end
assert p.valid?
p.name = nil
assert_not p.valid?
p = new_repository_protocol(protocol_type)
p.added_by = nil
assert_not p.valid?
p = new_repository_protocol(protocol_type)
p.my_module = @my_module
assert_not p.valid?
p = new_repository_protocol(protocol_type)
p.parent = @global
assert_not p.valid?
p = new_repository_protocol(protocol_type)
p.parent_updated_at = Time.now
assert_not p.valid?
end
end
test 'specific validations for :in_repository_public' do
p = new_repository_protocol(:in_repository_public)
p.published_on = nil
assert_not p.valid?
p.published_on = Time.now
assert p.valid?
end
test 'specific validations for :in_repository_archived' do
p = new_repository_protocol(:in_repository_archived)
p.archived_by = nil
p.archived_on = nil
assert_not p.valid?
p.archived_by = @user
assert_not p.valid?
p.archived_on = Time.now
assert p.valid?
end
private
def new_unlinked_protocol
Protocol.new(
my_module: @my_module,
team: @team
)
end
def new_linked_protocol
Protocol.new(
protocol_type: :linked,
my_module: @my_module,
team: @team,
added_by: @user,
parent: @global,
parent_updated_at: @global.updated_at
)
end
def new_repository_protocol(type)
Protocol.new(
name: 'Test protocol',
protocol_type: type,
team: @team,
added_by: @user
)
end
end