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