1 ## A test for adding stocks
2 ## Jeremy D. Edwards (jde22@cornell.edu) 2015
3 ##CXGN::Stock::AddStocks is DEPRECATED. Please use CXGN::Stock::Accession->store, which inherits from CXGN::Stock
11 use SGN::Test::Fixture;
12 use CXGN::People::Person;
16 my $f = SGN::Test::Fixture->new();
17 my $schema = $f->bcs_schema();
18 my $phenome_schema = $f->phenome_schema();
23 BEGIN {use_ok('CXGN::Stock::AddStocks');}
24 BEGIN {require_ok('Moose');}
26 my @stocks = qw( TestAddStock1 TestAddStock2 );
27 my $species = "Solanum lycopersicum";
28 my $owner_name = "johndoe"; #johndoe is a test user that exists in the fixture
30 ok(my $stock_add = CXGN::Stock::AddStocks
33 phenome_schema => $phenome_schema,
37 owner_name => $owner_name,
38 }),"Create AddStocks object");
40 is($stock_add->validate_stocks(), 1, "Validate new stocks don't already exist"); #is true when none of the stock names in the array exist in the database.
42 ok($stock_add->add_accessions(), "Add new stocks");
44 my $stock_search = $schema->resultset("Stock::Stock")
46 uniquename => $stocks[0],
48 ok($stock_search->first(), "Stock exists after adding");
50 my $stock_search_2 = $schema->resultset("Stock::Stock")
52 uniquename => $stocks[1],
54 ok($stock_search_2->first(), "Multiple stocks added");
56 my $organism = $schema->resultset("Organism::Organism")
60 my $organism_id = $organism->organism_id();
62 is($stock_search->first()->organism_id(), $organism_id, "Organism id on added stocks is correct");
64 is($stock_add->validate_stocks(), undef, "Stocks should not validate after being added");
66 my $owner_sp_person_id = CXGN::People::Person->get_person_by_username($dbh, $owner_name);
68 my $owner_search = $phenome_schema->resultset("StockOwner")
70 stock_id => $stock_search->first()->stock_id(),
72 is($owner_search->sp_person_id(), $owner_sp_person_id, "Stock owner attached to added stock");
74 is($stock_add->validate_organism(), 1, "Species name validation");
76 is($stock_add->validate_owner(), 1, "Stock owner name validation");
78 $stock_add->set_species("wrongname");
80 is($stock_add->validate_stocks(), undef, "Incorrect species should not validate");
82 $stock_add->set_owner_name("wrongowner");
84 is($stock_add->validate_owner(), undef, "Stock owner names that do not exist should not validate");
87 my $population_cvterm = $schema->resultset("Cv::Cvterm")->create_with(
88 { name => 'population',
93 my $population_name = "test_1_population";
95 my @populations_to_add = ( $population_name );
97 ok(my $add_population = CXGN::Stock::AddStocks
100 phenome_schema => $phenome_schema,
102 stocks => \@populations_to_add,
104 owner_name => $owner_name,
105 }),"Create AddStocks object to add population");
107 ok($add_population->add_population(), "Add new population");
109 my @stocks_in_population = qw( GroupTestAddStock1 GroupTestAddStock2 );
110 ok(my $stock_add_in_population = CXGN::Stock::AddStocks
113 phenome_schema => $phenome_schema,
115 stocks => \@stocks_in_population,
117 population_name => $population_name,
118 owner_name => $owner_name,
119 }),"Create AddStocks object");
121 is($stock_add_in_population->validate_population(), 1, "Stock population validation");
123 ok($stock_add_in_population->add_accessions(), "Add new stocks to a population");
125 my $accession_population_find = $schema->resultset("Stock::Stock")
127 uniquename => $population_name,
128 type_id => $population_cvterm->cvterm_id(),
131 my $population_member_cvterm = $schema->resultset("Cv::Cvterm")
134 cv => 'stock_relationship',
138 my $population_member = $schema->resultset("Stock::Stock")
140 uniquename => $stocks_in_population[0],
141 'object.uniquename'=> $population_name,
142 'stock_relationship_subjects.type_id' => $population_member_cvterm->cvterm_id()
143 }, {join => {'stock_relationship_subjects' => 'object'}});
145 is($population_member->uniquename(), $stocks_in_population[0], "Find members of population");