Completed
Push — master ( 1e8cf3...95d72b )
by Frederik
03:41 queued 01:03
created

UntaggedResponse::withAddedBody()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 5
ccs 3
cts 3
cp 1
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
crap 1
1
<?php
2
declare(strict_types=1);
3
4
namespace Genkgo\Mail\Protocol\Imap\Response;
5
6
use Genkgo\Mail\Exception\AssertionFailedException;
7
use Genkgo\Mail\Protocol\Imap\ResponseInterface;
8
9
final class UntaggedResponse implements ResponseInterface
10
{
11
    /**
12
     * @var string
13
     */
14
    private $line;
15
16
    /**
17
     * @var string
18
     */
19
    private $command;
20
21
    /**
22
     * @param string $line
23
     */
24 20
    public function __construct(string $line)
25
    {
26 20
        $this->line = $line;
27 20
    }
28
29
    /**
30
     * @return string
31
     */
32 1
    public function __toString(): string
33
    {
34 1
        return '* ' . \trim(\implode(' ', [$this->command, $this->line]));
35
    }
36
37
    /**
38
     * @param CompletionResult $expectedResult
39
     * @return ResponseInterface
40
     * @throws AssertionFailedException
41
     */
42 3
    public function assertCompletion(CompletionResult $expectedResult): ResponseInterface
43
    {
44
        try {
45 3
            $completionResult = CompletionResult::fromLine($this->line);
46 2
            if (!$completionResult->equals($expectedResult)) {
47 1
                throw new AssertionFailedException(
48 1
                    \sprintf(
49 1
                        'Returned completion, but %s is not equals to expected %s',
50 1
                        (string)$completionResult,
51 2
                        (string)$expectedResult
52
                    )
53
                );
54
            }
55 2
        } catch (\InvalidArgumentException $e) {
56 1
            throw new AssertionFailedException();
57
        }
58
59 1
        return $this;
60
    }
61
62
    /**
63
     * @return ResponseInterface
64
     * @throws AssertionFailedException
65
     */
66 1
    public function assertContinuation(): ResponseInterface
67
    {
68 1
        throw new AssertionFailedException();
69
    }
70
71
    /**
72
     * @return ResponseInterface
73
     * @throws AssertionFailedException
74
     */
75 1
    public function assertTagged(): ResponseInterface
76
    {
77 1
        throw new AssertionFailedException('An untagged response is never tagged');
78
    }
79
80
    /**
81
     * @param string $className
82
     * @return ResponseInterface
83
     * @throws AssertionFailedException
84
     */
85
    public function assertParsed(string $className): ResponseInterface
86
    {
87
        throw new AssertionFailedException('An untagged response is never parsed');
88
    }
89
90
    /**
91
     * @return string
92
     */
93 10
    public function getBody(): string
94
    {
95 10
        return $this->line;
96
    }
97
}
98