start fixing test for multi cat phenotype upload.
[sgn.git] / t / unit_fixture / CXGN / Stock / AddStocks.t
blobf2ee3a04d77435e758f916ca60fbff2eebc2e9ad
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
5 use strict;
6 use warnings;
8 use lib 't/lib';
10 use Test::More;
11 use SGN::Test::Fixture;
12 use CXGN::People::Person;
14 use Data::Dumper;
16 my $f = SGN::Test::Fixture->new();
17 my $schema = $f->bcs_schema();
18 my $phenome_schema = $f->phenome_schema();
19 my $dbh = $f->dbh();
21 $f->get_db_stats();
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
31    ->new({
32        schema => $schema,
33        phenome_schema => $phenome_schema,
34        dbh => $dbh,
35        stocks => \@stocks,
36        species => $species,
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")
45     ->search({
46         uniquename => $stocks[0],
47              } );
48 ok($stock_search->first(), "Stock exists after adding");
50 my $stock_search_2 = $schema->resultset("Stock::Stock")
51     ->search({
52         uniquename => $stocks[1],
53              } );
54 ok($stock_search_2->first(), "Multiple stocks added");
56 my $organism = $schema->resultset("Organism::Organism")
57     ->find({
58         species => $species,
59            } );
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")
69     ->find({
70         stock_id     => $stock_search->first()->stock_id(),
71            });
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"); 
86 # Create a population
87 my $population_cvterm = $schema->resultset("Cv::Cvterm")->create_with(
88     { name   => 'population',
89       cv     => 'stock_type',
90      
91     });
93 my $population_name = "test_1_population";
95 my @populations_to_add = ( $population_name );
97 ok(my $add_population = CXGN::Stock::AddStocks
98    ->new({
99        schema => $schema,
100        phenome_schema => $phenome_schema,
101        dbh => $dbh,
102        stocks => \@populations_to_add,
103        species => $species,
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
111    ->new({
112        schema => $schema,
113        phenome_schema => $phenome_schema,
114        dbh => $dbh,
115        stocks => \@stocks_in_population,
116        species => $species,
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")
126       ->find({
127           uniquename => $population_name,
128           type_id => $population_cvterm->cvterm_id(),
129                } );
131 my $population_member_cvterm = $schema->resultset("Cv::Cvterm")
132     ->create_with({
133         name   => 'member_of',
134         cv     => 'stock_relationship',
136                   });
138 my $population_member = $schema->resultset("Stock::Stock")
139     ->find({
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"); 
147 $f->clean_up_db();
149 done_testing();