@@ -22,19 +22,7 @@ func TestMergePlans(t *testing.T) {
22
22
expected := & Plan {
23
23
DevPackages : []string {"foo" , "bar" , "baz" },
24
24
RuntimePackages : []string {"a" , "b" , "c" },
25
- SharedPlan : SharedPlan {
26
- InstallStage : & Stage {
27
- Command : "" ,
28
- InputFiles : []string {"." },
29
- },
30
- BuildStage : & Stage {
31
- Command : "" ,
32
- },
33
- StartStage : & Stage {
34
- Command : "" ,
35
- InputFiles : []string {"." },
36
- },
37
- },
25
+ SharedPlan : SharedPlan {},
38
26
}
39
27
actual := MergePlans (plan1 , plan2 )
40
28
assert .Equal (t , expected , actual )
@@ -58,17 +46,9 @@ func TestMergePlans(t *testing.T) {
58
46
DevPackages : []string {},
59
47
RuntimePackages : []string {},
60
48
SharedPlan : SharedPlan {
61
- InstallStage : & Stage {
62
- Command : "" ,
63
- InputFiles : []string {"." },
64
- },
65
49
BuildStage : & Stage {
66
50
Command : "plan1" ,
67
51
},
68
- StartStage : & Stage {
69
- Command : "" ,
70
- InputFiles : []string {"." },
71
- },
72
52
},
73
53
}
74
54
actual = MergePlans (plan1 , plan2 )
@@ -93,18 +73,142 @@ func TestMergePlans(t *testing.T) {
93
73
RuntimePackages : []string {},
94
74
SharedPlan : SharedPlan {
95
75
InstallStage : & Stage {
96
- Command : "" ,
97
76
InputFiles : []string {"package.json" },
98
77
},
99
- BuildStage : & Stage {
100
- Command : "" ,
101
- },
102
78
StartStage : & Stage {
103
- Command : "" ,
104
79
InputFiles : []string {"input" },
105
80
},
106
81
},
107
82
}
108
83
actual = MergePlans (plan1 , plan2 )
109
84
assert .Equal (t , expected , actual )
110
85
}
86
+
87
+ func TestMergeUserPlans (t * testing.T ) {
88
+ plannerPlan := & Plan {
89
+ DevPackages : []string {"nodejs" },
90
+ RuntimePackages : []string {"nodejs" },
91
+ SharedPlan : SharedPlan {
92
+ InstallStage : & Stage {
93
+ InputFiles : []string {"package.json" },
94
+ Command : "npm install" ,
95
+ },
96
+ BuildStage : & Stage {
97
+ InputFiles : []string {"." },
98
+ },
99
+ StartStage : & Stage {
100
+ InputFiles : []string {"." },
101
+ Command : "npm start" ,
102
+ },
103
+ },
104
+ }
105
+ cases := []struct {
106
+ name string
107
+ in * Plan
108
+ out * Plan
109
+ }{
110
+ {
111
+ name : "empty base plan" ,
112
+ in : & Plan {
113
+ SharedPlan : SharedPlan {},
114
+ },
115
+ out : & Plan {
116
+ DevPackages : []string {"nodejs" },
117
+ RuntimePackages : []string {"nodejs" },
118
+ SharedPlan : SharedPlan {
119
+ InstallStage : & Stage {
120
+ InputFiles : []string {"package.json" },
121
+ Command : "npm install" ,
122
+ },
123
+ BuildStage : & Stage {
124
+ InputFiles : []string {"." },
125
+ },
126
+ StartStage : & Stage {
127
+ InputFiles : []string {"." },
128
+ Command : "npm start" ,
129
+ },
130
+ },
131
+ },
132
+ },
133
+ {
134
+ name : "different input files" ,
135
+ in : & Plan {
136
+ DevPackages : []string {"nodejs" , "yarn" },
137
+ RuntimePackages : []string {"nodejs" },
138
+ SharedPlan : SharedPlan {
139
+ InstallStage : & Stage {
140
+ InputFiles : []string {"package.json" , "yarn.lock" },
141
+ Command : "" ,
142
+ },
143
+ BuildStage : & Stage {
144
+ InputFiles : []string {"." },
145
+ Command : "" ,
146
+ },
147
+ StartStage : & Stage {
148
+ InputFiles : []string {"." },
149
+ Command : "npm start" ,
150
+ },
151
+ },
152
+ },
153
+ out : & Plan {
154
+ DevPackages : []string {"nodejs" , "yarn" },
155
+ RuntimePackages : []string {"nodejs" },
156
+ SharedPlan : SharedPlan {
157
+ InstallStage : & Stage {
158
+ InputFiles : []string {"package.json" , "yarn.lock" },
159
+ Command : "npm install" ,
160
+ },
161
+ BuildStage : & Stage {
162
+ InputFiles : []string {"." },
163
+ Command : "" ,
164
+ },
165
+ StartStage : & Stage {
166
+ InputFiles : []string {"." },
167
+ Command : "npm start" ,
168
+ },
169
+ },
170
+ },
171
+ },
172
+ {
173
+ name : "custom build command" ,
174
+ in : & Plan {
175
+ SharedPlan : SharedPlan {
176
+ InstallStage : & Stage {
177
+ InputFiles : []string {"app" },
178
+ },
179
+ BuildStage : & Stage {
180
+ Command : "npm run build" ,
181
+ },
182
+ },
183
+ },
184
+ out : & Plan {
185
+ DevPackages : []string {"nodejs" },
186
+ RuntimePackages : []string {"nodejs" },
187
+ SharedPlan : SharedPlan {
188
+ InstallStage : & Stage {
189
+ InputFiles : []string {"app" },
190
+ Command : "npm install" ,
191
+ },
192
+ BuildStage : & Stage {
193
+ InputFiles : []string {"." },
194
+ Command : "npm run build" ,
195
+ },
196
+ StartStage : & Stage {
197
+ InputFiles : []string {"." },
198
+ Command : "npm start" ,
199
+ },
200
+ },
201
+ },
202
+ },
203
+ }
204
+
205
+ for _ , tc := range cases {
206
+ t .Run (tc .name , func (t * testing.T ) {
207
+ assert := assert .New (t )
208
+ got , err := MergeUserPlan (tc .in , plannerPlan )
209
+
210
+ assert .NoError (err )
211
+ assert .Equal (tc .out , got , "plans should match" )
212
+ })
213
+ }
214
+ }
0 commit comments