@@ -10,7 +10,13 @@ const RuleTester = require('eslint').RuleTester;
1010// ------------------------------------------------------------------------------
1111
1212const eslintTester = new RuleTester ( {
13- parserOptions : { ecmaVersion : 2022 , sourceType : 'module' } ,
13+ parserOptions : {
14+ ecmaVersion : 2022 ,
15+ sourceType : 'module' ,
16+ babelOptions : {
17+ configFile : require . resolve ( '../../../.babelrc' ) ,
18+ } ,
19+ } ,
1420 parser : require . resolve ( '@babel/eslint-parser' ) ,
1521} ) ;
1622
@@ -170,6 +176,56 @@ eslintTester.run('order-in-routes', rule, {
170176 ] ,
171177 parserOptions : { ecmaVersion : 2022 , sourceType : 'module' } ,
172178 } ,
179+ `import Route from '@ember/routing/route';
180+ import { inject as service } from '@ember/service';
181+ export default class UserRoute extends Route {
182+ @service currentUser;
183+ queryParams = {};
184+ customProp = 'test';
185+ beforeModel() {}
186+ model() {}
187+ }` ,
188+ {
189+ code : `import Route from '@ember/routing/route';
190+ import { inject as service } from '@ember/service';
191+ export default class UserRoute extends Route {
192+ model() {}
193+ beforeModel() {}
194+ @service currentUser;
195+ }` ,
196+ options : [
197+ {
198+ order : [ 'model' , 'lifecycle-hook' , 'service' ] ,
199+ } ,
200+ ] ,
201+ } ,
202+ {
203+ code : `import Route from '@ember/routing/route';
204+ import { inject as service } from '@ember/service';
205+ export default class UserRoute extends Route {
206+ deactivate() {}
207+ setupController() {}
208+ beforeModel() {}
209+ @service currentUser;
210+ model() {}
211+ }` ,
212+ options : [
213+ {
214+ order : [ [ 'deactivate' , 'setupController' , 'beforeModel' ] , 'service' , 'model' ] ,
215+ } ,
216+ ] ,
217+ } ,
218+ // spacing/indentation is intentionally not validated by this rule;
219+ // only member ordering should matter.
220+ `import Route from '@ember/routing/route';
221+ import { inject as service } from '@ember/service';
222+ export default class UserRoute extends Route {
223+ @service currentUser;
224+ queryParams = {};
225+ customProp = 'test';
226+
227+ beforeModel() {}
228+ }` ,
173229 ] ,
174230 invalid : [
175231 {
@@ -793,5 +849,108 @@ eslintTester.run('order-in-routes', rule, {
793849 } ,
794850 ] ,
795851 } ,
852+ {
853+ code : `import Route from '@ember/routing/route';
854+ import { inject as service } from '@ember/service';
855+ export default class UserRoute extends Route {
856+ queryParams = {};
857+ @service currentUser;
858+ customProp = 'test';
859+ beforeModel() {}
860+ model() {}
861+ }` ,
862+ output : `import Route from '@ember/routing/route';
863+ import { inject as service } from '@ember/service';
864+ export default class UserRoute extends Route {
865+ @service currentUser;
866+ queryParams = {};
867+ customProp = 'test';
868+ beforeModel() {}
869+ model() {}
870+ }` ,
871+ errors : [
872+ {
873+ message :
874+ 'The "currentUser" service injection should be above the inherited "queryParams" property on line 4' ,
875+ line : 5 ,
876+ } ,
877+ ] ,
878+ } ,
879+ {
880+ code : `import Route from '@ember/routing/route';
881+ export default class UserRoute extends Route {
882+ customProp = 'test';
883+ queryParams = {};
884+ model() {}
885+ beforeModel() {}
886+ }` ,
887+ output : `import Route from '@ember/routing/route';
888+ export default class UserRoute extends Route {
889+ queryParams = {};
890+ customProp = 'test';
891+ model() {}
892+ beforeModel() {}
893+ }` ,
894+ errors : [
895+ {
896+ message :
897+ 'The inherited "queryParams" property should be above the "customProp" property on line 3' ,
898+ line : 4 ,
899+ } ,
900+ {
901+ message : 'The "beforeModel" lifecycle hook should be above the "model" hook on line 5' ,
902+ line : 6 ,
903+ } ,
904+ ] ,
905+ } ,
906+ {
907+ code : `import Route from '@ember/routing/route';
908+ export default class UserRoute extends Route {
909+ customProp = 'test';
910+ model() {}
911+ beforeModel() {}
912+ }` ,
913+ output : `import Route from '@ember/routing/route';
914+ export default class UserRoute extends Route {
915+ customProp = 'test';
916+ beforeModel() {}
917+ model() {}
918+ }` ,
919+ errors : [
920+ {
921+ message : 'The "beforeModel" lifecycle hook should be above the "model" hook on line 4' ,
922+ line : 5 ,
923+ } ,
924+ ] ,
925+ } ,
926+ {
927+ code : `import Route from '@ember/routing/route';
928+ import { inject as service } from '@ember/service';
929+ export default class UserRoute extends Route {
930+ model() {}
931+ beforeModel() {}
932+ @service currentUser;
933+ queryParams = {};
934+ }` ,
935+ output : `import Route from '@ember/routing/route';
936+ import { inject as service } from '@ember/service';
937+ export default class UserRoute extends Route {
938+ @service currentUser;
939+ model() {}
940+ beforeModel() {}
941+ queryParams = {};
942+ }` ,
943+ options : [
944+ {
945+ order : [ 'service' , 'model' , 'lifecycle-hook' , 'inherited-property' ] ,
946+ } ,
947+ ] ,
948+ errors : [
949+ {
950+ message : 'The "currentUser" service injection should be above the "model" hook on line 4' ,
951+ line : 6 ,
952+ } ,
953+ ] ,
954+ } ,
796955 ] ,
797956} ) ;
0 commit comments