33namespace Tests \Http \Middleware ;
44
55use Illuminate \Http \Request ;
6+ use PHPUnit \Framework \Attributes \DataProvider ;
67use PHPUnit \Framework \Attributes \Test ;
78use Statamic \Facades \Site ;
89use Statamic \Facades \User ;
@@ -81,13 +82,12 @@ public function it_doesnt_do_anything_when_there_are_no_authorized_sites()
8182 $ this ->assertEquals ('de ' , Site::selected ()->handle ());
8283 }
8384
84- #[Test]
85- public function it_sets_the_correct_site_when_first_logging_in ()
85+ #[Test, DataProvider( ' firstLoginProvider ' ) ]
86+ public function it_sets_the_correct_site_when_first_logging_in ($ existingSelection , $ url , $ expectedSelection )
8687 {
8788 $ this ->setSites ([
8889 'en ' => ['url ' => 'https://en.test ' , 'locale ' => 'en ' ],
8990 'fr ' => ['url ' => 'https://fr.test ' , 'locale ' => 'fr ' ],
90- 'de ' => ['url ' => 'https://de.test ' , 'locale ' => 'de ' ],
9191 ]);
9292
9393 $ this ->setTestRoles (['test ' => [
@@ -96,22 +96,10 @@ public function it_sets_the_correct_site_when_first_logging_in()
9696 $ user = tap (User::make ()->assignRole ('test ' ))->save ();
9797
9898 $ this ->actingAs ($ user );
99- $ request = $ this ->createRequest (' https://fr.test/cp/foo ' );
99+ $ request = $ this ->createRequest ($ url );
100100 $ handled = false ;
101101
102- (new SelectedSite ())->handle ($ request , function () use (&$ handled ) {
103- $ handled = true ;
104-
105- return new Response ;
106- });
107-
108- $ this ->assertTrue ($ handled );
109- $ this ->assertEquals ('fr ' , Site::selected ()->handle ());
110-
111- Site::setSelected ('en ' );
112-
113- $ request = $ this ->createRequest ('https://fr.test/cp/bar ' );
114- $ handled = false ;
102+ $ this ->session (['statamic.cp.selected-site ' => $ existingSelection ]);
115103
116104 (new SelectedSite ())->handle ($ request , function () use (&$ handled ) {
117105 $ handled = true ;
@@ -120,7 +108,26 @@ public function it_sets_the_correct_site_when_first_logging_in()
120108 });
121109
122110 $ this ->assertTrue ($ handled );
123- $ this ->assertEquals ('en ' , Site::selected ()->handle ());
111+ $ this ->assertEquals ($ expectedSelection , Site::selected ()->handle ());
112+ }
113+
114+ public static function firstLoginProvider ()
115+ {
116+ $ enUrl = 'https://en.test/cp/foo ' ;
117+ $ frUrl = 'https://fr.test/cp/foo ' ;
118+ $ unknownUrl = 'https://unknown.test/cp/foo ' ;
119+
120+ return [
121+ 'en site: fresh session ' => [null , $ enUrl , 'en ' ],
122+ 'en site: existing en session ' => ['en ' , $ enUrl , 'en ' ],
123+ 'en site: existing fr session ' => ['fr ' , $ enUrl , 'fr ' ],
124+ 'fr site: fresh session ' => [null , $ frUrl , 'fr ' ],
125+ 'fr site: existing fr session ' => ['fr ' , $ frUrl , 'fr ' ],
126+ 'fr site: existing en session ' => ['en ' , $ frUrl , 'en ' ],
127+ 'unknown site: fresh session ' => [null , $ unknownUrl , 'en ' ],
128+ 'unknown site: existing en session ' => ['en ' , $ unknownUrl , 'en ' ],
129+ 'unknown site: existing fr session ' => ['fr ' , $ unknownUrl , 'fr ' ],
130+ ];
124131 }
125132
126133 #[Test]
0 commit comments