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