Skip to content

Commit

Permalink
Fixed inline image issue. Added new tests.
Browse files Browse the repository at this point in the history
  • Loading branch information
travelton authored and Nyholm committed Aug 10, 2016
1 parent 80987a9 commit 0a7c96c
Show file tree
Hide file tree
Showing 3 changed files with 120 additions and 2 deletions.
1 change: 1 addition & 0 deletions .gitignore
Expand Up @@ -8,3 +8,4 @@ build
composer.lock
nbproject/*
.idea
phpunit.phar
10 changes: 8 additions & 2 deletions src/Mailgun/Connection/RestClient.php
Expand Up @@ -119,8 +119,10 @@ public function post($endpointUrl, array $postData = [], $files = [])
foreach ($fields as $fieldName) {
if (isset($files[$fieldName])) {
if (is_array($files[$fieldName])) {
$fileIndex = 0;
foreach ($files[$fieldName] as $file) {
$postFiles[] = $this->prepareFile($fieldName, $file);
$postFiles[] = $this->prepareFile($fieldName, $file, $fileIndex);
$fileIndex++;
}
} else {
$postFiles[] = $this->prepareFile($fieldName, $files[$fieldName]);
Expand Down Expand Up @@ -251,10 +253,11 @@ protected function getResponseExceptionMessage(ResponseInterface $responseObj)
*
* @param string $fieldName
* @param string|array $filePath
* @param integer $fileIndex
*
* @return array
*/
protected function prepareFile($fieldName, $filePath)
protected function prepareFile($fieldName, $filePath, $fileIndex=0)
{
$filename = null;
// Backward compatibility code
Expand All @@ -268,6 +271,9 @@ protected function prepareFile($fieldName, $filePath)
$filePath = substr($filePath, 1);
}

// Add index for multiple file support
$fieldName .= '[' . $fileIndex . ']';

return [
'name' => $fieldName,
'contents' => fopen($filePath, 'r'),
Expand Down
111 changes: 111 additions & 0 deletions tests/Mailgun/Tests/Messages/ComplexMessageTest.php
@@ -0,0 +1,111 @@
<?PHP

namespace Mailgun\Tests\Messages;

use Mailgun\Tests\Mock\Mailgun;
use Mailgun\Connection\RestClient;


class mockRestClient extends RestClient{
public function send($method, $uri, $body = null, $files = [], array $headers = [])
{
$result = new \stdClass;

$result->method = $method;
$result->uri = $uri;
$result->body = $body;
$result->files = $files;
$result->headers = $headers;

return $result;
}
}

class mockMailgun extends Mailgun{
public function __construct(
$apiKey = null,
HttpClient $httpClient = null,
$apiEndpoint = 'api.mailgun.net'
) {
$this->apiKey = $apiKey;
$this->restClient = new mockRestClient($apiKey, $apiEndpoint, $httpClient);
}
}

class ComplexMessageTest extends \Mailgun\Tests\MailgunTestCase
{
private $client;
private $sampleDomain = 'samples.mailgun.org';

public function setUp()
{
$this->client = new mockMailgun('My-Super-Awesome-API-Key');
}

public function testSendComplexMessage()
{

$message = [
'to' => 'test@test.mailgun.org',
'from' => 'sender@test.mailgun.org',
'subject' => 'This is my test subject',
'text' => 'Testing!'
];

$files = [
'inline' => [
[
'remoteName'=> 'mailgun_icon1.png',
'filePath' => 'tests/Mailgun/Tests/TestAssets/mailgun_icon1.png'
],
[
'remoteName'=> 'mailgun_icon2.png',
'filePath' => 'tests/Mailgun/Tests/TestAssets/mailgun_icon2.png'
]
]
];

$result = $this->client->sendMessage('test.mailgun.org', $message, $files);

$this->assertEquals('POST', $result->method);
$this->assertEquals('test.mailgun.org/messages', $result->uri);
$this->assertEquals([], $result->body);

// Start a counter, make sure all files are asserted
$testCount = 0;

foreach($result->files as $file){
if ($file['name'] == 'to'){
$this->assertEquals($file['contents'], 'test@test.mailgun.org');
$testCount++;
}
if ($file['name'] == 'from'){
$this->assertEquals($file['contents'], 'sender@test.mailgun.org');
$testCount++;
}
if ($file['name'] == 'subject'){
$this->assertEquals($file['contents'], 'This is my test subject');
$testCount++;
}
if ($file['name'] == 'text'){
$this->assertEquals($file['contents'], 'Testing!');
$testCount++;
}
if ($file['name'] == 'inline[0]'){
$this->assertEquals($file['filename'], 'mailgun_icon1.png');
$testCount++;
}
if ($file['name'] == 'inline[1]'){
$this->assertEquals($file['filename'], 'mailgun_icon2.png');
$testCount++;
}
}

// Make sure all "files" are asserted
$this->assertEquals(count($result->files), $testCount);

$this->assertEquals([], $result->body);
$this->assertEquals([], $result->headers);

}
}

0 comments on commit 0a7c96c

Please sign in to comment.