Skip to content

Commit 822829a

Browse files
authored
feat(create): add docs_site template (#513)
1 parent de0eb01 commit 822829a

File tree

8 files changed

+369
-10
lines changed

8 files changed

+369
-10
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ Usage: very_good create <project name>
4545
[core] (default) Generate a Very Good Flutter application.
4646
[dart_cli] Generate a Very Good Dart CLI application.
4747
[dart_pkg] Generate a reusable Dart package.
48+
[docs_site] Generate a Very Good documentation site.
4849
[flutter_pkg] Generate a reusable Flutter package.
4950
[flutter_plugin] Generate a reusable Flutter plugin.
5051

lib/src/commands/create/create.dart

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ final _templates = [
1919
FlutterPkgTemplate(),
2020
FlutterPluginTemplate(),
2121
VeryGoodDartCLITemplate(),
22+
VeryGoodDocsSiteTemplate(),
2223
];
2324

2425
final _defaultTemplate = _templates.first;

lib/src/commands/create/templates/templates.dart

+1
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,6 @@ export 'template.dart';
33
export 'very_good_core/very_good_core.dart';
44
export 'very_good_dart_cli/very_good_dart_cli.dart';
55
export 'very_good_dart_package/very_good_dart_package.dart';
6+
export 'very_good_docs_site/very_good_docs_site.dart';
67
export 'very_good_flutter_package/very_good_flutter_package.dart';
78
export 'very_good_flutter_plugin/very_good_flutter_plugin.dart';
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
export 'very_good_docs_site_bundle.dart';
2+
export 'very_good_docs_site_template.dart';

lib/src/commands/create/templates/very_good_docs_site/very_good_docs_site_bundle.dart

+271
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import 'dart:io';
2+
3+
import 'package:mason/mason.dart';
4+
import 'package:very_good_cli/src/commands/create/templates/templates.dart';
5+
import 'package:very_good_cli/src/logger_extension.dart';
6+
7+
/// {@template docs_site_template}
8+
/// A documentation site template.
9+
/// {@endtemplate}
10+
class VeryGoodDocsSiteTemplate extends Template {
11+
/// {@macro docs_site_template}
12+
VeryGoodDocsSiteTemplate()
13+
: super(
14+
name: 'docs_site',
15+
bundle: veryGoodDocsSiteBundle,
16+
help: 'Generate a Very Good documentation site.',
17+
);
18+
19+
@override
20+
Future<void> onGenerateComplete(Logger logger, Directory outputDir) async {
21+
_logSummary(logger);
22+
}
23+
24+
void _logSummary(Logger logger) {
25+
logger
26+
..info('\n')
27+
..created('Created a Very Good documentation site! 🦄')
28+
..info('\n');
29+
}
30+
}

test/e2e_test.dart

+44
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,50 @@ void main() {
198198
expect(testCoverageResult.stdout, contains('lines......: 100.0%'));
199199
});
200200

