assertInstanceOf('\\Rhymix\\Framework\\Drivers\\MailInterface', $driver); $driver = Rhymix\Framework\Drivers\Mail\Dummy::getInstance(array()); Rhymix\Framework\Mail::setDefaultDriver($driver); $this->assertEquals($driver, Rhymix\Framework\Mail::getDefaultDriver()); } public function testGetSupportedDrivers() { $drivers = Rhymix\Framework\Mail::getSupportedDrivers(); $this->assertTrue(isset($drivers['dummy'])); $this->assertTrue(isset($drivers['mailfunction'])); $this->assertTrue(isset($drivers['smtp'])); $this->assertEquals('SMTP', $drivers['smtp']['name']); $this->assertEquals(array('api_token'), $drivers['sparkpost']['required']); $this->assertNotEmpty($drivers['woorimail']['spf_hint']); } public function testSenderAndRecipients() { $mail = new Rhymix\Framework\Mail; $this->assertNull($mail->getFrom()); $mail->setFrom('devops@rhymix.org', 'Rhymix Developers'); $this->assertEquals('Rhymix Developers ', $mail->getFrom()); $this->assertEquals(null, $mail->message->getTo()); $mail->addTo('whoever@rhymix.org', 'Name'); $this->assertEquals(array('whoever@rhymix.org' => 'Name'), $mail->message->getTo()); $this->assertEquals(null, $mail->message->getCc()); $mail->addCc('whatever@rhymix.org', 'Nick'); $this->assertEquals(array('whatever@rhymix.org' => 'Nick'), $mail->message->getCc()); $this->assertEquals(null, $mail->message->getBcc()); $mail->addBcc('wherever@rhymix.org', 'User'); $this->assertEquals(array('wherever@rhymix.org' => 'User'), $mail->message->getBcc()); $this->assertEquals(null, $mail->message->getReplyTo()); $mail->setReplyTo('replyto@rhymix.org'); $this->assertEquals(array('replyto@rhymix.org' => ''), $mail->message->getReplyTo()); $recipients = $mail->getRecipients(); $this->assertEquals(3, count($recipients)); $this->assertContains('Name ', $recipients); $this->assertContains('Nick ', $recipients); $this->assertContains('User ', $recipients); } public function testMiscHeaders() { $mail = new Rhymix\Framework\Mail; $mail->setReturnPath('envelope@rhymix.org'); $this->assertEquals('envelope@rhymix.org', $mail->message->getReturnPath()); $mail->setMessageID('some.random.string@rhymix.org'); $this->assertEquals('some.random.string@rhymix.org', $mail->message->getId()); $mail->setInReplyTo(''); $this->assertEquals('', $mail->message->getHeaders()->get('In-Reply-To')->getValue()); $mail->setReferences(', , '); $this->assertEquals(', , ', $mail->message->getHeaders()->get('References')->getValue()); } public function testMailSubject() { $mail = new Rhymix\Framework\Mail; $mail->setSubject('Foobar!'); $this->assertEquals('Foobar!', $mail->getSubject()); $mail->setTitle('Foobarbazz?'); $this->assertEquals('Foobarbazz?', $mail->getTitle()); } public function testMailBody() { $baseurl = '/' . basename(dirname(dirname(dirname(__DIR__)))) . '/'; $mail = new Rhymix\Framework\Mail; $mail->setBody('

Hello world!

', 'text/html'); $this->assertEquals('

Hello world!

', $mail->getBody()); $this->assertEquals('text/html', $mail->getContentType()); $mail->setContent('

Hello world! Foobar?

', 'text/plain'); $this->assertEquals('

Hello world! Foobar?

', $mail->getBody()); $this->assertEquals('text/plain', $mail->getContentType()); $mail->setBody('

Hello foobar...

', 'invalid value'); $this->assertEquals('

Hello foobar...

', $mail->getContent()); $this->assertEquals('text/plain', $mail->getContentType()); $mail->setBody('

TEST

', 'text/html'); $this->assertEquals('

TEST

', $mail->getBody()); $mail->setBody('

TEST

', 'text/html'); $this->assertEquals('

TEST

', $mail->getBody()); $mail->setBody('

TEST

', 'text/html'); $this->assertEquals('

TEST

', $mail->getBody()); $mail->setBody('

TEST

', 'text/plain'); $this->assertEquals('

TEST

', $mail->getBody()); $mail->setContentType('html'); $this->assertEquals('text/html', $mail->getContentType()); $mail->setContentType('invalid'); $this->assertEquals('text/plain', $mail->getContentType()); } public function testMailAttach() { $mail = new Rhymix\Framework\Mail; $success = $mail->attach(\RX_BASEDIR . 'tests/_data/formatter/minify.source.css'); $this->assertTrue($success); $success = $mail->attach(\RX_BASEDIR . 'tests/_data/formatter/minify.target.css', 'target.css'); $this->assertTrue($success); $success = $mail->attach(\RX_BASEDIR . 'tests/_data/nonexistent.file.jpg'); $this->assertFalse($success); $attachments = $mail->getAttachments(); $this->assertEquals(2, count($attachments)); $this->assertEquals('attach', $attachments[0]->type); $this->assertEquals(\RX_BASEDIR . 'tests/_data/formatter/minify.source.css', $attachments[0]->local_filename); $this->assertEquals('minify.source.css', $attachments[0]->display_filename); $this->assertEquals('target.css', $attachments[1]->display_filename); } public function testMailEmbed() { $mail = new Rhymix\Framework\Mail; $cid = $mail->embed(\RX_BASEDIR . 'tests/_data/formatter/minify.source.css', 'thisismyrandomcid@rhymix.org'); $this->assertEquals('cid:thisismyrandomcid@rhymix.org', $cid); $cid = $mail->embed(\RX_BASEDIR . 'tests/_data/formatter/minify.target.css'); $this->assertRegexp('/^cid:[0-9a-z]+@[^@]+$/i', $cid); } public function testMailClassCompatibility() { \Mail::useGmailAccount('devops@rhymix.org', 'password'); $this->assertInstanceOf('\\Rhymix\\Framework\\Drivers\\Mail\\SMTP', \Mail::getDefaultDriver()); \Mail::useSMTP(null, 'rhymix.org', 'devops@rhymix.org', 'password', 'tls', 587); $this->assertInstanceOf('\\Rhymix\\Framework\\Drivers\\Mail\\SMTP', \Mail::getDefaultDriver()); $mail = new \Mail; $mail->setSender('Rhymix', 'devops@rhymix.org'); $this->assertEquals('Rhymix ', $mail->getSender()); $mail->setReceiptor('Recipient', 'whoever@rhymix.org'); $this->assertEquals('Recipient ', $mail->getReceiptor()); $mail->setReceiptor('Another Recipient', 'whatever@rhymix.org'); $this->assertEquals('Another Recipient ', $mail->getReceiptor()); $this->assertEquals(1, count($mail->message->getTo())); $this->assertEquals(null, $mail->message->getCc()); $mail->setBcc('bcc-1@rhymix.org'); $mail->setBcc('bcc-2@rhymix.org'); $this->assertEquals(array('bcc-2@rhymix.org' => ''), $mail->message->getBcc()); $content = '

Hello world!

This is a long message to test chunk splitting.

This feature is only available using the legacy Mail class.

'; $mail->setBody($content); $this->assertEquals(chunk_split(base64_encode($content)), $mail->getHTMLContent()); $this->assertEquals(chunk_split(base64_encode(htmlspecialchars($content))), $mail->getPlainContent()); $mail->addAttachment(\RX_BASEDIR . 'tests/_data/formatter/minify.target.css', 'target.css'); $cid = $mail->addCidAttachment(\RX_BASEDIR . 'tests/_data/formatter/minify.target.css', 'thisismyrandomcid@rhymix.org'); $this->assertEquals('cid:thisismyrandomcid@rhymix.org', $cid); $attachments = $mail->getAttachments(); $this->assertEquals(2, count($attachments)); $this->assertEquals('attach', $attachments[0]->type); $this->assertEquals('target.css', $attachments[0]->display_filename); $this->assertEquals('embed', $attachments[1]->type); $this->assertEquals('cid:thisismyrandomcid@rhymix.org', $attachments[1]->cid); } public function testEmailAddressValidator() { $this->assertEquals('devops@rhymix.org', Mail::isVaildMailAddress('devops@rhymix.org')); $this->assertEquals('some+thing@gmail.com', Mail::isVaildMailAddress('some+thing@gmail.com')); $this->assertEquals('weird@localhost', Mail::isVaildMailAddress('weird@localhost')); $this->assertEquals('', Mail::isVaildMailAddress('invalid@')); } }