Tests for the modules with a keep_stash option
Jose Luis Martinez [Wed, 11 May 2011 07:21:04 +0000 (09:21 +0200)]
t/02-app-keepstash.t [new file with mode: 0644]
t/lib/KeepStash.pm [new file with mode: 0644]
t/lib/KeepStash/Controller/Root.pm [new file with mode: 0644]
t/lib/KeepStash/View/TT.pm [new file with mode: 0644]
t/lib/KeepStash/root/keepstash_call.tt [new file with mode: 0644]
t/lib/KeepStash/root/subrequest_keepstash_index.tt [new file with mode: 0644]
t/lib/KeepStash/root/visit_keepstash_index.tt [new file with mode: 0644]

diff --git a/t/02-app-keepstash.t b/t/02-app-keepstash.t
new file mode 100644 (file)
index 0000000..eaaf4fb
--- /dev/null
@@ -0,0 +1,24 @@
+use strict;
+use warnings;
+use FindBin qw/$Bin/;
+use lib "$Bin/lib";
+
+use Test::More;
+use Catalyst::Test 'KeepStash';
+
+my $content;
+
+$content = get('/subrequest_keepstash_index');
+
+# Because of the way SubRequest and Catalyst interact, the first level of the stash will get copied. On return to the root request,
+# the first level of the stash will remain intact. Deep datastructures will be changed by subrequests, though
+like($content, qr/-------ROOT------------\nShallow value: 5\nDeep Value: 9\n/, 'Got expected values in the stash');
+like($content, qr/-------1st-------------\nShallow value: 6\nDeep Value: 10\nNew Value: \n/, 'Got expected values in the 1st call');
+like($content, qr/-------2nd-------------\nShallow value: 6\nDeep Value: 11\nNew Value: \n/, 'Got expected values in the 2nd call');
+
+$content = get('/visit_keepstash_index');
+like($content, qr/-------ROOT------------\nShallow value: 5\nDeep Value: 9\n/, 'Got expected values in the stash');
+like($content, qr/-------1st-------------\nShallow value: 6\nDeep Value: 10\nNew Value: \n/,    'Got expected values in the 1st call');
+like($content, qr/-------2nd-------------\nShallow value: 7\nDeep Value: 11\nNew Value: new\n/, 'Got expected values in the 2nd call');
+
+done_testing;
diff --git a/t/lib/KeepStash.pm b/t/lib/KeepStash.pm
new file mode 100644 (file)
index 0000000..a8bf393
--- /dev/null
@@ -0,0 +1,20 @@
+package KeepStash;
+
+use strict;
+use warnings;
+
+use Catalyst::Runtime '5.70';
+
+use base qw/Catalyst/;
+use Catalyst qw/
+    SubRequest
+/;
+
+our $VERSION = '0.01';
+
+
+__PACKAGE__->config( name => 'KeepStash' );
+
+__PACKAGE__->setup();
+
+1;
diff --git a/t/lib/KeepStash/Controller/Root.pm b/t/lib/KeepStash/Controller/Root.pm
new file mode 100644 (file)
index 0000000..c911af3
--- /dev/null
@@ -0,0 +1,29 @@
+package KeepStash::Controller::Root;
+
+use strict;
+use warnings;
+use base 'Catalyst::Controller';
+
+__PACKAGE__->config->{namespace} = '';
+
+sub subrequest_keepstash_index : Path('subrequest_keepstash_index') :Args(0) {
+    my ($self, $c) = @_;
+    $c->stash->{'stash_value'} = 5;
+    $c->stash->{'deep'}->{'stash_value'} = 9;
+}
+
+sub visit_keepstash_index : Path('visit_keepstash_index') :Args(0) {
+    my ($self, $c) = @_;
+    $c->stash->{'stash_value'} = 5;
+    $c->stash->{'deep'}->{'stash_value'} = 9;
+}
+
+sub keepstash_call : Path('keepstash_call') :Args(0) {
+    my ($self, $c) = @_;
+    $c->stash->{'stash_value'}++;
+    $c->stash->{'deep'}->{'stash_value'}++;
+}
+
+sub end : ActionClass('RenderView') {}
+
+1;
diff --git a/t/lib/KeepStash/View/TT.pm b/t/lib/KeepStash/View/TT.pm
new file mode 100644 (file)
index 0000000..bfbe3ae
--- /dev/null
@@ -0,0 +1,21 @@
+package KeepStash::View::TT;
+use Moose;
+
+extends 'Catalyst::View::TT';
+with 'Catalyst::View::Component::SubInclude';
+
+__PACKAGE__->config(
+    TEMPLATE_EXTENSION => '.tt',
+    subinclude_plugin => 'SubRequest',
+    subinclude_plugin => 'Visit',
+    subinclude => {
+        'SubRequest' => {
+            keep_stash => 1
+        },
+        'Visit' => {
+            keep_stash => 1
+        }
+    },
+);
+
+1;
diff --git a/t/lib/KeepStash/root/keepstash_call.tt b/t/lib/KeepStash/root/keepstash_call.tt
new file mode 100644 (file)
index 0000000..ad5bb0a
--- /dev/null
@@ -0,0 +1,3 @@
+Shallow value: [% stash_value %]
+Deep Value: [% deep.stash_value %]
+New Value: [% new_value; c.stash.new_value = 'new' %]
diff --git a/t/lib/KeepStash/root/subrequest_keepstash_index.tt b/t/lib/KeepStash/root/subrequest_keepstash_index.tt
new file mode 100644 (file)
index 0000000..d2298be
--- /dev/null
@@ -0,0 +1,7 @@
+-------ROOT------------
+Shallow value: [% stash_value %]
+Deep Value: [% deep.stash_value %]
+-------1st-------------
+[% subinclude_using('SubRequest', '/keepstash_call') %]
+-------2nd-------------
+[% subinclude_using('SubRequest', '/keepstash_call') %]
diff --git a/t/lib/KeepStash/root/visit_keepstash_index.tt b/t/lib/KeepStash/root/visit_keepstash_index.tt
new file mode 100644 (file)
index 0000000..ed1fd90
--- /dev/null
@@ -0,0 +1,7 @@
+-------ROOT------------
+Shallow value: [% stash_value %]
+Deep Value: [% deep.stash_value %]
+-------1st-------------
+[% subinclude_using('Visit','/keepstash_call') %]
+-------2nd-------------
+[% subinclude_using('Visit','/keepstash_call') %]