]>
Commit | Line | Data |
---|---|---|
1 | <?php | |
2 | ||
3 | declare(strict_types=1); | |
4 | ||
5 | namespace Shaarli\Front\Controller\Admin\ShaareManageControllerTest; | |
6 | ||
7 | use Shaarli\Bookmark\Bookmark; | |
8 | use Shaarli\Front\Controller\Admin\FrontAdminControllerMockHelper; | |
9 | use Shaarli\Front\Controller\Admin\ShaareManageController; | |
10 | use Shaarli\Http\HttpAccess; | |
11 | use Shaarli\TestCase; | |
12 | use Slim\Http\Request; | |
13 | use Slim\Http\Response; | |
14 | ||
15 | /** | |
16 | * Test GET /admin/shaare/private/{hash} | |
17 | */ | |
18 | class SharePrivateTest extends TestCase | |
19 | { | |
20 | use FrontAdminControllerMockHelper; | |
21 | ||
22 | /** @var ShaareManageController */ | |
23 | protected $controller; | |
24 | ||
25 | public function setUp(): void | |
26 | { | |
27 | $this->createContainer(); | |
28 | ||
29 | $this->container->httpAccess = $this->createMock(HttpAccess::class); | |
30 | $this->controller = new ShaareManageController($this->container); | |
31 | } | |
32 | ||
33 | /** | |
34 | * Test shaare private with a private bookmark which does not have a key yet. | |
35 | */ | |
36 | public function testSharePrivateWithNewPrivateBookmark(): void | |
37 | { | |
38 | $hash = 'abcdcef'; | |
39 | $request = $this->createMock(Request::class); | |
40 | $response = new Response(); | |
41 | ||
42 | $bookmark = (new Bookmark()) | |
43 | ->setId(123) | |
44 | ->setUrl('http://domain.tld') | |
45 | ->setTitle('Title 123') | |
46 | ->setPrivate(true) | |
47 | ; | |
48 | ||
49 | $this->container->bookmarkService | |
50 | ->expects(static::once()) | |
51 | ->method('findByHash') | |
52 | ->with($hash) | |
53 | ->willReturn($bookmark) | |
54 | ; | |
55 | $this->container->bookmarkService | |
56 | ->expects(static::once()) | |
57 | ->method('set') | |
58 | ->with($bookmark, true) | |
59 | ->willReturnCallback(function (Bookmark $bookmark): Bookmark { | |
60 | static::assertSame(32, strlen($bookmark->getAdditionalContentEntry('private_key'))); | |
61 | ||
62 | return $bookmark; | |
63 | }) | |
64 | ; | |
65 | ||
66 | $result = $this->controller->sharePrivate($request, $response, ['hash' => $hash]); | |
67 | ||
68 | static::assertSame(302, $result->getStatusCode()); | |
69 | static::assertRegExp('#/subfolder/shaare/' . $hash . '\?key=\w{32}#', $result->getHeaderLine('Location')); | |
70 | } | |
71 | ||
72 | /** | |
73 | * Test shaare private with a private bookmark which does already have a key. | |
74 | */ | |
75 | public function testSharePrivateWithExistingPrivateBookmark(): void | |
76 | { | |
77 | $hash = 'abcdcef'; | |
78 | $existingKey = 'this is a private key'; | |
79 | $request = $this->createMock(Request::class); | |
80 | $response = new Response(); | |
81 | ||
82 | $bookmark = (new Bookmark()) | |
83 | ->setId(123) | |
84 | ->setUrl('http://domain.tld') | |
85 | ->setTitle('Title 123') | |
86 | ->setPrivate(true) | |
87 | ->addAdditionalContentEntry('private_key', $existingKey) | |
88 | ; | |
89 | ||
90 | $this->container->bookmarkService | |
91 | ->expects(static::once()) | |
92 | ->method('findByHash') | |
93 | ->with($hash) | |
94 | ->willReturn($bookmark) | |
95 | ; | |
96 | $this->container->bookmarkService | |
97 | ->expects(static::never()) | |
98 | ->method('set') | |
99 | ; | |
100 | ||
101 | $result = $this->controller->sharePrivate($request, $response, ['hash' => $hash]); | |
102 | ||
103 | static::assertSame(302, $result->getStatusCode()); | |
104 | static::assertSame('/subfolder/shaare/' . $hash . '?key=' . $existingKey, $result->getHeaderLine('Location')); | |
105 | } | |
106 | ||
107 | /** | |
108 | * Test shaare private with a public bookmark. | |
109 | */ | |
110 | public function testSharePrivateWithPublicBookmark(): void | |
111 | { | |
112 | $hash = 'abcdcef'; | |
113 | $request = $this->createMock(Request::class); | |
114 | $response = new Response(); | |
115 | ||
116 | $bookmark = (new Bookmark()) | |
117 | ->setId(123) | |
118 | ->setUrl('http://domain.tld') | |
119 | ->setTitle('Title 123') | |
120 | ->setPrivate(false) | |
121 | ; | |
122 | ||
123 | $this->container->bookmarkService | |
124 | ->expects(static::once()) | |
125 | ->method('findByHash') | |
126 | ->with($hash) | |
127 | ->willReturn($bookmark) | |
128 | ; | |
129 | $this->container->bookmarkService | |
130 | ->expects(static::never()) | |
131 | ->method('set') | |
132 | ; | |
133 | ||
134 | $result = $this->controller->sharePrivate($request, $response, ['hash' => $hash]); | |
135 | ||
136 | static::assertSame(302, $result->getStatusCode()); | |
137 | static::assertSame('/subfolder/shaare/' . $hash, $result->getHeaderLine('Location')); | |
138 | } | |
139 | } |