xref: /dokuwiki/_test/tests/inc/mailer.test.php (revision cc92aca7f711f7758d8ee36cfc1685af7a419667)
1*cc92aca7SAndreas Gohr<?php
2*cc92aca7SAndreas Gohr
3*cc92aca7SAndreas Gohr/**
4*cc92aca7SAndreas Gohr * Extends the mailer class to expose internal variables for testing
5*cc92aca7SAndreas Gohr */
6*cc92aca7SAndreas Gohrclass TestMailer extends Mailer {
7*cc92aca7SAndreas Gohr    public function prop($name){
8*cc92aca7SAndreas Gohr        return $this->$name;
9*cc92aca7SAndreas Gohr    }
10*cc92aca7SAndreas Gohr}
11*cc92aca7SAndreas Gohr
12*cc92aca7SAndreas Gohrclass mailer_test extends DokuWikiTest {
13*cc92aca7SAndreas Gohr
14*cc92aca7SAndreas Gohr
15*cc92aca7SAndreas Gohr    function test_userheader(){
16*cc92aca7SAndreas Gohr        $mail = new TestMailer();
17*cc92aca7SAndreas Gohr        $headers = $mail->prop('headers');
18*cc92aca7SAndreas Gohr        $this->assertArrayNotHasKey('X-Dokuwiki-User',$headers);
19*cc92aca7SAndreas Gohr
20*cc92aca7SAndreas Gohr        $_SERVER['REMOTE_USER'] = 'andi';
21*cc92aca7SAndreas Gohr        $mail = new TestMailer();
22*cc92aca7SAndreas Gohr        $headers = $mail->prop('headers');
23*cc92aca7SAndreas Gohr        $this->assertArrayHasKey('X-Dokuwiki-User',$headers);
24*cc92aca7SAndreas Gohr    }
25*cc92aca7SAndreas Gohr
26*cc92aca7SAndreas Gohr    function test_setHeader(){
27*cc92aca7SAndreas Gohr        $mail = new TestMailer();
28*cc92aca7SAndreas Gohr
29*cc92aca7SAndreas Gohr        // check existance of default headers
30*cc92aca7SAndreas Gohr        $headers = $mail->prop('headers');
31*cc92aca7SAndreas Gohr        $this->assertArrayHasKey('X-Mailer',$headers);
32*cc92aca7SAndreas Gohr        $this->assertArrayHasKey('X-Dokuwiki-Title',$headers);
33*cc92aca7SAndreas Gohr        $this->assertArrayHasKey('X-Dokuwiki-Server',$headers);
34*cc92aca7SAndreas Gohr        $this->assertArrayHasKey('X-Auto-Response-Suppress',$headers);
35*cc92aca7SAndreas Gohr        $this->assertArrayHasKey('List-Id',$headers);
36*cc92aca7SAndreas Gohr
37*cc92aca7SAndreas Gohr        // set a bunch of test headers
38*cc92aca7SAndreas Gohr        $mail->setHeader('test-header','bla');
39*cc92aca7SAndreas Gohr        $mail->setHeader('to','A valid ASCII name <test@example.com>');
40*cc92aca7SAndreas Gohr        $mail->setHeader('from',"Thös ne\needs\x00serious cleaning$§%.");
41*cc92aca7SAndreas Gohr        $mail->setHeader('bad',"Thös ne\needs\x00serious cleaning$§%.",false);
42*cc92aca7SAndreas Gohr        $mail->setHeader("weird\n*+\x00foo.-_@bar?",'now clean');
43*cc92aca7SAndreas Gohr
44*cc92aca7SAndreas Gohr        // are they set?
45*cc92aca7SAndreas Gohr        $headers = $mail->prop('headers');
46*cc92aca7SAndreas Gohr        $this->assertArrayHasKey('Test-Header',$headers);
47*cc92aca7SAndreas Gohr        $this->assertEquals('bla',$headers['Test-Header']);
48*cc92aca7SAndreas Gohr        $this->assertArrayHasKey('To',$headers);
49*cc92aca7SAndreas Gohr        $this->assertEquals('A valid ASCII name <test@example.com>',$headers['To']);
50*cc92aca7SAndreas Gohr        $this->assertArrayHasKey('From',$headers);
51*cc92aca7SAndreas Gohr        $this->assertEquals('Ths neeedsserious cleaning.',$headers['From']);
52*cc92aca7SAndreas Gohr        $this->assertArrayHasKey('Bad',$headers);
53*cc92aca7SAndreas Gohr        $this->assertEquals("Thös ne\needs\x00serious cleaning$§%.",$headers['Bad']);
54*cc92aca7SAndreas Gohr        $this->assertArrayHasKey('Weird+foo.-_@bar',$headers);
55*cc92aca7SAndreas Gohr
56*cc92aca7SAndreas Gohr        // unset a header again
57*cc92aca7SAndreas Gohr        $mail->setHeader('test-header','');
58*cc92aca7SAndreas Gohr        $headers = $mail->prop('headers');
59*cc92aca7SAndreas Gohr        $this->assertArrayNotHasKey('Test-Header',$headers);
60*cc92aca7SAndreas Gohr    }
61*cc92aca7SAndreas Gohr
62*cc92aca7SAndreas Gohr    function test_simplemail(){
63*cc92aca7SAndreas Gohr        global $conf;
64*cc92aca7SAndreas Gohr        $conf['htmlmail'] = 0;
65*cc92aca7SAndreas Gohr        $mail = new TestMailer();
66*cc92aca7SAndreas Gohr        $mail->to('test@example.com');
67*cc92aca7SAndreas Gohr        $mail->setBody('A test mail in ASCII');
68*cc92aca7SAndreas Gohr
69*cc92aca7SAndreas Gohr        $dump = $mail->dump();
70*cc92aca7SAndreas Gohr        $this->assertNotRegexp('/Content-Type: multipart/',$dump);
71*cc92aca7SAndreas Gohr        $this->assertRegexp('#Content-Type: text/plain; charset=UTF-8#',$dump);
72*cc92aca7SAndreas Gohr        $this->assertRegexp('/'.base64_encode('A test mail in ASCII').'/',$dump);
73*cc92aca7SAndreas Gohr
74*cc92aca7SAndreas Gohr        $conf['htmlmail'] = 1;
75*cc92aca7SAndreas Gohr    }
76*cc92aca7SAndreas Gohr
77*cc92aca7SAndreas Gohr    function test_replacements(){
78*cc92aca7SAndreas Gohr        $mail = new TestMailer();
79*cc92aca7SAndreas Gohr
80*cc92aca7SAndreas Gohr        $replacements = array( '@DATE@','@BROWSER@','@IPADDRESS@','@HOSTNAME@',
81*cc92aca7SAndreas Gohr                               '@TITLE@','@DOKUWIKIURL@','@USER@','@NAME@','@MAIL@');
82*cc92aca7SAndreas Gohr        $mail->setBody('A test mail in with replacements '.join(' ',$replacements));
83*cc92aca7SAndreas Gohr
84*cc92aca7SAndreas Gohr        $text = $mail->prop('text');
85*cc92aca7SAndreas Gohr        $html = $mail->prop('html');
86*cc92aca7SAndreas Gohr
87*cc92aca7SAndreas Gohr        foreach($replacements as $repl){
88*cc92aca7SAndreas Gohr            $this->assertNotRegexp("/$repl/",$text,"$repl replacement still in text");
89*cc92aca7SAndreas Gohr            $this->assertNotRegexp("/$repl/",$html,"$repl replacement still in html");
90*cc92aca7SAndreas Gohr        }
91*cc92aca7SAndreas Gohr    }
92*cc92aca7SAndreas Gohr
93*cc92aca7SAndreas Gohr}
94*cc92aca7SAndreas Gohr//Setup VIM: ex: et ts=4 :
95