platform-cli/lib/src/commands/test.dart

83 lines
2.1 KiB
Dart
Raw Normal View History

2016-12-10 18:52:14 +00:00
import 'dart:io';
import 'package:args/command_runner.dart';
import "package:console/console.dart";
class TestCommand extends Command {
final TextPen _pen = new TextPen();
@override
String get name => "test";
@override
String get description => "Creates a new test within the given project.";
@override
run() async {
final name = await readInput("Name of Test: "), lower = name.toLowerCase();
final testDir = new Directory("test/services");
final testFile = new File.fromUri(
testDir.uri.resolve("${lower}_test.dart"));
if (!await testFile.exists())
await testFile.create(recursive: true);
await testFile.writeAsString(_generateTest(lower));
final runConfig = new File('./.idea/runConfigurations/${name}_tests.xml');
if (!await runConfig.exists()) {
await runConfig.create(recursive: true);
await runConfig.writeAsString(_generateRunConfiguration(name));
}
_pen.green();
_pen("${Icon.CHECKMARK} Successfully generated test $name.");
_pen();
}
_generateRunConfiguration(String name) {
final lower = name.toLowerCase();
return '''
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="$name Tests" type="DartTestRunConfigurationType" factoryName="Dart Test" singleton="true">
<option name="filePath" value="\$PROJECT_DIR\$/test/${lower}_test.dart" />
<method />
</configuration>
</component>
'''
.trim();
}
String _generateTest(String lower) {
return '''
import 'dart:io';
import 'package:angel/angel.dart';
import 'package:angel_framework/angel_framework.dart';
import 'package:angel_test/angel_test.dart';
import 'package:test/test.dart';
main() async {
Angel app;
TestClient client;
setUp(() async {
app = await createServer();
2016-12-21 17:34:15 +00:00
client = await connectTo(app);
2016-12-10 18:52:14 +00:00
});
tearDown(() async {
await client.close();
app = null;
});
test('$lower', () async {
final response = await client.get('/$lower');
expect(response, hasStatus(HttpStatus.OK));
});
}
'''
.trim();
}
}