Merge branch 'release/3.2.1'

This commit is contained in:
Max 2026-01-12 15:52:39 +08:00
commit 88deff67b6
5 changed files with 57 additions and 5 deletions

View File

@ -2,6 +2,13 @@
All notable changes to this project will be documented in this file.
## [3.2.1] - 2026-01-12
### 🐛 修复
#### 模型类名前缀逻辑修复
- ✅ **强制添加前缀**:修复了当类名已包含前缀时不重复添加前缀的逻辑,确保 `SubjectInfo` 配置前缀 `S` 后生成 `SSubjectInfo`
- ✅ **测试接口暴露**:为 `ConfigRepository` 添加 `setCachedConfig` 接口以便于测试。
## [3.2.0] - 2026-01-12
### 🎉 新特性

View File

@ -66,6 +66,11 @@ class ConfigRepository {
static ConfigRepository? _cachedConfig;
///
static void setCachedConfig(ConfigRepository config) {
_cachedConfig = config;
}
///
///
static ConfigRepository loadSync([String? configPath]) {

View File

@ -52,10 +52,8 @@ class StringHelper {
var className = NamingConverter.generateClassName(name);
final prefix = SwaggerConfig.modelClassPrefix;
if (prefix != null && prefix.isNotEmpty) {
if (!className.startsWith(prefix)) {
className = prefix + className;
}
}
return className;
}

View File

@ -1,7 +1,7 @@
name: swagger_generator_flutter
description: A powerful Swagger/OpenAPI code generator for Flutter projects with Dio + Retrofit support
version: 3.2.0
version: 3.2.1
environment:
sdk: '>=3.0.0 <4.0.0'

View File

@ -1,6 +1,5 @@
import 'dart:io';
import 'package:swagger_generator_flutter/core/config.dart';
import 'package:swagger_generator_flutter/core/config_repository.dart';
import 'package:swagger_generator_flutter/utils/string_helper.dart';
import 'package:test/test.dart';
@ -47,6 +46,49 @@ generator:
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.