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');
10 class ForumML_InsertTest extends UnitTestCase {
13 function __construct($name="ForumML Mail DB insert tests") {
14 parent::__construct($name);
15 $this->_fixture = dirname(__FILE__).'/_fixtures/samples';
18 function getEmailStructure($path) {
19 $message = file_get_contents($this->_fixture.'/'.$path);
20 $args['include_bodies'] = TRUE;
21 $args['decode_bodies'] = TRUE;
22 $args['decode_headers'] = TRUE;
23 $args['crlf'] = "\r\n";
24 $decoder = new ForumML_mimeDecode($message, "\r\n");
25 $structure = $decoder->decode($args);
32 function testInsertTextOnly() {
33 $structure = $this->getEmailStructure('pure_text.mbox');
35 $storage = new MockForumML_FileStorage($this);
37 $i = new ForumMLInsertTest($this);
38 $i->setReturnValue('insertMessage', 2);
42 $i->expectOnce('insertMessage', array('*', $txtBody, 'text/plain; charset=ISO-8859-1; format=flowed'));
43 $i->expectNever('insertAttachment');
45 $i->storeEmail($structure, $storage);
51 function testInsertAttachmentOnly() {
52 $structure = $this->getEmailStructure('attachment_only.mbox');
54 $storage = new MockForumML_FileStorage($this);
55 $storage->setReturnValue('store', '/a/b/c');
57 $i = new ForumMLInsertTest($this);
58 $i->setReturnValue('insertMessage', 2);
63 $i->expectOnce('insertMessage', array('*', $txtBody, 'text/plain; charset=ISO-8859-1; format=flowed'));
64 $i->expectOnce('insertAttachment', array(2, 'lock.png', 'image/png; name="lock.png"', '/a/b/c', ''));
66 $i->storeEmail($structure, $storage);
72 function testInsertTextWithAttachment() {
73 $structure = $this->getEmailStructure('text_plus_attachment.mbox');
75 $storage = new MockForumML_FileStorage($this);
76 $storage->setReturnValue('store', '/a/b/c');
78 $i = new ForumMLInsertTest($this);
79 $i->setReturnValue('insertMessage', 2);
84 $i->expectOnce('insertMessage', array('*', $txtBody, 'text/plain; charset=ISO-8859-1; format=flowed'));
85 $i->expectOnce('insertAttachment', array(2, 'lock.png', 'image/png; name="lock.png"', '/a/b/c', ''));
87 $i->storeEmail($structure, $storage);
91 * Pure HTML sent in Text+HTML
93 function testInsertHTMLInTextHtmlMode() {
94 $structure = $this->getEmailStructure('pure_html_text_plus_html.mbox');
96 $storage = new MockForumML_FileStorage($this);
97 $storage->setReturnValue('store', '/a/b/c');
99 $i = new ForumMLInsertTest($this);
100 $i->setReturnValue('insertMessage', 2);
107 $i->expectOnce('insertMessage', array('*', $txtBody, 'text/plain; charset=ISO-8859-1; format=flowed'));
108 $i->expectOnce('insertAttachment', array(2, 'message_4ACB049C.6020506.html', 'text/html; charset=ISO-8859-1', '/a/b/c', ''));
110 $i->storeEmail($structure, $storage);
114 * Pure HTML sent in HTML Only
116 function testInsertHTMLInHtmlOnlyMode() {
117 $structure = $this->getEmailStructure('pure_html_in_html_only.mbox');
119 $storage = new MockForumML_FileStorage($this);
120 $storage->setReturnValue('store', '/a/b/c');
122 $i = new ForumMLInsertTest($this);
123 $i->setReturnValue('insertMessage', 2);
125 $i->expectOnce('insertMessage', array('*', '*', 'text/html; charset=ISO-8859-1'));
126 $i->expectNever('insertAttachment');
128 $i->storeEmail($structure, $storage);
132 * HTML with inline content in Text+HTML mode
134 function testInsertHtmlWithInlineContentInTextPlusHtml() {
135 $structure = $this->getEmailStructure('html_with_inline_content_in_text_plus_html.mbox');
137 $storage = new MockForumML_FileStorage($this);
138 $storage->setReturnValue('store', '/a/b/c');
140 $i = new ForumMLInsertTest($this);
141 $i->setReturnValue('insertMessage', 2);
148 $i->expectOnce('insertMessage', array('*', $txtBody, 'text/plain; charset=ISO-8859-1; format=flowed'));
149 $i->expectAt(0, 'insertAttachment', array(2, '*', 'text/html; charset=ISO-8859-1', '/a/b/c', ''));
150 $i->expectAt(1, 'insertAttachment', array(2, 'lock.png', 'image/png; name="lock.png"', '/a/b/c', '<part1.02040105.07020502@codendi.org>'));
151 $i->expectCallCount('insertAttachment', 2);
153 $i->storeEmail($structure, $storage);
157 * HTML with inline content in HTML Only mode
159 function testInsertHtmlWithInlineContentInHtmlOnly() {
160 $structure = $this->getEmailStructure('html_with_inline_content_in_html_only.mbox');
162 $storage = new MockForumML_FileStorage($this);
163 $storage->setReturnValue('store', '/a/b/c');
165 $i = new ForumMLInsertTest($this);
166 $i->setReturnValue('insertMessage', 2);
168 $i->expectOnce('insertMessage', array('*', '*', 'text/html; charset=ISO-8859-1'));
169 $i->expectOnce('insertAttachment', array(2, 'attachment', 'image/png', '/a/b/c', '<part1.04090204.04000103@codendi.org>'));
171 $i->storeEmail($structure, $storage);
174 function testInsertHtmlWithInlineContentAndAttachmentInTextPlusHtml() {
175 $structure = $this->getEmailStructure('html_with_inline_content_and_attch_in_text_plus_html.mbox');
177 $storage = new MockForumML_FileStorage($this);
178 $storage->setReturnValue('store', '/a/b/c');
180 $i = new ForumMLInsertTest($this);
181 $i->setReturnValue('insertMessage', 2);
188 $i->expectOnce('insertMessage', array('*', $txtBody, 'text/plain; charset=ISO-8859-1; format=flowed'));
189 $i->expectAt(0, 'insertAttachment', array(2, '*', 'text/html; charset=ISO-8859-1', '/a/b/c', ''));
190 $i->expectAt(1, 'insertAttachment', array(2, 'attachment', 'image/png', '/a/b/c', '<part1.05020200.07040300@codendi.org>'));
191 $i->expectAt(2, 'insertAttachment', array(2, 'new_trk_severity_migr.png', 'image/png; name="new_trk_severity_migr.png"', '/a/b/c', ''));
192 $i->expectCallCount('insertAttachment', 3);
194 $i->storeEmail($structure, $storage);
197 function testInsertHtmlWithInlineContentAndAttachmentInHtmlOnly() {
198 $structure = $this->getEmailStructure('html_with_inline_content_and_attch_in_html_only.mbox');
200 $storage = new MockForumML_FileStorage($this);
201 $storage->setReturnValue('store', '/a/b/c');
203 $i = new ForumMLInsertTest($this);
204 $i->setReturnValue('insertMessage', 2);
206 $i->expectOnce('insertMessage', array('*', '*', 'text/html; charset=ISO-8859-1'));
207 $i->expectAt(0, 'insertAttachment', array(2, 'attachment', 'image/png', '/a/b/c', '<part1.05000804.09080906@codendi.org>'));
208 $i->expectAt(1, 'insertAttachment', array(2, 'new_trk_severity_migr.png', 'image/png; name="new_trk_severity_migr.png"', '/a/b/c', ''));
209 $i->expectCallCount('insertAttachment', 2);
211 $i->storeEmail($structure, $storage);