120 lines
5.3 KiB
Dart
120 lines
5.3 KiB
Dart
import 'dart:io';
|
|
|
|
import 'package:swagger_generator_flutter/core/config_repository.dart';
|
|
import 'package:swagger_generator_flutter/utils/string_helper.dart';
|
|
import 'package:test/test.dart';
|
|
|
|
void main() {
|
|
group('Model Class Prefix Support', () {
|
|
late Directory tempDir;
|
|
late File configFile;
|
|
|
|
setUp(() {
|
|
tempDir = Directory.systemTemp.createTempSync('swagger_gen_test_');
|
|
configFile = File('${tempDir.path}/generator_config.yaml');
|
|
});
|
|
|
|
tearDown(() {
|
|
tempDir.deleteSync(recursive: true);
|
|
});
|
|
|
|
test('should parse class_prefix from config', () {
|
|
configFile.writeAsStringSync('''
|
|
generator:
|
|
name: test
|
|
|
|
output:
|
|
models:
|
|
class_prefix: "MyPrefix"
|
|
|
|
generation:
|
|
models:
|
|
class_prefix: "MyPrefix"
|
|
''');
|
|
|
|
final config = ConfigRepository.loadSync(configFile.path);
|
|
expect(config.modelClassPrefix, equals('MyPrefix'));
|
|
});
|
|
|
|
test('should return null when class_prefix is missing', () {
|
|
configFile.writeAsStringSync('''
|
|
generator:
|
|
name: test
|
|
''');
|
|
|
|
final config = ConfigRepository.loadSync(configFile.path);
|
|
expect(config.modelClassPrefix, isNull);
|
|
});
|
|
|
|
test('should apply class_prefix using StringHelper.generateClassName', () {
|
|
configFile.writeAsStringSync('''
|
|
generator:
|
|
name: test
|
|
|
|
output:
|
|
models:
|
|
class_prefix: "S"
|
|
|
|
generation:
|
|
models:
|
|
class_prefix: "S"
|
|
''');
|
|
|
|
// Reload config to ensure StringHelper picks up the new prefix
|
|
// This relies on SwaggerConfig.modelClassPrefix internally calling ConfigRepository.loadSync()
|
|
// which will find the config file in the current working directory (or tempDir in this test context).
|
|
// For this test to work, the test runner's CWD must be tempDir, or PathResolver must be mocked.
|
|
// Assuming PathResolver.findConfigFile() correctly finds the temp file.
|
|
|
|
// The current implementation of StringHelper.generateClassName relies on SwaggerConfig.modelClassPrefix
|
|
// which in turn calls ConfigRepository.loadSync() without arguments.
|
|
// This means it will try to find the config file in the current working directory or via PathResolver.
|
|
// For this test to pass, the `configFile` must be discoverable by `ConfigRepository.loadSync()`.
|
|
// This test implicitly relies on the test environment's CWD or PathResolver setup.
|
|
|
|
// To make this test robust, StringHelper should ideally take a Config object or
|
|
// SwaggerConfig should have a way to inject a test config.
|
|
// For now, we proceed with the assumption that `ConfigRepository.loadSync()` will find `configFile`.
|
|
|
|
// Force a reload of the static config by accessing it.
|
|
// This is a bit of a hack due to the static nature of SwaggerConfig and StringHelper.
|
|
// A better approach would be to pass the config explicitly or mock the static dependencies.
|
|
// Load config and set it as cached so static accessors pick it up
|
|
final config = ConfigRepository.loadSync(configFile.path);
|
|
ConfigRepository.setCachedConfig(config);
|
|
|
|
expect(StringHelper.generateClassName('User'), 'SUser');
|
|
expect(StringHelper.generateClassName('model'), 'SModel');
|
|
// Test case: prefix is 'S' and name starts with 'S'
|
|
expect(StringHelper.generateClassName('SubjectInfo'), 'SSubjectInfo');
|
|
});
|
|
|
|
// NOTE: Testing StringHelper.generateClassName directly implies checking if it reads from the GLOBAL config.
|
|
// However, ConfigRepository.loadSync() creates an instance, but SwaggerConfig accessors call ConfigRepository.loadSync() individually.
|
|
// Since ConfigRepository.loadSync() without args looks for default file, we need a way to inject the config or point it to our file.
|
|
// The current implementation of SwaggerConfig calls ConfigRepository.loadSync() which defaults to finding a config file.
|
|
|
|
// Changing the implementation of StringHelper to depend on a reloadable config or global state would be better,
|
|
// but without changing that, we rely on how ConfigRepository finds the file.
|
|
// Ideally we should test ConfigRepository logic separately from StringHelper if StringHelper uses a static/global config lookup.
|
|
|
|
// BUT, wait. ConfigRepository.loadSync() does THIS:
|
|
// final file = File(configPath ?? PathResolver.findConfigFile() ?? '');
|
|
|
|
// If we want SwaggerConfig (static) to pick up our test config, we might need to trick PathResolver
|
|
// OR we can explicitly pass the config path if the code supported it, but StringHelper uses static SwaggerConfig.modelClassPrefix.
|
|
|
|
// The current implementation of `SwaggerConfig.modelClassPrefix` is:
|
|
// static String? get modelClassPrefix => ConfigRepository.loadSync().modelClassPrefix;
|
|
|
|
// So every time we call `StringHelper.generateClassName`, it calls `ConfigRepository.loadSync()`.
|
|
// `ConfigRepository.loadSync()` calls `PathResolver.findConfigFile()`.
|
|
|
|
// Since we cannot easily mock `PathResolver`'s static method or filesystem search path in a unit test without dependency injection,
|
|
// we might face issues testing `StringHelper` integration end-to-end here unless we run this test in a context where `findConfigFile` returns our temp file.
|
|
|
|
// However, for verify purposes, verifying `ConfigRepository` parses it is the most critical part we added.
|
|
// The `StringHelper` logic is simple string concatenation.
|
|
});
|
|
}
|