1#!/usr/bin/env perl
2use warnings;
3use strict;
4
5use Jifty::Test::Dist tests => 24;
6use TestApp::Notification::Foo;
7
8sub send_and_receive {
9    Jifty::Test->setup_mailbox;
10
11    my $notification = TestApp::Notification::Foo->new;
12    $notification->send_one_message;
13
14    my @emails = Jifty::Test->messages;
15    Jifty::Test->teardown_mailbox;
16
17    is(scalar @emails, 1, "Sent one notification email");
18    return Email::MIME->new($emails[0]->as_string)->body_str . "\n";
19}
20
21# Normal, non-ssl with no request object
22ok !Jifty->web->request, "no request object";
23ok !Jifty->web->is_ssl, "is_ssl returns 0";
24my $body = send_and_receive();
25like $body, qr/^http:/, "Got http:// notification url for is_ssl = 0 with no request object";
26like +Jifty->web->url(path => '/foo'), qr/^http:/, "Got http:// url as normal";
27
28# Normal, non-ssl with an http request object
29Jifty::Test->web;
30ok +Jifty->web->request, "got request object";
31ok !Jifty->web->is_ssl, "is_ssl returns 0";
32$body = send_and_receive();
33like $body, qr/^http:/, "Got http:// notification url for is_ssl = 0 with request object";
34like +Jifty->web->url(path => '/foo'), qr/^http:/, "Got http:// url as normal";
35
36
37# Override Jifty->web->is_ssl to always return true for this test
38# to fake an HTTPS environment
39{ no warnings 'redefine'; *Jifty::Web::is_ssl = sub { 1 }; }
40
41#
42# Normal, ssl indicated, but no request object
43#
44Jifty->web->request(undef);
45ok !Jifty->web->request, "no request object";
46ok +Jifty->web->is_ssl, "is_ssl returns 1";
47$body = send_and_receive();
48like $body, qr/^http:/, "Got http:// notification url for is_ssl = 1 with no request object";
49like +Jifty->web->url(path => '/foo'), qr/^https:/, "Got https:// url as normal";
50
51
52#
53# Normal, ssl with an https request object
54#
55Jifty::Test->web;
56my $req = Jifty->web->request;
57
58# Fake https scheme for the request object
59$req->scheme('https');
60$req->uri->scheme('https');
61$req->uri->host('localhost');
62
63ok $req, "got request object";
64is $req->scheme, 'https', "https scheme in request";
65ok $req->uri, "got request->uri";
66is $req->uri->scheme, 'https', "https scheme in request->uri";
67ok $req->uri->host, "got request->uri->host";
68ok +Jifty->web->is_ssl, "is_ssl returns 1";
69
70$body = send_and_receive();
71like $body, qr/^http:/, "Got http:// notification url for is_ssl = 1 with request object";
72like +Jifty->web->url(path => '/foo'), qr/^https:/, "Got https:// url as normal";
73
74