1+ <?php
2+
3+ namespace FiveamCode \LaravelNotionApi \Tests ;
4+
5+ use Carbon \Carbon ;
6+ use FiveamCode \LaravelNotionApi \Entities \Blocks \Block ;
7+ use FiveamCode \LaravelNotionApi \Entities \Collections \BlockCollection ;
8+ use FiveamCode \LaravelNotionApi \Entities \Collections \UserCollection ;
9+ use FiveamCode \LaravelNotionApi \Entities \Page ;
10+ use FiveamCode \LaravelNotionApi \Entities \User ;
11+ use FiveamCode \LaravelNotionApi \Exceptions \NotionException ;
12+ use Illuminate \Support \Facades \Http ;
13+ use Orchestra \Testbench \TestCase ;
14+
15+ /**
16+ * Class EndpointUsersTest
17+ *
18+ * The fake API responses are based on Notions documentation.
19+ * @see https://developers.notion.com/reference/get-users
20+ *
21+ * @package FiveamCode\LaravelNotionApi\Tests
22+ */
23+ class EndpointUsersTest extends NotionApiTest
24+ {
25+
26+ /** @test */
27+ public function it_throws_a_notion_exception_bad_request ()
28+ {
29+ // failing /v1
30+ Http::fake ([
31+ 'https://api.notion.com/v1/users?* '
32+ => Http::response (
33+ json_decode ('{} ' , true ),
34+ 400 ,
35+ ['Headers ' ]
36+ )
37+ ]);
38+
39+ $ this ->expectException (NotionException::class);
40+ $ this ->expectExceptionMessage ("Bad Request " );
41+
42+ \Notion::users ()->all ();
43+ }
44+
45+ /** @test */
46+ public function it_returns_all_users_of_workspace_as_collection_with_entity_objects ()
47+ {
48+ // successful /v1/users
49+ Http::fake ([
50+ 'https://api.notion.com/v1/users?* '
51+ => Http::response (
52+ json_decode (file_get_contents ('tests/stubs/endpoints/users/response_all_200.json ' ), true ),
53+ 200 ,
54+ ['Headers ' ]
55+ )
56+ ]);
57+
58+ $ users = \Notion::users ()->all ();
59+
60+ $ this ->assertInstanceOf (UserCollection::class, $ users );
61+
62+ $ userCollection = $ users ->asCollection ();
63+ $ this ->assertContainsOnly (User::class, $ userCollection );
64+ $ this ->assertIsIterable ($ userCollection );
65+ $ this ->assertCount (2 , $ userCollection );
66+
67+ $ user = $ userCollection ->first ();
68+
69+ $ this ->assertInstanceOf (User::class, $ user );
70+ $ this ->assertEquals ("Avocado Lovelace " , $ user ->getName ());
71+ $ this ->assertEquals ("https://secure.notion-static.com/e6a352a8-8381-44d0-a1dc-9ed80e62b53d.jpg " , $ user ->getAvatarUrl ());
72+ }
73+
74+ /** @test */
75+ public function it_returns_a_specific_user_as_entity_object ()
76+ {
77+ // successful /v1/users/USER_DOES_EXITS
78+ Http::fake ([
79+ 'https://api.notion.com/v1/users/d40e767c-d7af-4b18-a86d-55c61f1e39a4 '
80+ => Http::response (
81+ json_decode (file_get_contents ('tests/stubs/endpoints/users/response_specific_200.json ' ), true ),
82+ 200 ,
83+ ['Headers ' ]
84+ )
85+ ]);
86+
87+ $ user = \Notion::users ()->find ("d40e767c-d7af-4b18-a86d-55c61f1e39a4 " );
88+
89+ $ this ->assertInstanceOf (User::class, $ user );
90+ $ this ->assertEquals ("Avocado Lovelace " , $ user ->getName ());
91+ $ this ->assertEquals ("https://secure.notion-static.com/e6a352a8-8381-44d0-a1dc-9ed80e62b53d.jpg " , $ user ->getAvatarUrl ());
92+ }
93+
94+ /** @test */
95+ public function it_throws_a_notion_exception_not_found ()
96+ {
97+ // failing /v1/pages/PAGE_DOES_NOT_EXIST
98+ Http::fake ([
99+ 'https://api.notion.com/v1/users/d40e767c-d7af-4b18-a86d-55c61f1e39a1 '
100+ => Http::response (
101+ json_decode (file_get_contents ('tests/stubs/endpoints/users/response_specific_404.json ' ), true ),
102+ 200 ,
103+ ['Headers ' ]
104+ )
105+ ]);
106+
107+ $ this ->expectException (NotionException::class);
108+ $ this ->expectExceptionMessage ("Not found " );
109+
110+ \Notion::users ()->find ("d40e767c-d7af-4b18-a86d-55c61f1e39a1 " );
111+ }
112+
113+ }
0 commit comments