|
3 | 3 | use Aerni\AdvancedSeo\Cascades\ContextViewCascade; |
4 | 4 | use Statamic\Facades\AssetContainer; |
5 | 5 | use Statamic\Facades\Collection; |
| 6 | +use Statamic\Facades\Entry; |
6 | 7 | use Statamic\Facades\Site; |
7 | 8 | use Statamic\Facades\Taxonomy; |
8 | 9 | use Statamic\Tags\Context; |
|
138 | 139 | expect($cascade->breadcrumbs())->toBeNull(); |
139 | 140 | }); |
140 | 141 |
|
| 142 | +it('resolves all breadcrumb ancestors on a site with a url prefix', function () { |
| 143 | + $collection = Collection::make('docs') |
| 144 | + ->routes('{parent_uri}/{slug}') |
| 145 | + ->sites(['english', 'german']) |
| 146 | + ->structureContents(['root' => true]) |
| 147 | + ->save(); |
| 148 | + |
| 149 | + // Rebuild the memoized SeoSet registry so the new collection is recognised. |
| 150 | + flushBlink(); |
| 151 | + |
| 152 | + $home = Entry::make()->collection('docs')->locale('german')->slug('home')->data(['title' => 'Home']); |
| 153 | + $home->save(); |
| 154 | + |
| 155 | + $levelOne = Entry::make()->collection('docs')->locale('german')->slug('level-1')->data(['title' => 'Level 1']); |
| 156 | + $levelOne->save(); |
| 157 | + |
| 158 | + $levelTwo = Entry::make()->collection('docs')->locale('german')->slug('level-2')->data(['title' => 'Level 2']); |
| 159 | + $levelTwo->save(); |
| 160 | + |
| 161 | + $collection->structure()->in('german')->tree([ |
| 162 | + ['entry' => $home->id()], |
| 163 | + ['entry' => $levelOne->id(), 'children' => [ |
| 164 | + ['entry' => $levelTwo->id()], |
| 165 | + ]], |
| 166 | + ])->save(); |
| 167 | + |
| 168 | + flushBlink(); |
| 169 | + |
| 170 | + Site::setCurrent('german'); |
| 171 | + |
| 172 | + $context = new Context(collect([ |
| 173 | + 'current_url' => 'https://example.com/de/level-1/level-2', |
| 174 | + 'site' => Site::get('german'), |
| 175 | + ])); |
| 176 | + |
| 177 | + $cascade = ContextViewCascade::from($context); |
| 178 | + $cascade->set('use_breadcrumbs', true); |
| 179 | + |
| 180 | + $items = collect(json_decode($cascade->breadcrumbs(), true)['itemListElement']); |
| 181 | + |
| 182 | + expect($items->pluck('name')->all())->toBe(['Home', 'Level 1', 'Level 2']) |
| 183 | + ->and($items->pluck('item')->all())->toBe([ |
| 184 | + 'https://example.com/de/', |
| 185 | + 'https://example.com/de/level-1', |
| 186 | + 'https://example.com/de/level-1/level-2', |
| 187 | + ]); |
| 188 | +}); |
| 189 | + |
141 | 190 | it('returns default title when context has a title', function () { |
142 | 191 | $context = new Context(collect([ |
143 | 192 | 'title' => 'Custom Page', |
|
0 commit comments