blob: 96eb02c76470fd522228fa87a50322b2ad109e6b [file] [log] [blame]
<?php
/**
* Copyright 2007 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* Tests for Mail API on App Engine.
*
*/
use google\appengine\api\mail\AdminMessage;
use google\appengine\base\VoidProto;
use google\appengine\MailMessage;
use google\appengine\MailServiceError\ErrorCode;
use google\appengine\runtime\ApplicationError;
use google\appengine\testing\ApiProxyTestBase;
class AdminMessageTest extends ApiProxyTestBase {
public function testConstructorBadValues() {
$options = array("to" => "test");
$this->setExpectedException(
"InvalidArgumentException", "Message received an invalid option: to");
$message = new AdminMessage($options);
}
public function testConstructNonString() {
$options = "test";
$this->setExpectedException(
"InvalidArgumentException", "Message expects an array, not string");
$message = new AdminMessage($options);
}
public function testSendNoSender() {
$message = new AdminMessage();
$this->setExpectedException(
"InvalidArgumentException", "Required field sender is not provided.");
$message->send();
}
public function testSendNoSubject() {
$message = new AdminMessage();
$this->setExpectedException(
"InvalidArgumentException",
"Required field subject is not provided.");
$message->setSender("test@example.com");
$message->send();
}
public function testSendNoBody() {
$message = new AdminMessage();
$this->setExpectedException(
"InvalidArgumentException",
"Neither a plain-text nor HTML body is provided - at least one is " .
"required.");
$message->setSender("test@example.com");
$message->setSubject("test");
$message->send();
}
/**
* Setup a basic message and message proto with:
* - sender
* - subject
* - text body
*/
private function setupMessageSimple($message, $message_proto) {
$message->setSender("test@example.com");
$message_proto->setSender("test@example.com");
$message->setSubject("test");
$message_proto->setSubject("test");
$message->setTextBody("text body");
$message_proto->setTextbody("text body");
}
/**
* Tests various message elements:
* - everything in setupMessageSimple()
* - html body
* - reply to
*/
public function testSucceedFields() {
$message = new AdminMessage();
$message_proto = new MailMessage();
$this->setupMessageSimple($message, $message_proto);
$message->setHtmlBody("text body");
$message_proto->setHtmlbody("text body");
$message->setReplyTo("reply@example.com");
$message_proto->setReplyto("reply@example.com");
$response = new VoidProto();
$this->apiProxyMock->expectCall(
'mail', 'SendToAdmins', $message_proto, $response);
$message->send();
$this->apiProxyMock->verify();
}
public function testSucceedWithOptionsArray() {
$headers = array('in-reply-to' => 'data',
'list-id' => 'data2',
'references' => 'data3');
$attachments = array('test.gif' => 'data',
't.jpg' => 'data2',
'z.png' => 'data3');
$options = array('sender' => 'test@example.com',
'replyto' => 'test@example.com',
'subject' => 'test',
'textBody' => 'text body',
'htmlBody' => 'html body',
'header' => $headers,
'attachment' => $attachments);
$message = new AdminMessage($options);
$message_proto = new MailMessage();
$message_proto->setSender("test@example.com");
$message_proto->setReplyto("test@example.com");
$message_proto->setSubject("test");
$message_proto->setTextbody("text body");
$message_proto->setHtmlbody("html body");
$header = $message_proto->addHeader();
$header->setName("in-reply-to");
$header->setValue("data");
$header = $message_proto->addHeader();
$header->setName("list-id");
$header->setValue("data2");
$header = $message_proto->addHeader();
$header->setName("references");
$header->setValue("data3");
$attach = $message_proto->addAttachment();
$attach->setFilename("test.gif");
$attach->setData("data");
$attach = $message_proto->addAttachment();
$attach->setFilename("t.jpg");
$attach->setData("data2");
$attach = $message_proto->addAttachment();
$attach->setFilename("z.png");
$attach->setData("data3");
$response = new VoidProto();
$this->apiProxyMock->expectCall(
'mail', 'SendToAdmins', $message_proto, $response);
$message->send();
$this->apiProxyMock->verify();
}
public function testSucceedWithAttachments() {
$message = new AdminMessage();
$message_proto = new MailMessage();
$this->setupMessageSimple($message, $message_proto);
$message->addAttachment("test.gif", "data");
$attach = $message_proto->addAttachment();
$attach->setFilename("test.gif");
$attach->setData("data");
$multi_attach = array("t" => "data2",
"z." => "data3");
$message->addAttachmentArray($multi_attach);
$attach = $message_proto->addAttachment();
$attach->setFilename("t");
$attach->setData("data2");
$attach = $message_proto->addAttachment();
$attach->setFilename("z.");
$attach->setData("data3");
$response = new VoidProto();
$this->apiProxyMock->expectCall(
'mail', 'SendToAdmins', $message_proto, $response);
$message->send();
$this->apiProxyMock->verify();
}
public function testSucceedWithHeaders() {
$message = new AdminMessage();
$message_proto = new MailMessage();
$this->setupMessageSimple($message, $message_proto);
$message->addHeader("in-reply-to", "data");
$header = $message_proto->addHeader();
$header->setName("in-reply-to");
$header->setValue("data");
$multi_header = array("list-id" => "data2", "references" => "data3");
$message->addHeaderArray($multi_header);
$header = $message_proto->addHeader();
$header->setName("list-id");
$header->setValue("data2");
$header = $message_proto->addHeader();
$header->setName("references");
$header->setValue("data3");
$response = new VoidProto();
$this->apiProxyMock->expectCall(
'mail', 'SendToAdmins', $message_proto, $response);
$message->send();
$this->apiProxyMock->verify();
}
public function testRpcApplicationErrorInternalError() {
$message = new AdminMessage();
$message_proto = new MailMessage();
$this->setupMessageSimple($message, $message_proto);
$exception = new ApplicationError(ErrorCode::INTERNAL_ERROR, "test");
$this->setExpectedException("RuntimeException", "test");
$this->apiProxyMock->expectCall(
'mail', 'SendToAdmins', $message_proto, $exception);
$message->send();
$this->apiProxyMock->verify();
}
public function testRpcApplicationErrorBadRequest() {
$message = new AdminMessage();
$message_proto = new MailMessage();
$this->setupMessageSimple($message, $message_proto);
$exception = new ApplicationError(ErrorCode::BAD_REQUEST, "test");
$this->setExpectedException("RuntimeException", "test");
$this->apiProxyMock->expectCall(
'mail', 'SendToAdmins', $message_proto, $exception);
$message->send();
$this->apiProxyMock->verify();
}
public function testRpcApplicationErrorUnauthorizedSender() {
$message = new AdminMessage();
$message_proto = new MailMessage();
$this->setupMessageSimple($message, $message_proto);
$exception = new ApplicationError(ErrorCode::UNAUTHORIZED_SENDER, "test");
$this->setExpectedException(
"InvalidArgumentException",
"Mail Service Error: Sender (test@example.com) is not an ".
"authorized email address.");
$this->apiProxyMock->expectCall(
'mail', 'SendToAdmins', $message_proto, $exception);
$message->send();
$this->apiProxyMock->verify();
}
public function testRpcApplicationErrorInvalidAttachmentType() {
$message = new AdminMessage();
$message_proto = new MailMessage();
$this->setupMessageSimple($message, $message_proto);
$exception = new ApplicationError(ErrorCode::INVALID_ATTACHMENT_TYPE,
"test");
$this->setExpectedException(
"InvalidArgumentException",
"Mail Service Error: Invalid attachment type.");
$this->apiProxyMock->expectCall(
'mail', 'SendToAdmins', $message_proto, $exception);
$message->send();
$this->apiProxyMock->verify();
}
public function testRpcApplicationErrorInvalidHeaderName() {
$message = new AdminMessage();
$message_proto = new MailMessage();
$this->setupMessageSimple($message, $message_proto);
$exception = new ApplicationError(ErrorCode::INVALID_HEADER_NAME, "test");
$this->setExpectedException(
"InvalidArgumentException",
"Mail Service Error: Invalid header name.");
$this->apiProxyMock->expectCall(
'mail', 'SendToAdmins', $message_proto, $exception);
$message->send();
$this->apiProxyMock->verify();
}
}