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