201+
test('create -t docs_site', () async {
202+
final directory = Directory(path.join('.tmp', 'very_good_docs_site'));
203+
204+
final result = await commandRunner.run(
205+
['create', 'very_good_docs_site', '-t', 'docs_site', '-o', '.tmp'],
206+
);
207+
expect(result, equals(ExitCode.success.code));
208+
209+
final installResult = await Process.run(
210+
'npm',
211+
['install'],
212+
workingDirectory: directory.path,
213+
runInShell: true,
214+
);
215+
expect(installResult.exitCode, equals(ExitCode.success.code));
216+
217+
final formatResult = await Process.run(
218+
'npm',
219+
['run', 'format'],
220+
workingDirectory: directory.path,
221+
runInShell: true,
222+
);
223+
expect(formatResult.exitCode, equals(ExitCode.success.code));
224+
expect(formatResult.stderr, isEmpty);
225+
226+
final lintResult = await Process.run(
227+
'npm',
228+
['run', 'lint'],
229+
workingDirectory: directory.path,
230+
runInShell: true,
231+
);
232+
expect(lintResult.exitCode, equals(ExitCode.success.code));
233+
expect(lintResult.stderr, isEmpty);
234+
235+
final buildResult = await Process.run(
236+
'npm',
237+
['run', 'build'],
238+
workingDirectory: directory.path,
239+
runInShell: true,
240+
);
241+
expect(buildResult.exitCode, equals(ExitCode.success.code));
242+
expect(buildResult.stderr, isEmpty);
243+
});
244+
201245
test('create -t core', () async {
202246
final directory = Directory(path.join('.tmp', 'very_good_core'));
203247

test/src/commands/create/create_test.dart

+19-10
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ const expectedUsage = [
3232
''' [core] (default) Generate a Very Good Flutter application.\n'''
3333
''' [dart_cli] Generate a Very Good Dart CLI application.\n'''
3434
' [dart_pkg] Generate a reusable Dart package.\n'
35+
' [docs_site] Generate a Very Good documentation site.\n'
3536
' [flutter_pkg] Generate a reusable Flutter package.\n'
3637
' [flutter_plugin] Generate a reusable Flutter plugin.\n'
3738
'\n'
@@ -654,7 +655,7 @@ void main() {
654655

655656
group('valid template names', () {
656657
Future<void> expectValidTemplateName({
657-
required String getPackagesMsg,
658+
String? progressLog,
658659
required String templateName,
659660
required MasonBundle expectedBundle,
660661
required String expectedLogSummary,
@@ -706,9 +707,9 @@ void main() {
706707
progressLogs,
707708
equals(['Generated ${generatedFiles.length} file(s)']),
708709
);
709-
verify(
710-
() => logger.progress(getPackagesMsg),
711-
).called(1);
710+
if (progressLog != null) {
711+
verify(() => logger.progress(progressLog)).called(1);
712+
}
712713
verify(() => logger.created(expectedLogSummary)).called(1);
713714
verify(
714715
() => generator.generate(
@@ -752,7 +753,7 @@ void main() {
752753

753754
test('core template', () async {
754755
await expectValidTemplateName(
755-
getPackagesMsg: 'Running "flutter packages get" in .tmp/my_app',
756+
progressLog: 'Running "flutter packages get" in .tmp/my_app',
756757
templateName: 'core',
757758
expectedBundle: veryGoodCoreBundle,
758759
expectedLogSummary: 'Created a Very Good App! 🦄',
@@ -761,7 +762,7 @@ void main() {
761762

762763
test('dart pkg template', () async {
763764
await expectValidTemplateName(
764-
getPackagesMsg: 'Running "flutter pub get" in .tmp/my_app',
765+
progressLog: 'Running "flutter pub get" in .tmp/my_app',
765766
templateName: 'dart_pkg',
766767
expectedBundle: veryGoodDartPackageBundle,
767768
expectedLogSummary: 'Created a Very Good Dart Package! 🦄',
@@ -770,7 +771,7 @@ void main() {
770771

771772
test('flutter pkg template', () async {
772773
await expectValidTemplateName(
773-
getPackagesMsg: 'Running "flutter packages get" in .tmp/my_app',
774+
progressLog: 'Running "flutter packages get" in .tmp/my_app',
774775
templateName: 'flutter_pkg',
775776
expectedBundle: veryGoodFlutterPackageBundle,
776777
expectedLogSummary: 'Created a Very Good Flutter Package! 🦄',
@@ -779,21 +780,29 @@ void main() {
779780

780781
test('flutter plugin template', () async {
781782
await expectValidTemplateName(
782-
getPackagesMsg: 'Running "flutter packages get" in .tmp/my_app',
783+
progressLog: 'Running "flutter packages get" in .tmp/my_app',
783784
templateName: 'flutter_plugin',
784785
expectedBundle: veryGoodFlutterPluginBundle,
785786
expectedLogSummary: 'Created a Very Good Flutter Plugin! 🦄',
786787
);
787788
});
788789

789-
test('dart CLI template', () async {
790+
test('dart cli template', () async {
790791
await expectValidTemplateName(
791-
getPackagesMsg: 'Running "flutter pub get" in .tmp/my_app',
792+
progressLog: 'Running "flutter pub get" in .tmp/my_app',
792793
templateName: 'dart_cli',
793794
expectedBundle: veryGoodDartCliBundle,
794795
expectedLogSummary: 'Created a Very Good Dart CLI application! 🦄',
795796
);
796797
});
798+
799+
test('docs site template', () async {
800+
await expectValidTemplateName(
801+
templateName: 'docs_site',
802+
expectedBundle: veryGoodDartCliBundle,
803+
expectedLogSummary: 'Created a Very Good documentation site! 🦄',
804+
);
805+
});
797806
});
798807
});
799808
});

0 commit comments

Comments
 (0)