44
55use PHPUnit \Framework \Attributes \DataProvider ;
66use PHPUnit \Framework \Attributes \Test ;
7+ use Statamic \Facades \Blueprint ;
78use Statamic \Facades \Config ;
89use Statamic \Facades \Entry ;
910use Statamic \Facades \Site ;
1011use Statamic \SeoPro \Cascade ;
12+ use Statamic \SeoPro \Fields ;
1113use Statamic \SeoPro \SiteDefaults ;
1214
1315class CascadeTest extends TestCase
@@ -25,7 +27,7 @@ protected function tearDown(): void
2527 public function it_generates_seo_cascade_from_site_defaults_and_home_entry ()
2628 {
2729 $ data = (new Cascade )
28- ->with (SiteDefaults::load ()->all ())
30+ ->withSiteDefaults (SiteDefaults::load ()->all ())
2931 ->get ();
3032
3133 $ expected = [
@@ -58,7 +60,7 @@ public function it_generates_seo_cascade_from_site_defaults_and_home_entry()
5860 public function it_overwrites_data_in_cascade ()
5961 {
6062 $ data = (new Cascade )
61- ->with (SiteDefaults::load ()->all ())
63+ ->withSiteDefaults (SiteDefaults::load ()->all ())
6264 ->with ([
6365 'site_name ' => 'Cool Writings ' ,
6466 'description ' => 'Bob sled team ' ,
@@ -97,7 +99,7 @@ public function it_overwrites_data_in_cascade()
9799 public function it_generates_compiled_title_from_cascaded_parts ()
98100 {
99101 $ data = (new Cascade )
100- ->with (SiteDefaults::load ()->all ())
102+ ->withSiteDefaults (SiteDefaults::load ()->all ())
101103 ->with ([
102104 'site_name ' => 'Cool Writings ' ,
103105 'site_name_position ' => 'after ' ,
@@ -112,6 +114,32 @@ public function it_generates_compiled_title_from_cascaded_parts()
112114 $ this ->assertEquals ('Cool Writings >>> Jamaica ' , $ data ['compiled_title ' ]);
113115 }
114116
117+ #[Test]
118+ public function it_falls_back_to_site_default_when_from_field_value_is_empty ()
119+ {
120+ $ entry = Entry::findByUri ('/about ' )->entry ();
121+
122+ $ sectionDefaults = Blueprint::make ()
123+ ->setContents ([
124+ 'fields ' => Fields::new ()->getConfig (),
125+ ])
126+ ->fields ()
127+ ->addValues ([
128+ 'image ' => '@seo:cover ' ,
129+ ])
130+ ->augment ()
131+ ->values ()
132+ ->only (['image ' ]);
133+
134+ $ data = (new Cascade )
135+ ->withSiteDefaults (SiteDefaults::load (['image ' => 'seo/default.jpg ' ])->all ())
136+ ->withSectionDefaults ($ sectionDefaults )
137+ ->withCurrent ($ entry )
138+ ->get ();
139+
140+ $ this ->assertEquals ('seo/default.jpg ' , $ data ['image ' ]);
141+ }
142+
115143 #[Test]
116144 public function it_parses_antlers ()
117145 {
@@ -120,7 +148,7 @@ public function it_parses_antlers()
120148 $ entry ->data (['favourite_colour ' => 'Red ' ])->save ();
121149
122150 $ data = (new Cascade )
123- ->with (SiteDefaults::load ()->all ())
151+ ->withSiteDefaults (SiteDefaults::load ()->all ())
124152 ->with ([
125153 'description ' => '{{ favourite_colour | upper }} ' ,
126154 ])
@@ -159,7 +187,7 @@ public function it_doesnt_parse_php_in_antlers($antlers, $output)
159187 $ entry = Entry::findByUri ('/about ' )->entry ();
160188
161189 $ data = (new Cascade )
162- ->with (SiteDefaults::load ()->all ())
190+ ->withSiteDefaults (SiteDefaults::load ()->all ())
163191 ->with ([
164192 'description ' => $ antlers ,
165193 ])
@@ -178,7 +206,7 @@ public function it_parses_field_references()
178206 $ entry ->data (['favourite_colour ' => 'Red ' ])->save ();
179207
180208 $ data = (new Cascade )
181- ->with (SiteDefaults::load ()->all ())
209+ ->withSiteDefaults (SiteDefaults::load ()->all ())
182210 ->with ([
183211 'description ' => '@seo:favourite_colour ' ,
184212 ])
@@ -194,7 +222,7 @@ public function it_generates_seo_cascade_without_exception_when_no_home_entry_ex
194222 Entry::findByUri ('/ ' )->delete ();
195223
196224 $ data = (new Cascade )
197- ->with (SiteDefaults::load ()->all ())
225+ ->withSiteDefaults (SiteDefaults::load ()->all ())
198226 ->get ();
199227
200228 $ expected = [
@@ -225,7 +253,7 @@ public function it_generates_seo_cascade_without_exception_when_no_home_entry_ex
225253 public function it_generates_404_title_with_404_in_response_code_in_context ()
226254 {
227255 $ data = (new Cascade )
228- ->with (SiteDefaults::load ()->all ())
256+ ->withSiteDefaults (SiteDefaults::load ()->all ())
229257 ->with ([
230258 'response_code ' => 404 ,
231259 ])
@@ -253,7 +281,7 @@ public function it_generates_seo_cascade_from_custom_site_defaults_path()
253281 Config::set ('statamic.seo-pro.site_defaults.path ' , base_path ('custom_seo.yaml ' ));
254282
255283 $ data = (new Cascade )
256- ->with (SiteDefaults::load ()->all ())
284+ ->withSiteDefaults (SiteDefaults::load ()->all ())
257285 ->get ();
258286
259287 $ expected = [
@@ -284,7 +312,7 @@ public function it_generates_seo_cascade_from_custom_site_defaults_path()
284312 public function it_overwrites_og_title ()
285313 {
286314 $ data = (new Cascade )
287- ->with (SiteDefaults::load ()->all ())
315+ ->withSiteDefaults (SiteDefaults::load ()->all ())
288316 ->with ([
289317 'site_name ' => 'Cool Writings ' ,
290318 'description ' => 'Bob sled team ' ,
@@ -323,7 +351,7 @@ public function it_overwrites_og_title()
323351 public function it_overwrites_twitter_title_and_description ()
324352 {
325353 $ data = (new Cascade )
326- ->with (SiteDefaults::load ()->all ())
354+ ->withSiteDefaults (SiteDefaults::load ()->all ())
327355 ->with ([
328356 'site_name ' => 'Cool Writings ' ,
329357 'description ' => 'Bob sled team ' ,
0 commit comments