File Coverage

blib/lib/OpenGuides/Test.pm
Criterion Covered Total %
statement 45 47 95.7
branch 10 12 83.3
condition 4 4 100.0
subroutine 9 9 100.0
pod 4 4 100.0
total 72 76 94.7


line stmt bran cond sub pod time code
1             package OpenGuides::Test;
2              
3 93     93   145517 use OpenGuides::Config;
  93         281  
  93         880  
4 93     93   36562 use Wiki::Toolkit::Setup::SQLite;
  93         982171  
  93         2765  
5              
6 93     93   634 use strict;
  93         189  
  93         2689  
7 93     93   474 use vars qw( $VERSION );
  93         179  
  93         4687  
8             $VERSION = '0.07';
9              
10 93     93   3048 use CGI;
  93         66803  
  93         782  
11              
12             =head1 NAME
13              
14             OpenGuides::Test - Methods to help test OpenGuides applications.
15              
16             =head1 DESCRIPTION
17              
18             Provides methods to help when writing tests for OpenGuides.
19             Distributed and installed as part of the OpenGuides project, not
20             intended for independent installation. This documentation is probably
21             only useful to OpenGuides developers.
22              
23             =head1 SYNOPSIS
24              
25             use OpenGuides;
26             use OpenGuides::Test;
27              
28             OpenGuides::Test::refresh_db();
29              
30             my $config = OpenGuides::Test->make_basic_config;
31             $config->default_language( "nl" );
32              
33             my $guide = OpenGuides->new( config => $config );
34              
35             OpenGuides::Test->write_data(
36             guide => $guide,
37             node => "Crabtree Tavern",
38             os_x => 523465,
39             os_y => 177490,
40             categories => "Pubs",
41             );
42              
43             =head1 METHODS
44              
45             =over 4
46              
47             =item B
48              
49             my $config = OpenGuides::Test->make_basic_config;
50             $config->default_language( "nl" );
51              
52             Makes an L object with needed fields pre-filled. You can
53             mess with it as you like then.
54              
55             =cut
56              
57             sub make_basic_config {
58 87     87 1 34193996 my $config = OpenGuides::Config->new(
59             vars => {
60             dbtype => "sqlite",
61             dbname => "t/node.db",
62             indexing_directory => "t/indexes",
63             script_url => "",
64             script_name => "",
65             site_name => "Test",
66             template_path => "./templates",
67             custom_template_path => "./custom-templates",
68             home_name => "Home",
69             geo_handler => 1,
70             force_wgs84 => 1,
71             contact_email => 'admins@example.org',
72             moderate_whitelist => "",
73             }
74             );
75              
76 87         619 eval { require Wiki::Toolkit::Search::Plucene; };
  87         99911  
77 87 50       8006949 if ( $@ ) { $config->use_plucene ( 0 ) };
  0         0  
78            
79 87         567 return $config;
80             }
81              
82             =item B
83              
84             my $config = OpenGuides::Test->make_basic_config;
85             my $guide = OpenGuides->new( config => $config );
86              
87             OpenGuides::Test->write_data(
88             guide => $guide,
89             node => "Crabtree Tavern",
90             os_x => 523465,
91             os_y => 177490,
92             categories => "Pubs\r\nPub Food",
93             );
94              
95             This method calls the C method to make its CGI
96             object; you can supply values for any key mentioned there. You should
97             supply them exactly as they would come from a CGI form, eg lines in a
98             textarea are separated by C<\r\n>.
99              
100             This method will automatically grab the checksum from the database, so
101             even if the node already exists your data will still be written. If you
102             don't want this behaviour (for example, if you're testing edit conflicts)
103             then pass in a true value to the C parameter:
104              
105             OpenGuides::Test->write_data(
106             guide => $guide,
107             node => "Crabtree Tavern",
108             omit_checksum => 1,
109             );
110              
111             If you want to grab the output, pass a true value to C:
112              
113             my $output = OpenGuides::Test->write_data(
114             guide => $guide,
115             node => "Crabtree Tavern",
116             return_output => 1,
117             );
118              
119             Similarly, if you pass a true value to C, the return value
120             will be the variables which would have been passed to the template for output:
121              
122             my %vars = OpenGuides::Test->write_data(
123             guide => $guide,
124             node => "Crabtree Tavern",
125             return_tt_vars => 1,
126             );
127              
128             =cut
129              
130             sub write_data {
131 317     317 1 1316911 my ($class, %args) = @_;
132              
133 317         1034 my $guide = delete $args{guide};
134 317         872 my $node = delete $args{node};
135              
136 317         1610 my $q = $class->make_cgi_object( %args );
137              
138             # Get the checksum of the current contents if necessary.
139 317 100       1501 unless ( $args{omit_checksum} ) {
140 315         1419 my $wiki = $guide->wiki;
141 315 100       1801 if ( $wiki->node_exists( $node ) ) {
142 16         31910 my %data = $wiki->retrieve_node( $node );
143 16         26516 $q->param( -name => "checksum", -value => $data{checksum} );
144             }
145             }
146              
147 317 100       229410 if ( $args{return_output} ) {
    50          
148 275         1587 return $guide->commit_node(
149             return_output => 1,
150             id => $node,
151             cgi_obj => $q,
152             );
153             } elsif ( $args{return_tt_vars} ) {
154 0         0 return $guide->commit_node(
155             return_tt_vars => 1,
156             id => $node,
157             cgi_obj => $q,
158             );
159             } else {
160 42         263 $guide->commit_node(
161             id => $node,
162             cgi_obj => $q,
163             );
164             }
165             }
166              
167             =item B
168              
169             my $q = OpenGuides::Test->make_cgi_object;
170              
171             You can supply values for the following keys: C, C,
172             C, C, C,
173             C, C, C, C,
174             C, C, C
, C, C,
175             C, C, C, C, C, C,
176             C, C, C, C. You should supply
177             them exactly as they would come from a CGI form, eg lines in a textarea
178             are separated by C<\r\n>.
179              
180             =cut
181              
182             sub make_cgi_object {
183 329     329 1 14819 my ( $class, %args ) = @_;
184              
185             # Set up CGI parameters ready for a node write.
186             # Most of these are in here to avoid uninitialised value warnings.
187 329         1856 my $q = CGI->new( "" );
188 329   100     67525 $args{content} ||= "foo";
189 329   100     2037 $args{edit_type} ||= "Normal edit";
190 329         1295 for my $param ( qw( content categories locales node_image node_image_licence
191             node_image_copyright node_image_url phone fax website
192             hours_text address postcode map_link os_x os_y osie_x osie_y
193             latitude longitude summary username comment edit_type
194             )
195             ) {
196 7896 100       698376 if (defined $args{$param}) {
197 1276         5870 $q->param( -name => $param, -value => $args{$param} );
198             } else {
199 6620         25255 $q->param( -name => $param, -value => '' );
200             }
201             }
202 329         31725 $ENV{REMOTE_ADDR} = "127.0.0.1";
203              
204 329         1290 return $q;
205             }
206              
207             =item B
208              
209             Openguides::Test::refresh_db();
210              
211             Unlink the existing SQLite database t/node.db and Plucene/Lucy indexes.
212             Then create a new SQLite database t/node.db
213              
214             =cut
215             sub refresh_db {
216 90     90 1 1856394 unlink "t/node.db";
217 90         103476 unlink ;
218 90         1091 Wiki::Toolkit::Setup::SQLite::setup( { dbname => "t/node.db" } );
219             }
220              
221              
222             =back
223              
224             =head1 AUTHOR
225              
226             The OpenGuides Project (openguides-dev@lists.openguides.org)
227              
228             =head1 COPYRIGHT
229              
230             Copyright (C) 2004-2013 The OpenGuides Project. All Rights Reserved.
231              
232             This module is free software; you can redistribute it and/or modify it
233             under the same terms as Perl itself.
234              
235             =cut
236              
237             1;