@@ -126,7 +126,10 @@ void main() {
126
126
'.tmp' ,
127
127
),
128
128
),
129
- vars: {'project_name' : 'my_app' },
129
+ vars: {
130
+ 'project_name' : 'my_app' ,
131
+ 'org_name' : ['com' , 'example' , 'verygoodcore' ],
132
+ },
130
133
),
131
134
).called (1 );
132
135
verify (
@@ -140,5 +143,101 @@ void main() {
140
143
() => analytics.waitForLastPing (timeout: VeryGoodCommandRunner .timeout),
141
144
).called (1 );
142
145
});
146
+
147
+ group ('org-name' , () {
148
+ group ('invalid --org-name' , () {
149
+ test ('no delimiters' , () async {
150
+ const expectedErrorMessage = '"My App" is not a valid org name.\n\n '
151
+ 'A valid org name has 3 parts separated by "."'
152
+ 'and only includes alphanumeric characters and underscores'
153
+ '(ex. very.good.org)' ;
154
+ final result = await commandRunner.run (
155
+ ['create' , '.' , '--org-name' , 'My App' ],
156
+ );
157
+ expect (result, equals (ExitCode .usage.code));
158
+ verify (() => logger.err (expectedErrorMessage)).called (1 );
159
+ });
160
+
161
+ test ('more than 3 domains' , () async {
162
+ const expectedErrorMessage =
163
+ '"very.bad.test.case" is not a valid org name.\n\n '
164
+ 'A valid org name has 3 parts separated by "."'
165
+ 'and only includes alphanumeric characters and underscores'
166
+ '(ex. very.good.org)' ;
167
+ final result = await commandRunner.run (
168
+ ['create' , '.' , '--org-name' , 'very.bad.test.case' ],
169
+ );
170
+ expect (result, equals (ExitCode .usage.code));
171
+ verify (() => logger.err (expectedErrorMessage)).called (1 );
172
+ });
173
+
174
+ test ('invalid characters present' , () async {
175
+ const expectedErrorMessage =
176
+ '"very%.bad@.#test" is not a valid org name.\n\n '
177
+ 'A valid org name has 3 parts separated by "."'
178
+ 'and only includes alphanumeric characters and underscores'
179
+ '(ex. very.good.org)' ;
180
+ final result = await commandRunner.run (
181
+ ['create' , '.' , '--org-name' , 'very%.bad@.#test' ],
182
+ );
183
+ expect (result, equals (ExitCode .usage.code));
184
+ verify (() => logger.err (expectedErrorMessage)).called (1 );
185
+ });
186
+ });
187
+
188
+ group ('valid --org-name' , () {
189
+ test ('completes successfully with correct output' , () async {
190
+ final argResults = MockArgResults ();
191
+ final generator = MockMasonGenerator ();
192
+ final command = CreateCommand (
193
+ analytics: analytics,
194
+ logger: logger,
195
+ generator: (_) async => generator,
196
+ )..argResultOverrides = argResults;
197
+ when (() => argResults['project-name' ]).thenReturn ('my_app' );
198
+ when (() => argResults['org-name' ]).thenReturn ('very.good.ventures' );
199
+ when (() => argResults.rest).thenReturn (['.tmp' ]);
200
+ when (() => generator.id).thenReturn ('generator_id' );
201
+ when (() => generator.description).thenReturn ('generator description' );
202
+ when (
203
+ () => generator.generate (any (), vars: any (named: 'vars' )),
204
+ ).thenAnswer ((_) async => 62 );
205
+ final result = await command.run ();
206
+ expect (result, equals (ExitCode .success.code));
207
+ verify (() => logger.progress ('Bootstrapping' )).called (1 );
208
+ expect (progressLogs, equals (['Generated 62 file(s)' ]));
209
+ verify (
210
+ () => logger.progress ('Running "flutter packages get" in .tmp' ),
211
+ ).called (1 );
212
+ verify (() => logger.alert ('Created a Very Good App! 🦄' )).called (1 );
213
+ verify (
214
+ () => generator.generate (
215
+ any (
216
+ that: isA <DirectoryGeneratorTarget >().having (
217
+ (g) => g.dir.path,
218
+ 'dir' ,
219
+ '.tmp' ,
220
+ ),
221
+ ),
222
+ vars: {
223
+ 'project_name' : 'my_app' ,
224
+ 'org_name' : ['very' , 'good' , 'ventures' ],
225
+ },
226
+ ),
227
+ ).called (1 );
228
+ verify (
229
+ () => analytics.sendEvent (
230
+ 'create' ,
231
+ 'generator_id' ,
232
+ label: 'generator description' ,
233
+ ),
234
+ ).called (1 );
235
+ verify (
236
+ () => analytics.waitForLastPing (
237
+ timeout: VeryGoodCommandRunner .timeout),
238
+ ).called (1 );
239
+ });
240
+ });
241
+ });
143
242
});
144
243
}
0 commit comments