From dff635a269ba871ceb7904c646b7bf9cc088f5f2 Mon Sep 17 00:00:00 2001 From: NullVoxPopuli <199018+NullVoxPopuli@users.noreply.github.com> Date: Sun, 31 Dec 2023 09:25:32 -0500 Subject: [PATCH] Fix issue with `no-deprecated-router-transition-methods` throwing errors outside of class usage (#2046) * Failing tets for no deprecatde router transition methods * minimize test * fix lint:fix eh --- ...no-deprecated-router-transition-methods.js | 4 ++++ ...no-deprecated-router-transition-methods.js | 24 +++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/lib/rules/no-deprecated-router-transition-methods.js b/lib/rules/no-deprecated-router-transition-methods.js index a2df455b86..b4a47e7e2c 100644 --- a/lib/rules/no-deprecated-router-transition-methods.js +++ b/lib/rules/no-deprecated-router-transition-methods.js @@ -187,6 +187,10 @@ module.exports = { const currentClass = classStack.peek(); + if (!currentClass) { + return; + } + if (types.isThisExpression(node.object) && types.isIdentifier(node.property)) { // Routes should not call transitionTo or replaceWith const propertyName = node.property.name; diff --git a/tests/lib/rules/no-deprecated-router-transition-methods.js b/tests/lib/rules/no-deprecated-router-transition-methods.js index 54d59f21b1..ff51b524be 100644 --- a/tests/lib/rules/no-deprecated-router-transition-methods.js +++ b/tests/lib/rules/no-deprecated-router-transition-methods.js @@ -358,6 +358,30 @@ ruleTester.run('no-deprecated-router-transition-methods', rule, { @computed.reads('model.actors') actors; }`, }, + + // Does not error when `this` is from a test context + { + filename: 'tests/application/output-demos-test.ts', + code: ` + import Controller from '@ember/controller'; + import { visit } from '@ember/test-helpers'; + import { module, test } from 'qunit'; + import { setupApplicationTest } from 'ember-qunit'; + + module('Output > Demos', function (hooks) { + setupApplicationTest(hooks); + + module('The output frame renders every demo', function () { + test('example', async function (assert) { + class FakeController extends Controller {} + this.owner.register('controller:edit', FakeController); + await visit('/edit'); + }); + }); + }); + + `, + }, ], invalid: [ // Route Uses RouterService.transitionTo with different service injection types