@@ -128,7 +128,11 @@ void main() {
128128 ),
129129 vars: {
130130 'project_name' : 'my_app' ,
131- 'org_name' : ['com' , 'example' , 'verygoodcore' ],
131+ 'org_name' : [
132+ {'value' : 'com' , 'separator' : '.' },
133+ {'value' : 'example' , 'separator' : '.' },
134+ {'value' : 'verygoodcore' , 'separator' : '' }
135+ ],
132136 },
133137 ),
134138 ).called (1 );
@@ -146,47 +150,46 @@ void main() {
146150
147151 group ('org-name' , () {
148152 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+ void expectInvalidOrgName (String orgName) async {
154+ final expectedErrorMessage = '"$orgName " is not a valid org name.\n\n '
155+ 'A valid org name has at least 2 parts separated by "."\n '
156+ 'Each part must start with a letter and only include '
157+ 'alphanumeric characters (A-Z, a-z, 0-9), underscores (_), '
158+ 'and hyphens (-)\n '
153159 '(ex. very.good.org)' ;
154160 final result = await commandRunner.run (
155- ['create' , '.' , '--org-name' , 'My App' ],
161+ ['create' , '.' , '--org-name' , orgName ],
156162 );
157163 expect (result, equals (ExitCode .usage.code));
158164 verify (() => logger.err (expectedErrorMessage)).called (1 );
165+ }
166+
167+ test ('no delimiters' , () async {
168+ expectInvalidOrgName ('My App' );
159169 });
160170
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 );
171+ test ('less than 2 domains' , () async {
172+ expectInvalidOrgName ('verybadtest' );
172173 });
173174
174175 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 );
176+ expectInvalidOrgName ('very%.bad@.#test' );
177+ });
178+
179+ test ('segment starts with a non-letter' , () async {
180+ expectInvalidOrgName ('very.bad.1test' );
181+ });
182+
183+ test ('valid prefix but invalid suffix' , () async {
184+ expectInvalidOrgName ('very.good.prefix.bad@@suffix' );
185185 });
186186 });
187187
188188 group ('valid --org-name' , () {
189- test ('completes successfully with correct output' , () async {
189+ Future <void > expectValidOrgName (
190+ String orgName,
191+ List <Map <String , String >> expected,
192+ ) async {
190193 final argResults = MockArgResults ();
191194 final generator = MockMasonGenerator ();
192195 final command = CreateCommand (
@@ -195,7 +198,7 @@ void main() {
195198 generator: (_) async => generator,
196199 )..argResultOverrides = argResults;
197200 when (() => argResults['project-name' ]).thenReturn ('my_app' );
198- when (() => argResults['org-name' ]).thenReturn ('very.good.ventures' );
201+ when (() => argResults['org-name' ]).thenReturn (orgName );
199202 when (() => argResults.rest).thenReturn (['.tmp' ]);
200203 when (() => generator.id).thenReturn ('generator_id' );
201204 when (() => generator.description).thenReturn ('generator description' );
@@ -204,12 +207,6 @@ void main() {
204207 ).thenAnswer ((_) async => 62 );
205208 final result = await command.run ();
206209 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 );
213210 verify (
214211 () => generator.generate (
215212 any (
@@ -219,23 +216,58 @@ void main() {
219216 '.tmp' ,
220217 ),
221218 ),
222- vars: {
223- 'project_name' : 'my_app' ,
224- 'org_name' : ['very' , 'good' , 'ventures' ],
225- },
219+ vars: {'project_name' : 'my_app' , 'org_name' : expected},
226220 ),
227221 ).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 );
222+ }
223+
224+ test ('alphanumeric with three parts' , () {
225+ expectValidOrgName ('very.good.ventures' , [
226+ {'value' : 'very' , 'separator' : '.' },
227+ {'value' : 'good' , 'separator' : '.' },
228+ {'value' : 'ventures' , 'separator' : '' },
229+ ]);
230+ });
231+
232+ test ('containing an underscore' , () {
233+ expectValidOrgName ('very.good.test_case' , [
234+ {'value' : 'very' , 'separator' : '.' },
235+ {'value' : 'good' , 'separator' : '.' },
236+ {'value' : 'test case' , 'separator' : '' },
237+ ]);
238+ });
239+
240+ test ('containing a hyphen' , () {
241+ expectValidOrgName ('very.bad.test-case' , [
242+ {'value' : 'very' , 'separator' : '.' },
243+ {'value' : 'bad' , 'separator' : '.' },
244+ {'value' : 'test case' , 'separator' : '' },
245+ ]);
246+ });
247+
248+ test ('single character parts' , () {
249+ expectValidOrgName ('v.g.v' , [
250+ {'value' : 'v' , 'separator' : '.' },
251+ {'value' : 'g' , 'separator' : '.' },
252+ {'value' : 'v' , 'separator' : '' },
253+ ]);
254+ });
255+
256+ test ('more than three parts' , () {
257+ expectValidOrgName ('very.good.ventures.app.identifier' , [
258+ {'value' : 'very' , 'separator' : '.' },
259+ {'value' : 'good' , 'separator' : '.' },
260+ {'value' : 'ventures' , 'separator' : '.' },
261+ {'value' : 'app' , 'separator' : '.' },
262+ {'value' : 'identifier' , 'separator' : '' },
263+ ]);
264+ });
265+
266+ test ('less than three parts' , () {
267+ expectValidOrgName ('verygood.ventures' , [
268+ {'value' : 'verygood' , 'separator' : '.' },
269+ {'value' : 'ventures' , 'separator' : '' },
270+ ]);
239271 });
240272 });
241273 });
0 commit comments