11import test from 'node:test' ;
22import assert from 'node:assert/strict' ;
33import Overrides from '../../node_modules/ember-source/lib/overrides.js' ;
4- import { Project } from './helpers/project.mjs' ;
4+
5+ function makeAddon ( { name = 'my-addon' , version = '1.0.0' , dependencies = { } , addons = [ ] , hasJSFiles = true } = { } , parent ) {
6+ let addon = {
7+ name,
8+ parent,
9+ pkg : { name, version, dependencies, devDependencies : { } } ,
10+ _fileSystemInfo : ( ) => ( { hasJSFiles } ) ,
11+ addons : [ ] ,
12+ } ;
13+ addon . addons = addons . map ( ( a ) => makeAddon ( a , addon ) ) ;
14+ return addon ;
15+ }
16+
17+ function makeProject ( { name = 'my-app' , dependencies = { } , devDependencies = { } , addons = [ ] } = { } ) {
18+ let project = {
19+ name : ( ) => name ,
20+ parent : null ,
21+ pkg : { name, dependencies, devDependencies } ,
22+ addons : [ ] ,
23+ } ;
24+ project . addons = addons . map ( ( a ) => makeAddon ( a , project ) ) ;
25+ return project ;
26+ }
527
628function cmp ( a , b ) {
729 if ( a == undefined || a < b ) {
@@ -16,18 +38,18 @@ function cmp(a, b) {
1638}
1739
1840function addonsInfoFor ( project ) {
19- if ( ! ( project instanceof Project ) ) {
20- project = new Project ( project ) ;
21- }
22-
2341 let addonsInfo = [ ...Overrides . addonsInfoFor ( project ) ] ;
2442 addonsInfo . sort ( ( a , b ) => cmp ( a . topLevel , b . topLevel ) || cmp ( a . parent , b . parent ) ) ;
25-
2643 return addonsInfo ;
2744}
2845
2946test ( 'overrides: old babel added by app' , ( ) => {
30- assert . deepEqual ( addonsInfoFor ( { emberCliBabel : '^6.0.0' } ) , [
47+ let project = makeProject ( {
48+ devDependencies : { 'ember-cli-babel' : '^6.0.0' } ,
49+ addons : [ { name : 'ember-cli-babel' , version : '6.0.0' } ] ,
50+ } ) ;
51+
52+ assert . deepEqual ( addonsInfoFor ( project ) , [
3153 {
3254 parent : 'my-app (your app)' ,
3355 topLevel : null ,
@@ -41,7 +63,12 @@ test('overrides: old babel added by app', () => {
4163} ) ;
4264
4365test ( 'overrides: compatible old babel added by app' , ( ) => {
44- assert . deepEqual ( addonsInfoFor ( { emberCliBabel : '^7.0.0' } ) , [
66+ let project = makeProject ( {
67+ devDependencies : { 'ember-cli-babel' : '^7.0.0' } ,
68+ addons : [ { name : 'ember-cli-babel' , version : '7.0.0' } ] ,
69+ } ) ;
70+
71+ assert . deepEqual ( addonsInfoFor ( project ) , [
4572 {
4673 parent : 'my-app (your app)' ,
4774 topLevel : null ,
@@ -55,11 +82,27 @@ test('overrides: compatible old babel added by app', () => {
5582} ) ;
5683
5784test ( 'overrides: new babel added by app is ignored' , ( ) => {
58- assert . deepEqual ( addonsInfoFor ( { emberCliBabel : '^7.26.6' } ) , [ ] ) ;
85+ let project = makeProject ( {
86+ devDependencies : { 'ember-cli-babel' : '^7.26.6' } ,
87+ addons : [ { name : 'ember-cli-babel' , version : '7.26.6' } ] ,
88+ } ) ;
89+
90+ assert . deepEqual ( addonsInfoFor ( project ) , [ ] ) ;
5991} ) ;
6092
6193test ( 'overrides: old babel added by direct dependency' , ( ) => {
62- assert . deepEqual ( addonsInfoFor ( Project . withDep ( { emberCliBabel : '^6.0.0' } ) ) , [
94+ let project = makeProject ( {
95+ addons : [
96+ {
97+ name : 'my-addon' ,
98+ version : '1.0.0' ,
99+ addons : [ { name : 'ember-cli-babel' , version : '6.0.0' , dependencies : { 'ember-cli-babel' : '^6.0.0' } } ] ,
100+ dependencies : { 'ember-cli-babel' : '^6.0.0' } ,
101+ } ,
102+ ] ,
103+ } ) ;
104+
105+ assert . deepEqual ( addonsInfoFor ( project ) , [
63106 {
6410765108 topLevel : 'my-addon' ,
@@ -73,24 +116,50 @@ test('overrides: old babel added by direct dependency', () => {
73116} ) ;
74117
75118test ( 'overrides: dormant direct dependency is marked dormant' , ( ) => {
76- assert . deepEqual (
77- addonsInfoFor ( Project . withDep ( { emberCliBabel : '^6.0.0' , hasJSFiles : false } ) ) ,
78- [
119+ let project = makeProject ( {
120+ addons : [
79121 {
80- 81- topLevel : 'my-addon' ,
82- version : '6.0.0' ,
83- requirement : '^6.0.0' ,
84- compatible : false ,
85- dormant : true ,
86- 122+ name : 'my-addon' ,
123+ version : '1.0.0' ,
124+ hasJSFiles : false ,
125+ addons : [ { name : 'ember-cli-babel' , version : '6.0.0' } ] ,
126+ dependencies : { 'ember-cli-babel' : '^6.0.0' } ,
87127 } ,
88- ]
89- ) ;
128+ ] ,
129+ } ) ;
130+
131+ assert . deepEqual ( addonsInfoFor ( project ) , [
132+ {
133+ 134+ topLevel : 'my-addon' ,
135+ version : '6.0.0' ,
136+ requirement : '^6.0.0' ,
137+ compatible : false ,
138+ dormant : true ,
139+ 140+ } ,
141+ ] ) ;
90142} ) ;
91143
92144test ( 'overrides: transient dependency records full path' , ( ) => {
93- assert . deepEqual ( addonsInfoFor ( Project . withTransientDep ( { emberCliBabel : '^6.0.0' } ) ) , [
145+ let project = makeProject ( {
146+ addons : [
147+ {
148+ name : 'my-addon' ,
149+ version : '1.0.0' ,
150+ addons : [
151+ {
152+ name : 'my-nested-addon' ,
153+ version : '0.1.0' ,
154+ addons : [ { name : 'ember-cli-babel' , version : '6.0.0' } ] ,
155+ dependencies : { 'ember-cli-babel' : '^6.0.0' } ,
156+ } ,
157+ ] ,
158+ } ,
159+ ] ,
160+ } ) ;
161+
162+ assert . deepEqual ( addonsInfoFor ( project ) , [
94163 {
9516496165 topLevel : 'my-addon' ,
@@ -104,18 +173,33 @@ test('overrides: transient dependency records full path', () => {
104173} ) ;
105174
106175test ( 'overrides: transient through dormant dependency is marked dormant' , ( ) => {
107- assert . deepEqual (
108- addonsInfoFor ( Project . withTransientDep ( { emberCliBabel : '^6.0.0' } , { hasJSFiles : false } ) ) ,
109- [
176+ let project = makeProject ( {
177+ addons : [
110178 {
111- 112- topLevel : 'my-addon' ,
113- version : '6.0.0' ,
114- requirement : '^6.0.0' ,
115- compatible : false ,
116- dormant : false ,
117- 179+ name : 'my-addon' ,
180+ version : '1.0.0' ,
181+ hasJSFiles : false ,
182+ addons : [
183+ {
184+ name : 'my-nested-addon' ,
185+ version : '0.1.0' ,
186+ addons : [ { name : 'ember-cli-babel' , version : '6.0.0' } ] ,
187+ dependencies : { 'ember-cli-babel' : '^6.0.0' } ,
188+ } ,
189+ ] ,
118190 } ,
119- ]
120- ) ;
191+ ] ,
192+ } ) ;
193+
194+ assert . deepEqual ( addonsInfoFor ( project ) , [
195+ {
196+ 197+ topLevel : 'my-addon' ,
198+ version : '6.0.0' ,
199+ requirement : '^6.0.0' ,
200+ compatible : false ,
201+ dormant : false ,
202+ 203+ } ,
204+ ] ) ;
121205} ) ;
0 commit comments