3 require_once(dirname(__FILE__).'/../include/ForumML_mimeDecode.class.php');
4 require_once(dirname(__FILE__).'/../include/ForumMLInsert.class.php');
5 require_once(dirname(__FILE__).'/../include/ForumML_FileStorage.class.php');
7 Mock::generatePartial('ForumMLInsert', 'ForumMLInsertTest', array('insertMessage', 'insertAttachment'));
8 Mock::generate('ForumML_FileStorage');
11 class ForumML_InsertTest extends UnitTestCase {
14 function __construct($name="ForumML Mail DB insert tests") {
15 parent::__construct($name);
16 $this->_fixture = dirname(__FILE__).'/_fixtures/samples';
20 function getEmailStructure($path) {
21 $message = file_get_contents($this->_fixture.'/'.$path);
22 $args['include_bodies'] = TRUE;
23 $args['decode_bodies'] = TRUE;
24 $args['decode_headers'] = TRUE;
25 $args['crlf'] = "\r\n";
26 $decoder = new ForumML_mimeDecode($message, "\r\n");
27 $structure = $decoder->decode($args);
34 function testInsertTextOnly() {
35 $structure = $this->getEmailStructure('pure_text.mbox');
37 $storage = new MockForumML_FileStorage($this);
39 $i = new ForumMLInsertTest($this);
40 $i->setReturnValue('insertMessage', 2);
44 $i->expectOnce('insertMessage', array('*', $txtBody, 'text/plain; charset=ISO-8859-1; format=flowed'));
45 $i->expectNever('insertAttachment');
47 $i->storeEmail($structure, $storage);
53 function testInsertAttachmentOnly() {
54 $structure = $this->getEmailStructure('attachment_only.mbox');
56 $storage = new MockForumML_FileStorage($this);
57 $storage->setReturnValue('store', '/a/b/c');
59 $i = new ForumMLInsertTest($this);
60 $i->setReturnValue('insertMessage', 2);
65 $i->expectOnce('insertMessage', array('*', $txtBody, 'text/plain; charset=ISO-8859-1; format=flowed'));
66 $i->expectOnce('insertAttachment', array(2, 'lock.png', 'image/png; name="lock.png"', '/a/b/c', ''));
68 $i->storeEmail($structure, $storage);
75 function testInsertTextWithAttachment() {
76 $structure = $this->getEmailStructure('text_plus_attachment.mbox');
78 $storage = new MockForumML_FileStorage($this);
79 $storage->setReturnValue('store', '/a/b/c');
81 $i = new ForumMLInsertTest($this);
82 $i->setReturnValue('insertMessage', 2);
87 $i->expectOnce('insertMessage', array('*', $txtBody, 'text/plain; charset=ISO-8859-1; format=flowed'));
88 $i->expectOnce('insertAttachment', array(2, 'lock.png', 'image/png; name="lock.png"', '/a/b/c', ''));
90 $i->storeEmail($structure, $storage);
94 * Pure HTML sent in Text+HTML
96 function testInsertHTMLInTextHtmlMode() {
97 $structure = $this->getEmailStructure('pure_html_text_plus_html.mbox');
99 $storage = new MockForumML_FileStorage($this);
100 $storage->setReturnValue('store', '/a/b/c');
102 $i = new ForumMLInsertTest($this);
103 $i->setReturnValue('insertMessage', 2);
110 $i->expectOnce('insertMessage', array('*', $txtBody, 'text/plain; charset=ISO-8859-1; format=flowed'));
111 $i->expectOnce('insertAttachment', array(2, 'message_4ACB049C.6020506.html', 'text/html; charset=ISO-8859-1', '/a/b/c', ''));
113 $i->storeEmail($structure, $storage);
117 * Pure HTML sent in HTML Only
119 function testInsertHTMLInHtmlOnlyMode() {
120 $structure = $this->getEmailStructure('pure_html_in_html_only.mbox');
122 $storage = new MockForumML_FileStorage($this);
123 $storage->setReturnValue('store', '/a/b/c');
125 $i = new ForumMLInsertTest($this);
126 $i->setReturnValue('insertMessage', 2);
128 $i->expectOnce('insertMessage', array('*', '*', 'text/html; charset=ISO-8859-1'));
129 $i->expectNever('insertAttachment');
131 $i->storeEmail($structure, $storage);
135 * HTML with inline content in Text+HTML mode
137 function testInsertHtmlWithInlineContentInTextPlusHtml() {
138 $structure = $this->getEmailStructure('html_with_inline_content_in_text_plus_html.mbox');
140 $storage = new MockForumML_FileStorage($this);
141 $storage->setReturnValue('store', '/a/b/c');
143 $i = new ForumMLInsertTest($this);
144 $i->setReturnValue('insertMessage', 2);
151 $i->expectOnce('insertMessage', array('*', $txtBody, 'text/plain; charset=ISO-8859-1; format=flowed'));
152 $i->expectAt(0, 'insertAttachment', array(2, '*', 'text/html; charset=ISO-8859-1', '/a/b/c', ''));
153 $i->expectAt(1, 'insertAttachment', array(2, 'lock.png', 'image/png; name="lock.png"', '/a/b/c', '<part1.02040105.07020502@codendi.org>'));
154 $i->expectCallCount('insertAttachment', 2);
156 $i->storeEmail($structure, $storage);
160 * HTML with inline content in HTML Only mode
162 function testInsertHtmlWithInlineContentInHtmlOnly() {
163 $structure = $this->getEmailStructure('html_with_inline_content_in_html_only.mbox');
165 $storage = new MockForumML_FileStorage($this);
166 $storage->setReturnValue('store', '/a/b/c');
168 $i = new ForumMLInsertTest($this);
169 $i->setReturnValue('insertMessage', 2);
171 $i->expectOnce('insertMessage', array('*', '*', 'text/html; charset=ISO-8859-1'));
172 $i->expectOnce('insertAttachment', array(2, 'attachment', 'image/png', '/a/b/c', '<part1.04090204.04000103@codendi.org>'));
174 $i->storeEmail($structure, $storage);
177 function testInsertHtmlWithInlineContentAndAttachmentInTextPlusHtml() {
178 $structure = $this->getEmailStructure('html_with_inline_content_and_attch_in_text_plus_html.mbox');
180 $storage = new MockForumML_FileStorage($this);
181 $storage->setReturnValue('store', '/a/b/c');
183 $i = new ForumMLInsertTest($this);
184 $i->setReturnValue('insertMessage', 2);
191 $i->expectOnce('insertMessage', array('*', $txtBody, 'text/plain; charset=ISO-8859-1; format=flowed'));
192 $i->expectAt(0, 'insertAttachment', array(2, '*', 'text/html; charset=ISO-8859-1', '/a/b/c', ''));
193 $i->expectAt(1, 'insertAttachment', array(2, 'attachment', 'image/png', '/a/b/c', '<part1.05020200.07040300@codendi.org>'));
194 $i->expectAt(2, 'insertAttachment', array(2, 'new_trk_severity_migr.png', 'image/png; name="new_trk_severity_migr.png"', '/a/b/c', ''));
195 $i->expectCallCount('insertAttachment', 3);
197 $i->storeEmail($structure, $storage);
200 function testInsertHtmlWithInlineContentAndAttachmentInHtmlOnly() {
201 $structure = $this->getEmailStructure('html_with_inline_content_and_attch_in_html_only.mbox');
203 $storage = new MockForumML_FileStorage($this);
204 $storage->setReturnValue('store', '/a/b/c');
206 $i = new ForumMLInsertTest($this);
207 $i->setReturnValue('insertMessage', 2);
209 $i->expectOnce('insertMessage', array('*', '*', 'text/html; charset=ISO-8859-1'));
210 $i->expectAt(0, 'insertAttachment', array(2, 'attachment', 'image/png', '/a/b/c', '<part1.05000804.09080906@codendi.org>'));
211 $i->expectAt(1, 'insertAttachment', array(2, 'new_trk_severity_migr.png', 'image/png; name="new_trk_severity_migr.png"', '/a/b/c', ''));
212 $i->expectCallCount('insertAttachment', 2);
214 $i->storeEmail($structure, $storage);