|
215 | 215 | ->toBe("http://localhost/prefix/{$tenant->getTenantKey()}/home");
|
216 | 216 | });
|
217 | 217 |
|
218 |
| -test('clone middleware within middleware groups is properly handled during cloning', function () { |
219 |
| - // Simple MW group with 'clone' flag |
220 |
| - RouteFacade::middlewareGroup('simple-group', ['auth', 'clone']); |
221 |
| - |
222 |
| - // Define nested middleware groups 3 levels deep |
223 |
| - RouteFacade::middlewareGroup('level-3-group', ['clone']); |
224 |
| - RouteFacade::middlewareGroup('level-2-group', ['auth', 'level-3-group']); |
225 |
| - RouteFacade::middlewareGroup('nested-group', ['web', 'level-2-group']); |
226 |
| - |
227 |
| - // Create routes using both simple and nested middleware groups |
228 |
| - RouteFacade::get('/simple', fn () => true) |
229 |
| - ->middleware('simple-group') |
230 |
| - ->name('simple'); |
231 |
| - |
232 |
| - RouteFacade::get('/nested', fn () => true) |
233 |
| - ->middleware('nested-group') |
234 |
| - ->name('nested'); |
235 |
| - |
236 |
| - app(CloneRoutesAsTenant::class)->handle(); |
237 |
| - |
238 |
| - // Test simple middleware group handling |
239 |
| - $clonedSimpleRoute = RouteFacade::getRoutes()->getByName('tenant.simple'); |
240 |
| - expect($clonedSimpleRoute)->not()->toBeNull(); |
241 |
| - |
242 |
| - $simpleRouteMiddleware = tenancy()->getRouteMiddleware($clonedSimpleRoute); |
243 |
| - expect($simpleRouteMiddleware) |
244 |
| - ->toContain('auth', 'tenant') |
245 |
| - ->not()->toContain('clone', 'simple-group'); |
246 |
| - |
247 |
| - // Test nested middleware group handling (3 levels deep) |
248 |
| - $clonedNestedRoute = RouteFacade::getRoutes()->getByName('tenant.nested'); |
249 |
| - expect($clonedNestedRoute)->not()->toBeNull(); |
250 |
| - |
251 |
| - $nestedRouteMiddleware = tenancy()->getRouteMiddleware($clonedNestedRoute); |
| 218 | +test('tenant routes are ignored from cloning and clone middleware in groups causes no issues', function () { |
| 219 | + // Should NOT be cloned, already has tenant parameter |
| 220 | + RouteFacade::get("/{tenant}/route-with-tenant-parameter", fn () => true) |
| 221 | + ->middleware(['clone']) |
| 222 | + ->name("tenant.route-with-tenant-parameter"); |
| 223 | + |
| 224 | + // Should NOT be cloned |
| 225 | + // The route already has tenant name prefix |
| 226 | + RouteFacade::get("/route-with-tenant-name-prefix", fn () => true) |
| 227 | + ->middleware(['clone']) |
| 228 | + ->name("tenant.route-with-tenant-name-prefix"); |
| 229 | + |
| 230 | + // Should NOT be cloned |
| 231 | + // The route already has a tenant parameter + 'clone' middleware in group |
| 232 | + // 'clone' MW in groups won't be removed, this also doesn't cause any issues |
| 233 | + RouteFacade::middlewareGroup('group', ['auth', 'clone']); |
| 234 | + RouteFacade::get("/{tenant}/route-with-clone-in-mw-group", fn () => true) |
| 235 | + ->middleware('group') |
| 236 | + ->name("tenant.route-with-clone-in-mw-group"); |
| 237 | + |
| 238 | + // SHOULD be cloned (with clone middleware) |
| 239 | + RouteFacade::get('/foo', fn () => true) |
| 240 | + ->middleware(['clone']) |
| 241 | + ->name('foo'); |
| 242 | + |
| 243 | + // SHOULD be cloned (with nested clone middleware) |
| 244 | + RouteFacade::get('/bar', fn () => true) |
| 245 | + ->middleware(['group']) |
| 246 | + ->name('bar'); |
| 247 | + |
| 248 | + $cloneAction = app(CloneRoutesAsTenant::class); |
| 249 | + $initialRouteCount = count(RouteFacade::getRoutes()->get()); |
| 250 | + |
| 251 | + // Run clone action multiple times |
| 252 | + $cloneAction->handle(); |
| 253 | + $firstRunCount = count(RouteFacade::getRoutes()->get()); |
| 254 | + |
| 255 | + $cloneAction->handle(); |
| 256 | + $secondRunCount = count(RouteFacade::getRoutes()->get()); |
| 257 | + |
| 258 | + $cloneAction->handle(); |
| 259 | + $thirdRunCount = count(RouteFacade::getRoutes()->get()); |
| 260 | + |
| 261 | + // Two route should have been cloned, and only once |
| 262 | + expect($firstRunCount)->toBe($initialRouteCount + 2); |
| 263 | + // No new routes on subsequent runs |
| 264 | + expect($secondRunCount)->toBe($firstRunCount); |
| 265 | + expect($thirdRunCount)->toBe($firstRunCount); |
| 266 | + |
| 267 | + // Verify the correct routes were cloned |
| 268 | + expect(RouteFacade::getRoutes()->getByName('tenant.foo'))->not()->toBeNull(); |
| 269 | + expect(RouteFacade::getRoutes()->getByName('tenant.bar'))->not()->toBeNull(); |
252 | 270 |
|
253 |
| - expect($nestedRouteMiddleware) |
254 |
| - ->toContain('web', 'auth', 'tenant') |
255 |
| - // Shouldn't contain 'clone' or any nested group names |
256 |
| - ->not()->toContain('clone', 'nested-group', 'level-2-group', 'level-3-group'); |
| 271 | + // Tenant routes were not duplicated |
| 272 | + $allRouteNames = collect(RouteFacade::getRoutes()->get())->map->getName()->filter(); |
| 273 | + expect($allRouteNames->filter(fn($name) => str_contains($name, 'route-with-tenant-parameter'))->count())->toBe(1); |
| 274 | + expect($allRouteNames->filter(fn($name) => str_contains($name, 'route-with-tenant-name-prefix'))->count())->toBe(1); |
| 275 | + expect($allRouteNames->filter(fn($name) => str_contains($name, 'route-with-clone-in-mw-group'))->count())->toBe(1); |
257 | 276 | });
|
0 commit comments