scinote-web/test/models/protocol_test.rb

163 lines
3.6 KiB
Ruby
Raw Normal View History

2016-07-21 19:11:15 +08:00
require 'test_helper'
class ProtocolTest < ActiveSupport::TestCase
def setup
@user = users(:steve)
2017-01-25 20:56:43 +08:00
@team = teams(:biosistemika)
2016-07-21 19:11:15 +08:00
@my_module = my_modules(:sample_prep)
@global = protocols(:rna_test_protocol_global)
@p = Protocol.new(
my_module: @my_module,
2017-01-25 20:56:43 +08:00
team: @team
2016-07-21 19:11:15 +08:00
)
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)
2016-10-11 14:25:32 +08:00
2017-01-25 20:56:43 +08:00
test 'protocol_type enum works' do
2016-07-21 19:11:15 +08:00
@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
2017-01-25 20:56:43 +08:00
test 'should not validate without team' do
@p.team = @team
2016-07-21 19:11:15 +08:00
assert @p.valid?
2017-01-25 20:56:43 +08:00
@p.team = nil
2016-07-21 19:11:15 +08:00
assert_not @p.valid?
end
2017-01-25 20:56:43 +08:00
test 'should not validate without protocol type' do
2016-07-21 19:11:15 +08:00
assert @p.valid?
@p.protocol_type = nil
assert_not @p.valid?
end
2017-01-25 20:56:43 +08:00
test 'should count steps of protocol' do
2016-07-21 19:11:15 +08:00
assert_equal 0, @p.number_of_steps
end
2017-01-25 20:56:43 +08:00
test 'specific validations for :unlinked' do
2016-07-21 19:11:15 +08:00
p = new_unlinked_protocol
assert p.valid?
p.my_module = nil
assert_not p.valid?
end
2017-01-25 20:56:43 +08:00
test 'specific validations for :linked' do
2016-07-21 19:11:15 +08:00
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
2017-01-25 20:56:43 +08:00
test 'specific validations for :in_repository' do
2016-07-21 19:11:15 +08:00
[
:in_repository_private,
:in_repository_public,
:in_repository_archived
].each do |protocol_type|
p = new_repository_protocol(protocol_type)
2017-01-25 20:56:43 +08:00
if protocol_type == :in_repository_archived
2016-07-21 19:11:15 +08:00
p.archived_by = @user
p.archived_on = Time.now
2017-01-25 20:56:43 +08:00
elsif protocol_type == :in_repository_public
2016-07-21 19:11:15 +08:00
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
2017-01-25 20:56:43 +08:00
test 'specific validations for :in_repository_public' do
2016-07-21 19:11:15 +08:00
p = new_repository_protocol(:in_repository_public)
p.published_on = nil
assert_not p.valid?
p.published_on = Time.now
assert p.valid?
end
2017-01-25 20:56:43 +08:00
test 'specific validations for :in_repository_archived' do
2016-07-21 19:11:15 +08:00
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,
2017-01-25 20:56:43 +08:00
team: @team
2016-07-21 19:11:15 +08:00
)
end
def new_linked_protocol
Protocol.new(
protocol_type: :linked,
my_module: @my_module,
2017-01-25 20:56:43 +08:00
team: @team,
2016-07-21 19:11:15 +08:00
added_by: @user,
parent: @global,
parent_updated_at: @global.updated_at
)
end
def new_repository_protocol(type)
Protocol.new(
2017-01-25 20:56:43 +08:00
name: 'Test protocol',
2016-07-21 19:11:15 +08:00
protocol_type: type,
2017-01-25 20:56:43 +08:00
team: @team,
2016-07-21 19:11:15 +08:00
added_by: @user
)
end
2016-10-11 14:25:32 +08:00
end