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