Merge branch 'master' into topic/dt_feature_search
[sgn.git] / t / legacy / integration / bulk_feature.t
blobc67e1a03ffeb30f00a226fbeb2294d6e4da7431a
1 use strict;
2 use warnings;
3 use Test::More tests => 34;
5 use Digest::SHA1 qw/sha1_hex/;
6 use Data::Dumper;
8 use lib 't/lib';
9 use SGN::Test::Data qw/ create_test /;
10 use aliased 'SGN::Test::WWW::Mechanize' => 'Mech', skip_cgi => 1;
12 use_ok 'SGN::Controller::Bulk';
14 my $mech = Mech->new;
16 my $poly_cvterm     = create_test('Cv::Cvterm',        { name => 'polypeptide' });
17 my $poly_feature    = create_test('Sequence::Feature', { type => $poly_cvterm  });
19 # TODO: these tests depend on live data.
20 $mech->with_test_level( local => sub {
21     # do it twice to test for bugs relating to the cache directory getting removed
22     submit_bulk_form();
23     submit_bulk_form();
24     #diag $mech->content;
25 });
27 $mech->with_test_level( local => sub {
28     $mech->get('/tools/bulk/tabs/feature_tab');
29     $mech->submit_form_ok({
30         form_name => "bulk_feature",
31         fields    => {
32             ids => "BAR",
33         },
34     }, "submit bulk_feature with a single invalid identifier");
35     $mech->content_unlike(qr/Caught exception/);
36     $mech->content_contains('Your query did not contain any valid identifiers. Please try again.');
37 });
39 $mech->with_test_level( local => sub {
40     $mech->get('/tools/bulk/tabs/feature_tab');
41     $mech->submit_form_ok({
42         form_name => "bulk_feature",
43         fields    => {
44             ids => "FOO\nBAR",
45         },
46     }, "submit bulk_feature with no valid identifiers");
47     $mech->content_unlike(qr/Caught exception/);
48     $mech->content_contains('Your query did not contain any valid identifiers. Please try again.');
49 });
51 $mech->with_test_level( local => sub {
52     $mech->get('/tools/bulk/tabs/feature_tab');
53     $mech->submit_form_ok({
54         form_name => "bulk_feature",
55         fields    => {
56             ids => "\nSGN-E398616  ",
57         },
58     }, "submit bulk_feature form with leading+trailing whitespace");
59     $mech->content_unlike(qr/Caught exception/);
61     $mech->get('/tools/bulk/tabs/feature_tab');
62     $mech->submit_form_ok({
63         form_name => "bulk_feature",
64         fields    => {
65             ids => "\nSGN-E398616 BLARG",
66         },
67     }, "submit bulk_feature form with invalid identifiers");
68     $mech->content_contains('Your query was successful.');
69     $mech->content_contains('A total of 1 matching features were found for 2 identifiers provided');
70 });
72 $mech->with_test_level( local => sub {
73     $mech->get('/tools/bulk/tabs/feature_tab');
74     $mech->submit_form_ok({
75         form_name => "bulk_feature",
76         fields    => {
77             # NOTE: no trailing whitespace, to test for colliding identifiers
78             ids => "SGN-E398616",
79             feature_file => [ [ undef, 'ids.txt', Content => "AP009263\n" ] ],
80         },
81     }, "submit bulk_feature form with file upload and textarea");
82     my $sha1  = sha1_hex(<<ID_LIST);
83 SGN-E398616
84 AP009263
85 ID_LIST
87     my @flinks = $mech->find_all_links( url_regex => qr{/bulk/feature/download/$sha1\.fasta} );
89     cmp_ok(@flinks, '==', 1, "found one FASTA download link for $sha1.fasta");
90     $mech->links_ok( \@flinks );
92     for my $url (map { $_->url } (@flinks)) {
93         $mech->get( $url );
94         my $length = length($mech->content);
95         cmp_ok($length, '>', 0,"$url has a content length $length > 0");
96         $mech->content_unlike(qr/Caught exception/);
97     }
99 });
101 $mech->with_test_level( local => sub {
102     # attempt to post an empty list
103     $mech->post('/bulk/feature/submit/', { ids => "" }  );
104     $mech->content_like(qr/At least one identifier must be given/);
107 done_testing();
109 sub submit_bulk_form {
110     my $ids =<<IDS;
111 SGN-E398616
112 SGN-E540202
113 SGN-E541638
114 C06HBa0222J18.1
115 C06HBa0229B01.1
116 AP009263
117 AP009262
118 SGN-E200027
119 SGN-E201684
120 SGN-E587346
121 SGN-E443637
122 SGN-E403108
124     $mech->get_ok('/tools/bulk/tabs/feature_tab');
125     $mech->submit_form_ok({
126         form_name => "bulk_feature",
127         fields    => {
128             ids => $ids,
129         },
130     }, "submit bulk_feature form");
131     $mech->content_like(qr/Download as/);
133     my $sha1  = sha1_hex($ids);
134     my @flinks = $mech->find_all_links( url_regex => qr{/bulk/feature/download/$sha1\.fasta} );
136     cmp_ok(@flinks, '==', 1, "found one FASTA download link for $sha1.fasta");
137     $mech->links_ok( \@flinks );
139     for my $url (map { $_->url } (@flinks)) {
140         $mech->get( $url );
141         my $length = length($mech->content);
142         cmp_ok($length, '>', 0,"$url has a content length $length > 0");
143         $mech->content_unlike(qr/Caught exception/);
144     }
146     @flinks =  grep { $_ =~ qr{$sha1} } $mech->find_all_links(url_regex => qr{/bulk/feature/download/.*\.fasta} );
148     cmp_ok(@flinks, '==', 0, "found no other fasta download links") or diag("Unexpected fasta download links" . Dumper [ map {$_->url} @flinks ]);