Files
roundcubemail/tests/MessageRendering/SingleAttachedImageNoTextTest.php
Pablo Zmdl 752b152a23 Check if attachment is actually(!) referred to (#9585)
* Check if "inline" msg part is actually referred to

If there's no reference to it in a sibling HTML part then we handle it
as a classic attachment (which is shown as downloadable).

* Fetch all msg headers also for images to always get Content-Location

Previously all headers were only fetched for message/rfc822, or
if the Content-Type's "name" parameter was set, or if a Content-ID was
set.
The RFC doesn't require neither the "name" parameter nor a Content-ID
for using Content-Location, though, so we shouldn't depend on those.

Instead now all headers are also fetched if the main part of the
Content-Type is "image", to catch more cases.

* Parse HTML for references only on demand

* Typos and comment formatting

* Don't skip test anymore

We want it tested!

* More MR tests with images

* Remove early special handling for "inline" images

We decide later, which attachment is considered "inline" and which
isn't.

* Remove early resolving of references in TNEF parts

* Testing message rendering of TNEF emails

* Don't use image disposition, it's unreliable

* Split adding raw parts and attachments

* Fix renaming variable

* Rename file to make its test be run

* Remove outdated script

* Annotate test cases with GitHub issue numbers

* Fix test case class name

* remove comment

* Test inline image message rendering

* Rename test file to reflect cases better

* Reduce image used in test email

It doesn't change much, but there's also no sense in decoding big images
that we don't use.

* Remove unused variable initialisation
2025-02-09 09:56:43 +01:00

56 lines
2.1 KiB
PHP

<?php
namespace Tests\MessageRendering;
/**
* Test class to test "interesting" messages.
*/
class SingleAttachedImageNoTextTest extends MessageRenderingTestCase
{
/**
* Test that of a multipart/mixed message which contains only one
* image, that image is shown. (GitHub issue #9443)
*/
public function testShowMultipartMixedSingleImageToo()
{
$domxpath = $this->runAndGetHtmlOutputDomxpath('XXXXXXXXXXXXX@mx01.lytzenitmail.dk');
$this->assertSame('Not OK', $this->getScrubbedSubject($domxpath));
$attchNames = $domxpath->query('//span[@class="attachment-name"]');
$this->assertCount(1, $attchNames, 'Attachments');
$this->assertStringStartsWith('Resized_20240427_200026(1).jpeg', $attchNames[0]->textContent);
}
/**
* Test that an image, that has a Content-ID, which is not accompanied by
* an HTML part (and thus is not referred to), is shown as attachment.
* (GitHub issue #9565)
*/
public function testShowUnreferredToImagesWithContentId()
{
$domxpath = $this->runAndGetHtmlOutputDomxpath('yyy@mail.gmail.com');
$this->assertSame('test', $this->getScrubbedSubject($domxpath));
$attchNames = $domxpath->query('//span[@class="attachment-name"]');
$this->assertCount(1, $attchNames, 'Attachments');
$this->assertStringStartsWith('тест.jpg', $attchNames[0]->textContent);
}
/**
* Test that an image, that has a Content-ID, but is not referred to in the
* accompanying HTML-part, is shown as attachment. (GitHub issue #9685)
*/
public function testShowUnreferredToImagesWithContentIdInMultipartAlternative()
{
$domxpath = $this->runAndGetHtmlOutputDomxpath('2ef37d1124655807449f5e405cdd4834b79fb026@example.net');
$this->assertSame('Multipart/alternative with attached but unreferenced image', $this->getScrubbedSubject($domxpath));
$attchNames = $domxpath->query('//span[@class="attachment-name"]');
$this->assertCount(1, $attchNames, 'Attachments');
$this->assertStringStartsWith('Stg Aiki - SB - 22-23 Fév 2025.jpg', $attchNames[0]->textContent);
}
}