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