Skip to content

Commit

Permalink
Merge pull request #203 from Slamdunk/set_message_flags
Browse files Browse the repository at this point in the history
Add tests for #144 set flags functionalities
  • Loading branch information
Slamdunk committed Sep 28, 2017
2 parents ac1bb2a + 148f2cb commit afa786c
Show file tree
Hide file tree
Showing 2 changed files with 102 additions and 22 deletions.
88 changes: 66 additions & 22 deletions src/Message.php
Expand Up @@ -14,7 +14,6 @@
*/
class Message extends Message\Part
{
private $headersRaw;
private $headers;
private $rawHeaders;
private $attachments;
Expand Down Expand Up @@ -137,12 +136,7 @@ public function getNumber(): int
*/
public function getDate(): \DateTimeImmutable
{
$date = $this->getHeaders()->get('date');
if(!$date){
$udate = new \DateTime();
$date = $udate->setTimestamp($this->getHeaders()->get('udate'));
}
return $date;
return $this->getHeaders()->get('date');
}

/**
Expand Down Expand Up @@ -171,34 +165,64 @@ public function getContent(bool $keepUnseen = false): string
return $this->doGetContent($this->keepUnseen ? $this->keepUnseen : $keepUnseen);
}

/**
* Get message unseen flag value (from headers)
*
* @return string
*/
public function isRecent(): string
{
return $this->getHeaders()->get('recent');
}

/**
* Get message unseen flag value (from headers)
*
* @return bool
*/
public function isUnseen(): bool
{
return 'U' === $this->getHeaders()->get('unseen');
}

/**
* Get message flagged flag value (from headers)
*
* @return bool
*/
public function isFlagged(): bool
{
return 'F' === $this->getHeaders()->get('flagged');
}

/**
* Get message answered flag value (from headers)
*
* @return bool
*/
public function isAnswered()
public function isAnswered(): bool
{
return $this->getHeaders()->get('answered');
return 'A' === $this->getHeaders()->get('answered');
}

/**
* Get message deleted flag value (from headers)
*
* @return bool
*/
public function isDeleted()
public function isDeleted(): bool
{
return $this->getHeaders()->get('deleted');
return 'D' === $this->getHeaders()->get('deleted');
}

/**
* Get message draft flag value (from headers)
*
* @return bool
*/
public function isDraft()
public function isDraft(): bool
{
return $this->getHeaders()->get('draft');
return 'X' === $this->getHeaders()->get('draft');
}

/**
Expand All @@ -210,7 +234,7 @@ public function isSeen(): bool
{
return
'R' === $this->getHeaders()->get('recent')
|| ('' === $this->getHeaders()->get('recent') && '' !== $this->getHeaders()->get('unseen'))
|| ('N' !== $this->getHeaders()->get('recent') && 'U' === $this->getHeaders()->get('unseen'))
;
}

Expand Down Expand Up @@ -242,6 +266,14 @@ public function getHeaders(): Message\Headers
return $this->headers;
}

/**
* Clearmessage headers
*/
private function clearHeaders()
{
$this->headers = null;
}

/**
* Get raw message headers
*
Expand Down Expand Up @@ -407,21 +439,33 @@ private function loadStructure()

/**
* Set Flag Message
* @param [type] $flag \Seen, \Answered, \Flagged, \Deleted, and \Draft
* @return bool [description]
*
* @param $flag \Seen, \Answered, \Flagged, \Deleted, and \Draft
*
* @return bool
*/
public function setFlag($flag)
public function setFlag(string $flag)
{
return imap_setflag_full($this->stream, $this->messageNumber, $flag, ST_UID);
$result = imap_setflag_full($this->stream, (string) $this->messageNumber, $flag, \ST_UID);

$this->clearHeaders();

return $result;
}

/**
* Clear Flag Message
* @param [type] $flag \Seen, \Answered, \Flagged, \Deleted, and \Draft
* @return bool [description]
*
* @param $flag \Seen, \Answered, \Flagged, \Deleted, and \Draft
*
* @return bool
*/
public function clearFlag($flag)
public function clearFlag(string $flag)
{
return imap_clearflag_full($this->stream, $this->messageNumber, $flag, ST_UID);
$result = imap_clearflag_full($this->stream, (string) $this->messageNumber, $flag, \ST_UID);

$this->clearHeaders();

return $result;
}
}
36 changes: 36 additions & 0 deletions tests/MessageTest.php
Expand Up @@ -51,6 +51,21 @@ public function testKeepUnseen()
$this->assertFalse($message->isSeen());
}

public function testFlags()
{
$this->createTestMessage($this->mailbox, 'Message A');

$message = $this->mailbox->getMessage(1);

$this->assertSame('N', $message->isRecent());
$this->assertFalse($message->isUnseen());
$this->assertFalse($message->isFlagged());
$this->assertFalse($message->isAnswered());
$this->assertFalse($message->isDeleted());
$this->assertFalse($message->isDraft());
$this->assertFalse($message->isSeen());
}

/**
* @dataProvider provideCharsets
*/
Expand Down Expand Up @@ -330,4 +345,25 @@ public function testRawHeaders()

$this->assertSame($expectedHeaders, $message->getRawHeaders());
}

public function testSetFlags()
{
$this->createTestMessage($this->mailbox, 'Message A');

$message = $this->mailbox->getMessage(1);

$this->assertFalse($message->isFlagged());

$message->setFlag('\\Flagged');

$this->assertTrue($message->isFlagged());

$message->clearFlag('\\Flagged');

$this->assertFalse($message->isFlagged());

$message->setFlag('\\Seen');
$this->assertSame('R', $message->isRecent());
$this->assertTrue($message->isSeen());
}
}

0 comments on commit afa786c

Please sign in to comment.