From 04f2de422d92b47a5f282a3416bed4bb32c4c03d Mon Sep 17 00:00:00 2001 From: David Taylor Date: Thu, 28 Dec 2023 16:12:39 +0000 Subject: [PATCH] Failing test for chained redirects via routeWillChange When there is a chain of two redirects triggered via a routeWillChange hook, the destination route model() hook is called twice, and is called with the wrong parameters. Failing test for https://github.com/emberjs/ember.js/issues/20611 --- .../router_service_test/events_test.js | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/packages/ember/tests/routing/router_service_test/events_test.js b/packages/ember/tests/routing/router_service_test/events_test.js index 6c3b59f71be..f0bfc7cabed 100644 --- a/packages/ember/tests/routing/router_service_test/events_test.js +++ b/packages/ember/tests/routing/router_service_test/events_test.js @@ -299,6 +299,44 @@ moduleFor( }); } + '@test chained redirection with `transitionTo` and url params'(assert) { + this.add( + `route:dynamic`, + Route.extend({ + router: service(), + model(params) { + assert.step(`loaded-${params.dynamic_id}`); + }, + }) + ); + + return this.visit('/').then(() => { + this.routerService.on('routeWillChange', (transition) => { + let to = transition.to; + if (to.name === 'dynamic') { + assert.step(`willchange-to-${to.params.dynamic_id}`); + if (to.params.dynamic_id === '1') { + this.routerService.transitionTo('dynamic', '2'); + } else if (to.params.dynamic_id === '2') { + this.routerService.transitionTo('dynamic', '3'); + } + } + }); + + return this.routerService + .transitionTo('/dynamic/1') + .followRedirects() + .then(() => { + assert.verifySteps([ + 'willchange-to-1', + 'willchange-to-2', + 'willchange-to-3', + 'loaded-3', + ]); + }); + }); + } + '@test nested redirection with `replaceWith`'(assert) { assert.expect(11); let toChild = false;