diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index b716e6929..000000000 --- a/.editorconfig +++ /dev/null @@ -1,20 +0,0 @@ -root = true - -[*] -charset = utf-8 -end_of_line = lf -indent_size = 2 -tab_width = 2 -max_line_length = 160 -indent_style = space -insert_final_newline = true - -[*.md] -max_line_length = off - -[*.toon] -indent_size = 1 -tab_width = 1 - -[Makefile] -indent_style = tab diff --git a/.gitignore b/.gitignore index 305dd8a41..ff074fbc9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,95 +1,79 @@ -### android studio ### -/local.properties - -### gradle ### -.gradle -build/ -/build-cache/ -/generated/ -generated_tests/ -.generated/ -.xcodemap/ -!gradle/wrapper/gradle-wrapper.jar +*.hprof +*.iml +*.ipr +*.iws +*.log +*.mode1v3 +*.sln +*.xcodeproj +*.xcuserstate +*.xcworkspace +**/bin/ +**/out/ +*resources/static/ +!**/out/ !**/src/main/**/build/ !**/src/test/**/build/ -.gradle-user-home/ - -### kotlin ### -.kotlin -.kotlin/ +!gradle/wrapper/gradle-wrapper.jar -### STS ### +.vscode/ +.idea/ +.agent/ +.cursorignore +.qoderignore +.warpindexignore .apt_generated .classpath +.codebuddy/ +.claude/ +.cursor/ .factorypath +.factory/ +.generated/ +.gradle +.gradle-user-home/ +.jpb/ +.kiro/ +.kotlin +.kotlin/ +.logs +.playwright-mcp/ .project +.qoder/ .settings .springBeans .sts4-cache -**/bin/ -src/main/**/bin/ -src/test/**/bin/ +.vs +.windsurf/ -### IntelliJ IDEA ### -*.iws -*.iml -*.ipr -**/out/ -!**/out/ -src/main/**/out/ -src/test/**/out/ -.jpb/ -*.hprof -/out/ /amplicode.xml - -### NetBeans ### -/nbproject/private/ -/nbbuild/ +/build-cache/ /dist/ +/generated/ +/local.properties +/nbbuild/ /nbdist/ -/.nb-gradle/ - -### visual studio ### -.vs -*.sln -*resources/static/ - -### xcode ### -*.xcworkspace -*.xcodeproj -*.xcuserstate -*.mode1v3 - -### logs ### -logs -.logs -*.log /.env -### publish gpg ### -/private.gpg - -### Customs ### -TODO.* - -### AI Coder ### /.intellijPlatform/ -node_modules/ -pnpm-lock.yaml -.claude/ -.cursor/ -.factory/ -.ai/ -__ai/ -__aiissues/ -CLAUDE.md -AGENTS.md - -### claude code ### /.mcp.json +/.nb-gradle/ +/nbproject/private/ +/out/ +/private.gpg -### Windows issues ### +AGENTS.md +build/ +CLAUDE.md +generated_tests/ +logs +node_modules/ nul -.playwright-mcp/ -.codebuddy/ -.qoder/ +pnpm-lock.yaml +src/main/**/bin/ +src/main/**/out/ +src/test/**/bin/ +src/test/**/out/ +TODO.* +GEMINI.md +WARP.md +.editorconfig diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index b9ad7d893..000000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,15 +0,0 @@ -# 排除所有文件和目录 -* - -# 例外:保留这些文件 -!.gitignore -!codeStyles/ -!codeStyles/codeStyleConfig.xml -!codeStyles/Project.xml -!/sqldialects.xml -!/modules/ -!/modules/compose-server.iml -!/misc.xml -!/vcs.xml -!/*.iml -!/modules.xml diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml deleted file mode 100644 index bf2d3ab41..000000000 --- a/.idea/codeStyles/Project.xml +++ /dev/null @@ -1,177 +0,0 @@ - - - - - \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml deleted file mode 100644 index c5678b639..000000000 --- a/.idea/codeStyles/codeStyleConfig.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - diff --git a/.idea/compose-server.iml b/.idea/compose-server.iml deleted file mode 100644 index 9895a2175..000000000 --- a/.idea/compose-server.iml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 4925c9519..000000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index 5b5c0bdc8..000000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/modules/compose-server.iml b/.idea/modules/compose-server.iml deleted file mode 100644 index 3d828535e..000000000 --- a/.idea/modules/compose-server.iml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/sqldialects.xml b/.idea/sqldialects.xml deleted file mode 100644 index 3c9547fad..000000000 --- a/.idea/sqldialects.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 35eb1ddfb..000000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 9902093a4..000000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "workbench.colorCustomizations": { - "titleBar.activeBackground": "#d530c41a", - "titleBar.activeForeground": "#ffffff", - "titleBar.inactiveBackground": "#b625a81a", - "titleBar.inactiveForeground": "#f3c4ee", - "titleBar.border": "#d530c41a" - } -} diff --git a/CODEBUDDY.md b/CODEBUDDY.md deleted file mode 100644 index bb9e48566..000000000 --- a/CODEBUDDY.md +++ /dev/null @@ -1,232 +0,0 @@ -# CODEBUDDY.md - -This file provides guidance to CodeBuddy Code when working with the Compose Server repository. - -## Project Overview - -**Compose Server** is a modern enterprise-grade Kotlin server-side framework library featuring modular architecture design. It provides 30+ specialized modules covering AI integration, object storage, database operations, security, payments, messaging, data processing, and monitoring capabilities. All modules are published to Maven Central for selective integration. - -**Technology Stack:** Kotlin 2.2.0, Spring Boot 3.5.4, Jimmer 0.9.105, Gradle 9.x, Java 24+, PostgreSQL, Redis, Caffeine, MinIO, LangChain4j - -## Essential Development Commands - -### Build and Development -```bash -# Build the entire project -./gradlew build - -# Clean build outputs -./gradlew clean - -# Run all tests and checks -./gradlew check - -# Build specific module -./gradlew :{module}:build - -# Run tests for specific module -./gradlew :{module}:check - -# Publish to local Maven repository -./gradlew publishToMavenLocal - -# Publish specific module locally -./gradlew :{module}:publishToMavenLocal -``` - -### Code Quality (REQUIRED before commits) -```bash -# Fix code formatting (MUST run before commit) -./gradlew spotlessApply - -# Format version catalog -./gradlew versionCatalogFormat - -# Check for dependency updates -./gradlew versionCatalogUpdate -``` - -### Testing Commands -```bash -# Run all tests with parallel execution -./gradlew test - -# Run tests with TestContainers (requires Docker) -./gradlew integrationTest - -# Run specific test class -./gradlew test --tests "ClassName" - -# Run tests with specific profile -./gradlew test -Dspring.profiles.active=test -``` - -## Architecture Overview - -### Modular Structure -The project follows a layered modular architecture with clear functional boundaries: - -``` -🎯 Application Layer - ↓ (selective integration) -🏢 Business Module Layer (30+ modules) - ├── 🤖 AI Services (ai-*) - ├── 📦 Object Storage (oss-*) - ├── 💳 Payment Services (pay-*) - ├── 📱 SMS Services (sms-*) - ├── 🔐 Security (security-*) - ├── 🗄️ Database (rds-*) - └── 🔧 Dependencies (depend-*, ksp-*, psdk-*) - ↓ (all depend on) -🏗️ Infrastructure Layer - ├── 🔧 Shared Foundation (shared) - ├── 📋 Dependency Management (bom) - ├── 🧪 Testing Toolkit (testtoolkit) - └── ⚡ Caching Abstractions (cacheable) -``` - -### Module Organization Pattern -Each functional domain follows a consistent structure: -- `{domain}-shared/`: Core interfaces and abstractions -- `{domain}-{provider}/`: Provider-specific implementations (e.g., `oss-minio`, `pay-wechat`) -- `autoconfig/`: Spring Boot auto-configuration classes -- Package format: `io.github.truenine.composeserver.{module-name}` - -### Key Architectural Patterns - -#### Auto-Configuration Pattern -Every module uses Spring Boot auto-configuration with: -- `AutoConfigEntrance.kt` as entry point in `autoconfig` package -- `@ComponentScan` for automatic discovery -- `@EnableConfigurationProperties` for type-safe configuration -- `META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports` for registration - -#### Repository Pattern -- `IRepo` interface extending Jimmer's `KRepository` -- `IPersistentEntity` base interface for all entities -- Jimmer ORM integration with strong type safety - -#### Service Abstractions -- Unified interfaces like `IObjectStorageService` for multi-provider support -- Coroutines integration throughout async operations -- Provider-swappable implementations - -## Testing Architecture - -### TestContainers Integration -The project uses comprehensive TestContainers integration: -- `ITestContainerBase`: Base interface for all containers -- Specific container interfaces: `IDatabasePostgresqlContainer`, `ICacheRedisContainer`, etc. -- Automatic container startup via `@DynamicPropertySource` -- Container reuse enabled for performance -- Extension functions for convenient testing (e.g., `mysql { }` blocks) - -### Test Organization Standards -- Test classes use `@Nested` inner classes for scenario organization -- Chinese method names with backticks for test descriptions -- Disable `@DisplayName` annotation -- Test categories: normal cases, exception cases, boundary cases -- Idempotency verification for database operations - -### Test Configuration -```yaml -# application-test.yml -compose: - testtoolkit: - enabled: true - disable-condition-evaluation-report: true - enable-virtual-threads: true - ansi-output-mode: always -``` - -## Build System - -### Gradle Configuration -- **Version Catalog**: `gradle/libs.versions.toml` for unified dependency management -- **Convention Plugins**: `build-logic/` contains reusable build conventions -- **Primary Convention**: `kotlinspring-conventions` for most modules -- **Performance Optimized**: Parallel builds, caching, configuration cache enabled - -### Convention Plugins Available -- `buildlogic.kotlinspring-conventions`: Primary for Kotlin Spring modules -- `buildlogic.publish-conventions`: Maven Central publishing -- `buildlogic.spotless-conventions`: Code formatting -- `buildlogic.jacoco-conventions`: Code coverage - -### Key Build Files -- Root: `build.gradle.kts`, `settings.gradle.kts`, `gradle.properties` -- Module: `{module}/build.gradle.kts` -- Version management: `gradle/libs.versions.toml` -- Build logic: `build-logic/src/main/kotlin/` - -## Development Workflow - -### Before Every Commit -1. **MANDATORY**: Run `./gradlew spotlessApply` to fix code formatting -2. Run `./gradlew check` to ensure all tests pass -3. Verify module builds independently if changes span multiple modules - -### Adding New Modules -1. Create module directory following naming convention -2. Add to `settings.gradle.kts` include list -3. Apply appropriate convention plugins in module's `build.gradle.kts` -4. Implement auto-configuration in `autoconfig` package -5. Add to version catalog if publishing to Maven Central - -### Code Generation (KSP) -- Annotation definitions in `ksp-meta/` -- Processor implementation in `ksp-plugin/` -- Generated code integration through Gradle KSP plugin - -## Key Interfaces and Abstractions - -### Core Domain Interfaces -- `IAnyEnum`: Type-safe enum abstraction for serialization -- `IPageParam`: Pagination parameter interface -- `IPersistentEntity`: Base entity with audit fields - -### Service Layer Interfaces -- `IObjectStorageService`: Unified object storage with coroutines -- `IRepo`: Repository pattern with Jimmer integration -- `IKeysRepo`: Cryptographic key management - -### Configuration Interfaces -- Properties classes with `@ConfigurationProperties` -- Environment-specific configuration overrides -- TestContainer-specific properties - -## Maven Central Publishing - -All modules are published as `io.github.truenine:composeserver-{module-name}:${version}` -- Current version managed in `gradle/libs.versions.toml` -- BOM available for unified version management -- Selective integration supported - choose only needed modules - -## Performance Considerations - -### JVM Configuration -```properties -# gradle.properties -org.gradle.jvmargs=-Xmx5g -XX:MaxMetaspaceSize=1g -XX:+UseG1GC -kotlin.daemon.jvmargs=-Xmx2g -XX:+UseG1GC -``` - -### Build Optimizations -- Parallel builds enabled -- Gradle build cache enabled -- Configuration cache enabled -- Incremental Kotlin compilation -- JUnit parallel test execution - -## IDE Integration - -### IntelliJ IDEA Plugin -- MCP (Model Context Protocol) integration in `ide/ide-idea-mcp/` -- Code analysis and cleanup tools -- Terminal integration for development workflows - -### Development Setup -- Java 24+ required -- Kotlin 2.2.0+ required -- Docker required for TestContainers integration -- IntelliJ IDEA recommended with Kotlin plugin \ No newline at end of file diff --git a/ai/ai-langchain4j/build.gradle.kts b/ai/ai-langchain4j/build.gradle.kts index 4244452bb..1edc3e118 100644 --- a/ai/ai-langchain4j/build.gradle.kts +++ b/ai/ai-langchain4j/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("buildlogic.kotlinspring-conventions") + id("buildlogic.kotlin-spring-boot-conventions") id("buildlogic.spotless-conventions") } diff --git a/ai/ai-shared/build.gradle.kts b/ai/ai-shared/build.gradle.kts index 7b6fec207..6b299768b 100644 --- a/ai/ai-shared/build.gradle.kts +++ b/ai/ai-shared/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("buildlogic.kotlinspring-conventions") + id("buildlogic.kotlin-spring-boot-conventions") id("buildlogic.spotless-conventions") } diff --git a/bom/build.gradle.kts b/bom/build.gradle.kts index a26794d74..c20bf3842 100644 --- a/bom/build.gradle.kts +++ b/bom/build.gradle.kts @@ -2,7 +2,7 @@ import kotlin.jvm.optionals.getOrNull plugins { `java-platform` - id("buildlogic.publish-conventions") + id("buildlogic.maven-publish-conventions") id("buildlogic.spotless-conventions") } diff --git a/build-logic/src/main/kotlin/buildlogic.java-conventions.gradle.kts b/build-logic/src/main/kotlin/buildlogic.java-conventions.gradle.kts index 1677b2986..6aa29b687 100644 --- a/build-logic/src/main/kotlin/buildlogic.java-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/buildlogic.java-conventions.gradle.kts @@ -2,7 +2,7 @@ val libs = the() plugins { `java-library` - id("buildlogic.publish-conventions") + id("buildlogic.maven-publish-conventions") id("buildlogic.repositories-conventions") id("buildlogic.jacoco-conventions") } diff --git a/build-logic/src/main/kotlin/buildlogic.javaspring-conventions.gradle.kts b/build-logic/src/main/kotlin/buildlogic.java-spring-boot-conventions.gradle.kts similarity index 100% rename from build-logic/src/main/kotlin/buildlogic.javaspring-conventions.gradle.kts rename to build-logic/src/main/kotlin/buildlogic.java-spring-boot-conventions.gradle.kts diff --git a/build-logic/src/main/kotlin/buildlogic.kotlinspring-conventions.gradle.kts b/build-logic/src/main/kotlin/buildlogic.kotlin-spring-boot-conventions.gradle.kts similarity index 88% rename from build-logic/src/main/kotlin/buildlogic.kotlinspring-conventions.gradle.kts rename to build-logic/src/main/kotlin/buildlogic.kotlin-spring-boot-conventions.gradle.kts index e20907abe..c391d31e0 100644 --- a/build-logic/src/main/kotlin/buildlogic.kotlinspring-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/buildlogic.kotlin-spring-boot-conventions.gradle.kts @@ -1,6 +1,6 @@ val libs = the() plugins { - id("buildlogic.javaspring-conventions") + id("buildlogic.java-spring-boot-conventions") id("buildlogic.kotlin-conventions") kotlin("plugin.spring") kotlin("kapt") diff --git a/build-logic/src/main/kotlin/buildlogic.kotlinspring-test-conventions.gradle.kts b/build-logic/src/main/kotlin/buildlogic.kotlin-spring-boot-test-conventions.gradle.kts similarity index 100% rename from build-logic/src/main/kotlin/buildlogic.kotlinspring-test-conventions.gradle.kts rename to build-logic/src/main/kotlin/buildlogic.kotlin-spring-boot-test-conventions.gradle.kts diff --git a/build-logic/src/main/kotlin/buildlogic.publish-conventions.gradle.kts b/build-logic/src/main/kotlin/buildlogic.maven-publish-conventions.gradle.kts similarity index 91% rename from build-logic/src/main/kotlin/buildlogic.publish-conventions.gradle.kts rename to build-logic/src/main/kotlin/buildlogic.maven-publish-conventions.gradle.kts index fd9398aaf..b25b0f567 100644 --- a/build-logic/src/main/kotlin/buildlogic.publish-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/buildlogic.maven-publish-conventions.gradle.kts @@ -1,7 +1,4 @@ -import com.vanniktech.maven.publish.GradlePlugin -import com.vanniktech.maven.publish.JavadocJar -import com.vanniktech.maven.publish.KotlinJvm -import com.vanniktech.maven.publish.VersionCatalog +import com.vanniktech.maven.publish.* val libs = the() @@ -33,7 +30,7 @@ mavenPublishing { // Detect the Kotlin JVM plugin (including indirect application) project.plugins.hasPlugin("org.jetbrains.kotlin.jvm") || project.plugins.hasPlugin("buildlogic.kotlin-conventions") || - project.plugins.hasPlugin("buildlogic.kotlinspring-conventions") -> { + project.plugins.hasPlugin("buildlogic.kotlin-spring-boot-conventions") -> { configure( KotlinJvm( javadocJar = JavadocJar.Empty(), @@ -63,7 +60,6 @@ mavenPublishing { inceptionYear = "2020" developers { - developer { id = "TrueNine" name = "Zhao Ritian" @@ -97,6 +93,14 @@ mavenPublishing { roles = listOf("Sponsor") timezone = "GMT+8" } + developer { + id = "zjarlin" + name = "加加林" + url = "https://github.com/zjarlin" + email = "zjarlin@outlook.com" + roles = listOf("Developer", "Partner", "Sponsor") + timezone = "GMT+8" + } } scm { diff --git a/cacheable/build.gradle.kts b/cacheable/build.gradle.kts index fb478b692..22ac90618 100644 --- a/cacheable/build.gradle.kts +++ b/cacheable/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("buildlogic.kotlinspring-conventions") + id("buildlogic.kotlin-spring-boot-conventions") id("buildlogic.spotless-conventions") } diff --git a/cacheable/src/main/kotlin/io/github/truenine/composeserver/cacheable/autoconfig/CaffeineCacheAutoConfiguration.kt b/cacheable/src/main/kotlin/io/github/truenine/composeserver/cacheable/autoconfig/CaffeineCacheAutoConfiguration.kt index 5e9947a6f..cd9ed3009 100644 --- a/cacheable/src/main/kotlin/io/github/truenine/composeserver/cacheable/autoconfig/CaffeineCacheAutoConfiguration.kt +++ b/cacheable/src/main/kotlin/io/github/truenine/composeserver/cacheable/autoconfig/CaffeineCacheAutoConfiguration.kt @@ -6,9 +6,7 @@ import io.github.truenine.composeserver.consts.ICacheNames import io.github.truenine.composeserver.logger import java.time.Duration import org.springframework.cache.caffeine.CaffeineCacheManager -import org.springframework.context.annotation.Bean -import org.springframework.context.annotation.Configuration -import org.springframework.context.annotation.Primary +import org.springframework.context.annotation.* private val log = logger() diff --git a/cacheable/src/main/kotlin/io/github/truenine/composeserver/cacheable/autoconfig/RedisJsonSerializerAutoConfiguration.kt b/cacheable/src/main/kotlin/io/github/truenine/composeserver/cacheable/autoconfig/RedisJsonSerializerAutoConfiguration.kt index 23a3ab7e1..d965bd19f 100644 --- a/cacheable/src/main/kotlin/io/github/truenine/composeserver/cacheable/autoconfig/RedisJsonSerializerAutoConfiguration.kt +++ b/cacheable/src/main/kotlin/io/github/truenine/composeserver/cacheable/autoconfig/RedisJsonSerializerAutoConfiguration.kt @@ -12,9 +12,7 @@ import org.springframework.data.redis.cache.RedisCacheConfiguration import org.springframework.data.redis.cache.RedisCacheManager import org.springframework.data.redis.connection.RedisConnectionFactory import org.springframework.data.redis.core.RedisTemplate -import org.springframework.data.redis.serializer.GenericJacksonJsonRedisSerializer -import org.springframework.data.redis.serializer.RedisSerializationContext -import org.springframework.data.redis.serializer.StringRedisSerializer +import org.springframework.data.redis.serializer.* import tools.jackson.databind.DeserializationFeature import tools.jackson.databind.json.JsonMapper diff --git a/cacheable/src/test/kotlin/io/github/truenine/composeserver/cacheable/caffeine/CaffeineCacheManagerTest.kt b/cacheable/src/test/kotlin/io/github/truenine/composeserver/cacheable/caffeine/CaffeineCacheManagerTest.kt index c21d5a401..c55cb01b6 100644 --- a/cacheable/src/test/kotlin/io/github/truenine/composeserver/cacheable/caffeine/CaffeineCacheManagerTest.kt +++ b/cacheable/src/test/kotlin/io/github/truenine/composeserver/cacheable/caffeine/CaffeineCacheManagerTest.kt @@ -5,17 +5,10 @@ import io.github.truenine.composeserver.cacheable.get import io.github.truenine.composeserver.consts.ICacheNames import io.github.truenine.composeserver.slf4j import jakarta.annotation.Resource -import kotlin.test.BeforeTest -import kotlin.test.Test -import kotlin.test.assertEquals -import kotlin.test.assertIs -import kotlin.test.assertNotNull -import kotlin.test.assertTrue +import kotlin.test.* import org.springframework.boot.test.context.SpringBootTest -import org.springframework.cache.CacheManager +import org.springframework.cache.* import org.springframework.cache.caffeine.CaffeineCacheManager -import org.springframework.cache.get -import org.springframework.cache.set private val log = slf4j() diff --git a/data/data-crawler/src/main/kotlin/io/github/truenine/composeserver/data/crawler/playwright/BrowserFns.kt b/data/data-crawler/src/main/kotlin/io/github/truenine/composeserver/data/crawler/playwright/BrowserFns.kt index da9b0a12e..63069824a 100644 --- a/data/data-crawler/src/main/kotlin/io/github/truenine/composeserver/data/crawler/playwright/BrowserFns.kt +++ b/data/data-crawler/src/main/kotlin/io/github/truenine/composeserver/data/crawler/playwright/BrowserFns.kt @@ -1,8 +1,6 @@ package io.github.truenine.composeserver.data.crawler.playwright -import com.microsoft.playwright.Browser -import com.microsoft.playwright.BrowserContext -import com.microsoft.playwright.Page +import com.microsoft.playwright.* fun Browser.withActions(ctxOptions: Browser.NewContextOptions? = null, pageOptions: Browser.NewPageOptions? = null, action: (BrowserContext, Page) -> Unit) { newContext(ctxOptions).use { ctx -> newPage(pageOptions).use { page -> action(ctx, page) } } diff --git a/data/data-crawler/src/main/kotlin/io/github/truenine/composeserver/data/crawler/playwright/PageFns.kt b/data/data-crawler/src/main/kotlin/io/github/truenine/composeserver/data/crawler/playwright/PageFns.kt index 9aec73900..0c8f758dd 100644 --- a/data/data-crawler/src/main/kotlin/io/github/truenine/composeserver/data/crawler/playwright/PageFns.kt +++ b/data/data-crawler/src/main/kotlin/io/github/truenine/composeserver/data/crawler/playwright/PageFns.kt @@ -3,9 +3,7 @@ package io.github.truenine.composeserver.data.crawler.playwright import com.microsoft.playwright.Locator import com.microsoft.playwright.Locator.WaitForOptions import com.microsoft.playwright.Page -import com.microsoft.playwright.options.Cookie -import com.microsoft.playwright.options.LoadState -import com.microsoft.playwright.options.WaitForSelectorState +import com.microsoft.playwright.options.* @Suppress("UNCHECKED_CAST") fun Page.localStorage(): Map { diff --git a/data/data-crawler/src/main/kotlin/io/github/truenine/composeserver/data/crawler/playwright/PlayWrightFns.kt b/data/data-crawler/src/main/kotlin/io/github/truenine/composeserver/data/crawler/playwright/PlayWrightFns.kt index ec220b723..daefbeeb1 100644 --- a/data/data-crawler/src/main/kotlin/io/github/truenine/composeserver/data/crawler/playwright/PlayWrightFns.kt +++ b/data/data-crawler/src/main/kotlin/io/github/truenine/composeserver/data/crawler/playwright/PlayWrightFns.kt @@ -1,8 +1,6 @@ package io.github.truenine.composeserver.data.crawler.playwright -import com.microsoft.playwright.Browser -import com.microsoft.playwright.BrowserType -import com.microsoft.playwright.Playwright +import com.microsoft.playwright.* fun Playwright.launchBy(browserType: BrowserTypes = BrowserTypes.CHROMIUM, headless: Boolean? = false, launchTimeout: Double = 30000.0): Browser { return browserType.getPlaywrightType(this).launch(BrowserType.LaunchOptions().setHeadless(headless ?: false).setTimeout(launchTimeout)) diff --git a/data/data-extract/build.gradle.kts b/data/data-extract/build.gradle.kts index 301eef2f4..9652e1355 100644 --- a/data/data-extract/build.gradle.kts +++ b/data/data-extract/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("buildlogic.kotlinspring-conventions") + id("buildlogic.kotlin-spring-boot-conventions") id("buildlogic.spotless-conventions") } diff --git a/data/data-extract/src/main/kotlin/io/github/truenine/composeserver/data/extract/service/ILazyAddressService.kt b/data/data-extract/src/main/kotlin/io/github/truenine/composeserver/data/extract/service/ILazyAddressService.kt index e0df206e6..412a8044a 100644 --- a/data/data-extract/src/main/kotlin/io/github/truenine/composeserver/data/extract/service/ILazyAddressService.kt +++ b/data/data-extract/src/main/kotlin/io/github/truenine/composeserver/data/extract/service/ILazyAddressService.kt @@ -1,10 +1,8 @@ package io.github.truenine.composeserver.data.extract.service -import io.github.truenine.composeserver.SystemLogger +import io.github.truenine.composeserver.* import io.github.truenine.composeserver.consts.IRegexes import io.github.truenine.composeserver.data.extract.domain.CnDistrictCode -import io.github.truenine.composeserver.nonText -import io.github.truenine.composeserver.string /** * Lazy loading administrative district code service interface. diff --git a/data/data-extract/src/test/kotlin/io/github/truenine/composeserver/data/extract/api/ICnNbsAddressApiTest.kt b/data/data-extract/src/test/kotlin/io/github/truenine/composeserver/data/extract/api/ICnNbsAddressApiTest.kt index ba39040c8..512901755 100644 --- a/data/data-extract/src/test/kotlin/io/github/truenine/composeserver/data/extract/api/ICnNbsAddressApiTest.kt +++ b/data/data-extract/src/test/kotlin/io/github/truenine/composeserver/data/extract/api/ICnNbsAddressApiTest.kt @@ -1,9 +1,7 @@ package io.github.truenine.composeserver.data.extract.api import jakarta.annotation.Resource -import kotlin.test.Ignore -import kotlin.test.Test -import kotlin.test.assertNotNull +import kotlin.test.* import org.springframework.boot.test.context.SpringBootTest @Ignore diff --git a/data/data-extract/src/test/kotlin/io/github/truenine/composeserver/data/extract/domain/CnDistrictCodeTest.kt b/data/data-extract/src/test/kotlin/io/github/truenine/composeserver/data/extract/domain/CnDistrictCodeTest.kt index 85a2d87ab..ae1133389 100644 --- a/data/data-extract/src/test/kotlin/io/github/truenine/composeserver/data/extract/domain/CnDistrictCodeTest.kt +++ b/data/data-extract/src/test/kotlin/io/github/truenine/composeserver/data/extract/domain/CnDistrictCodeTest.kt @@ -1,9 +1,6 @@ package io.github.truenine.composeserver.data.extract.domain -import kotlin.test.assertEquals -import kotlin.test.assertFalse -import kotlin.test.assertNull -import kotlin.test.assertTrue +import kotlin.test.* import org.junit.jupiter.api.Test import org.junit.jupiter.api.assertThrows diff --git a/data/data-extract/src/test/kotlin/io/github/truenine/composeserver/data/extract/service/ILazyAddressServiceTest.kt b/data/data-extract/src/test/kotlin/io/github/truenine/composeserver/data/extract/service/ILazyAddressServiceTest.kt index 7b8c329d9..0471be857 100644 --- a/data/data-extract/src/test/kotlin/io/github/truenine/composeserver/data/extract/service/ILazyAddressServiceTest.kt +++ b/data/data-extract/src/test/kotlin/io/github/truenine/composeserver/data/extract/service/ILazyAddressServiceTest.kt @@ -6,12 +6,7 @@ import io.github.truenine.composeserver.string import io.mockk.every import io.mockk.mockk import kotlin.system.measureTimeMillis -import kotlin.test.BeforeTest -import kotlin.test.assertEquals -import kotlin.test.assertFalse -import kotlin.test.assertNotNull -import kotlin.test.assertNull -import kotlin.test.assertTrue +import kotlin.test.* import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.springframework.core.io.ByteArrayResource diff --git a/data/data-extract/src/test/kotlin/io/github/truenine/composeserver/data/extract/service/impl/LazyAddressCsvServiceImplTest.kt b/data/data-extract/src/test/kotlin/io/github/truenine/composeserver/data/extract/service/impl/LazyAddressCsvServiceImplTest.kt index 04c328c6d..99a155731 100644 --- a/data/data-extract/src/test/kotlin/io/github/truenine/composeserver/data/extract/service/impl/LazyAddressCsvServiceImplTest.kt +++ b/data/data-extract/src/test/kotlin/io/github/truenine/composeserver/data/extract/service/impl/LazyAddressCsvServiceImplTest.kt @@ -4,11 +4,7 @@ import io.github.truenine.composeserver.holders.ResourceHolder import io.mockk.every import io.mockk.mockk import kotlin.system.measureTimeMillis -import kotlin.test.assertEquals -import kotlin.test.assertFalse -import kotlin.test.assertNotNull -import kotlin.test.assertNull -import kotlin.test.assertTrue +import kotlin.test.* import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.springframework.core.io.ByteArrayResource diff --git a/data/data-extract/src/test/kotlin/io/github/truenine/composeserver/data/extract/service/impl/LazyAddressServiceImplTest.kt b/data/data-extract/src/test/kotlin/io/github/truenine/composeserver/data/extract/service/impl/LazyAddressServiceImplTest.kt index e62b4a26e..9f5f3efc0 100644 --- a/data/data-extract/src/test/kotlin/io/github/truenine/composeserver/data/extract/service/impl/LazyAddressServiceImplTest.kt +++ b/data/data-extract/src/test/kotlin/io/github/truenine/composeserver/data/extract/service/impl/LazyAddressServiceImplTest.kt @@ -3,10 +3,7 @@ package io.github.truenine.composeserver.data.extract.service.impl import io.github.truenine.composeserver.data.extract.api.ICnNbsAddressApi import io.mockk.every import io.mockk.mockk -import kotlin.test.Ignore -import kotlin.test.assertEquals -import kotlin.test.assertFalse -import kotlin.test.assertTrue +import kotlin.test.* import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test diff --git a/depend/depend-http-exchange/src/main/kotlin/io/github/truenine/composeserver/depend/httpexchange/WebClientFns.kt b/depend/depend-http-exchange/src/main/kotlin/io/github/truenine/composeserver/depend/httpexchange/WebClientFns.kt index 9843284c6..b9d97b5c0 100644 --- a/depend/depend-http-exchange/src/main/kotlin/io/github/truenine/composeserver/depend/httpexchange/WebClientFns.kt +++ b/depend/depend-http-exchange/src/main/kotlin/io/github/truenine/composeserver/depend/httpexchange/WebClientFns.kt @@ -14,9 +14,7 @@ import org.springframework.util.MimeType import org.springframework.web.bind.annotation.RequestParam import org.springframework.web.reactive.function.client.WebClient import org.springframework.web.reactive.function.client.support.WebClientAdapter -import org.springframework.web.service.invoker.HttpRequestValues -import org.springframework.web.service.invoker.HttpServiceArgumentResolver -import org.springframework.web.service.invoker.HttpServiceProxyFactory +import org.springframework.web.service.invoker.* import tools.jackson.databind.ObjectMapper import tools.jackson.databind.json.JsonMapper diff --git a/depend/depend-jackson/build.gradle.kts b/depend/depend-jackson/build.gradle.kts index 3ff583132..a1cf886c4 100644 --- a/depend/depend-jackson/build.gradle.kts +++ b/depend/depend-jackson/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("buildlogic.kotlinspring-conventions") + id("buildlogic.kotlin-spring-boot-conventions") id("buildlogic.spotless-conventions") } diff --git a/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/autoconfig/JacksonAutoConfiguration.kt b/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/autoconfig/JacksonAutoConfiguration.kt index a226fefca..8d79a66d3 100644 --- a/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/autoconfig/JacksonAutoConfiguration.kt +++ b/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/autoconfig/JacksonAutoConfiguration.kt @@ -1,10 +1,6 @@ package io.github.truenine.composeserver.depend.jackson.autoconfig -import com.fasterxml.jackson.annotation.JsonAutoDetect -import com.fasterxml.jackson.annotation.JsonIgnoreProperties -import com.fasterxml.jackson.annotation.JsonInclude -import com.fasterxml.jackson.annotation.JsonTypeInfo -import com.fasterxml.jackson.annotation.PropertyAccessor +import com.fasterxml.jackson.annotation.* import io.github.truenine.composeserver.DateTimeConverter import io.github.truenine.composeserver.depend.jackson.modules.DatetimeCustomModule import io.github.truenine.composeserver.depend.jackson.modules.KotlinCustomModule @@ -18,18 +14,9 @@ import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration import org.springframework.core.Ordered import org.springframework.core.annotation.Order -import tools.jackson.databind.AnnotationIntrospector -import tools.jackson.databind.DefaultTyping -import tools.jackson.databind.DeserializationFeature -import tools.jackson.databind.JavaType -import tools.jackson.databind.ObjectMapper -import tools.jackson.databind.SerializationFeature +import tools.jackson.databind.* import tools.jackson.databind.cfg.MapperConfig -import tools.jackson.databind.introspect.Annotated -import tools.jackson.databind.introspect.AnnotatedClass -import tools.jackson.databind.introspect.AnnotatedMember -import tools.jackson.databind.introspect.AnnotationIntrospectorPair -import tools.jackson.databind.introspect.JacksonAnnotationIntrospector +import tools.jackson.databind.introspect.* import tools.jackson.databind.json.JsonMapper import tools.jackson.databind.jsontype.BasicPolymorphicTypeValidator import tools.jackson.databind.jsontype.impl.DefaultTypeResolverBuilder diff --git a/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/modules/DatetimeCustomModule.kt b/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/modules/DatetimeCustomModule.kt index 6fe927c83..a02221240 100644 --- a/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/modules/DatetimeCustomModule.kt +++ b/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/modules/DatetimeCustomModule.kt @@ -1,28 +1,10 @@ package io.github.truenine.composeserver.depend.jackson.modules -import io.github.truenine.composeserver.depend.jackson.serializers.InstantTimestampDeserializer -import io.github.truenine.composeserver.depend.jackson.serializers.InstantTimestampSerializer -import io.github.truenine.composeserver.depend.jackson.serializers.LocalDateTimeTimestampDeserializer -import io.github.truenine.composeserver.depend.jackson.serializers.LocalDateTimeTimestampSerializer -import io.github.truenine.composeserver.depend.jackson.serializers.LocalDateTimestampDeserializer -import io.github.truenine.composeserver.depend.jackson.serializers.LocalDateTimestampSerializer -import io.github.truenine.composeserver.depend.jackson.serializers.LocalTimeTimestampDeserializer -import io.github.truenine.composeserver.depend.jackson.serializers.LocalTimeTimestampSerializer -import io.github.truenine.composeserver.depend.jackson.serializers.OffsetDateTimeTimestampDeserializer -import io.github.truenine.composeserver.depend.jackson.serializers.OffsetDateTimeTimestampSerializer -import io.github.truenine.composeserver.depend.jackson.serializers.ZonedDateTimeTimestampDeserializer -import io.github.truenine.composeserver.depend.jackson.serializers.ZonedDateTimeTimestampSerializer -import java.time.Instant -import java.time.LocalDate -import java.time.LocalDateTime -import java.time.LocalTime -import java.time.OffsetDateTime -import java.time.ZonedDateTime +import io.github.truenine.composeserver.depend.jackson.serializers.* +import java.time.* import tools.jackson.databind.ValueDeserializer import tools.jackson.databind.ValueSerializer -import tools.jackson.databind.module.SimpleDeserializers -import tools.jackson.databind.module.SimpleModule -import tools.jackson.databind.module.SimpleSerializers +import tools.jackson.databind.module.* /** * Custom module for date-time types. diff --git a/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/modules/KotlinCustomModule.kt b/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/modules/KotlinCustomModule.kt index 8b7d149ae..f26d59142 100644 --- a/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/modules/KotlinCustomModule.kt +++ b/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/modules/KotlinCustomModule.kt @@ -1,14 +1,10 @@ package io.github.truenine.composeserver.depend.jackson.modules -import io.github.truenine.composeserver.depend.jackson.serializers.IPageParamLikeSerializer -import io.github.truenine.composeserver.depend.jackson.serializers.KPairDeserializer -import io.github.truenine.composeserver.depend.jackson.serializers.KPairSerializer +import io.github.truenine.composeserver.depend.jackson.serializers.* import io.github.truenine.composeserver.domain.IPageParam import io.github.truenine.composeserver.domain.IPageParamLike import tools.jackson.core.Version -import tools.jackson.databind.module.SimpleDeserializers -import tools.jackson.databind.module.SimpleModule -import tools.jackson.databind.module.SimpleSerializers +import tools.jackson.databind.module.* /** * Custom Kotlin Jackson module. diff --git a/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/AnyEnumConverter.kt b/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/AnyEnumConverter.kt index 4098ac397..55e856567 100644 --- a/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/AnyEnumConverter.kt +++ b/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/AnyEnumConverter.kt @@ -1,8 +1,6 @@ package io.github.truenine.composeserver.depend.jackson.serializers -import io.github.truenine.composeserver.IAnyEnum -import io.github.truenine.composeserver.IIntEnum -import io.github.truenine.composeserver.IStringEnum +import io.github.truenine.composeserver.* import kotlin.reflect.KClass import tools.jackson.core.JsonParser import tools.jackson.core.JsonToken diff --git a/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/AnyEnumSerializer.kt b/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/AnyEnumSerializer.kt index a99c0dcd7..8046b34bf 100644 --- a/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/AnyEnumSerializer.kt +++ b/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/AnyEnumSerializer.kt @@ -1,8 +1,6 @@ package io.github.truenine.composeserver.depend.jackson.serializers -import io.github.truenine.composeserver.IAnyEnum -import io.github.truenine.composeserver.IIntEnum -import io.github.truenine.composeserver.IStringEnum +import io.github.truenine.composeserver.* import tools.jackson.core.JsonGenerator import tools.jackson.databind.SerializationContext import tools.jackson.databind.ValueSerializer diff --git a/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/IPageParamLikeSerializer.kt b/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/IPageParamLikeSerializer.kt index 85c1155fc..3e99bc41b 100644 --- a/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/IPageParamLikeSerializer.kt +++ b/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/IPageParamLikeSerializer.kt @@ -4,9 +4,7 @@ import io.github.truenine.composeserver.Pq import io.github.truenine.composeserver.domain.IPageParam import tools.jackson.core.JsonParser import tools.jackson.core.JsonToken -import tools.jackson.databind.DatabindException -import tools.jackson.databind.DeserializationContext -import tools.jackson.databind.ValueDeserializer +import tools.jackson.databind.* /** * Deserializer for IPageParam and IPageParamLike interfaces. diff --git a/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/ISO8601Deserializer.kt b/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/ISO8601Deserializer.kt index 8c3bc82b1..d598eb2ef 100644 --- a/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/ISO8601Deserializer.kt +++ b/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/ISO8601Deserializer.kt @@ -1,12 +1,7 @@ package io.github.truenine.composeserver.depend.jackson.serializers -import io.github.truenine.composeserver.toLocalDate -import io.github.truenine.composeserver.toLocalDateTime -import io.github.truenine.composeserver.toLocalTime -import java.time.LocalDate -import java.time.LocalDateTime -import java.time.LocalTime -import java.time.ZoneOffset +import io.github.truenine.composeserver.* +import java.time.* import java.time.temporal.Temporal import tools.jackson.core.JsonParser import tools.jackson.databind.DeserializationContext diff --git a/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/ISO8601Serializer.kt b/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/ISO8601Serializer.kt index 1dc32e0e5..2517bb4c8 100644 --- a/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/ISO8601Serializer.kt +++ b/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/ISO8601Serializer.kt @@ -1,10 +1,7 @@ package io.github.truenine.composeserver.depend.jackson.serializers import io.github.truenine.composeserver.toMillis -import java.time.LocalDate -import java.time.LocalDateTime -import java.time.LocalTime -import java.time.ZoneOffset +import java.time.* import tools.jackson.core.JsonGenerator import tools.jackson.core.JsonToken import tools.jackson.databind.SerializationContext diff --git a/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/KPairDeserializer.kt b/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/KPairDeserializer.kt index 8b33300c7..a6023ef8b 100644 --- a/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/KPairDeserializer.kt +++ b/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/KPairDeserializer.kt @@ -2,9 +2,7 @@ package io.github.truenine.composeserver.depend.jackson.serializers import tools.jackson.core.JsonParser import tools.jackson.core.JsonToken -import tools.jackson.databind.DatabindException -import tools.jackson.databind.DeserializationContext -import tools.jackson.databind.ValueDeserializer +import tools.jackson.databind.* /** * Kotlin Pair deserializer. diff --git a/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/LocalDateTimeTimestampSerializer.kt b/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/LocalDateTimeTimestampSerializer.kt index 9c7f16f5b..f7d0cb01b 100644 --- a/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/LocalDateTimeTimestampSerializer.kt +++ b/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/LocalDateTimeTimestampSerializer.kt @@ -1,6 +1,5 @@ package io.github.truenine.composeserver.depend.jackson.serializers -import java.time.Instant import java.time.LocalDateTime import java.time.ZoneOffset import tools.jackson.core.JsonGenerator diff --git a/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/LocalDateTimestampSerializer.kt b/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/LocalDateTimestampSerializer.kt index 68a20e252..6e02e72e5 100644 --- a/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/LocalDateTimestampSerializer.kt +++ b/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/LocalDateTimestampSerializer.kt @@ -1,6 +1,5 @@ package io.github.truenine.composeserver.depend.jackson.serializers -import java.time.Instant import java.time.LocalDate import java.time.ZoneOffset import tools.jackson.core.JsonGenerator diff --git a/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/LocalTimeTimestampSerializer.kt b/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/LocalTimeTimestampSerializer.kt index 5b5136436..d3bde7a69 100644 --- a/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/LocalTimeTimestampSerializer.kt +++ b/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/LocalTimeTimestampSerializer.kt @@ -1,9 +1,6 @@ package io.github.truenine.composeserver.depend.jackson.serializers -import java.time.Instant -import java.time.LocalDate -import java.time.LocalTime -import java.time.ZoneOffset +import java.time.* import tools.jackson.core.JsonGenerator import tools.jackson.core.JsonToken import tools.jackson.databind.SerializationContext diff --git a/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/OffsetDateTimeTimestampSerializer.kt b/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/OffsetDateTimeTimestampSerializer.kt index 75fa92c59..f07546d4d 100644 --- a/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/OffsetDateTimeTimestampSerializer.kt +++ b/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/OffsetDateTimeTimestampSerializer.kt @@ -1,6 +1,5 @@ package io.github.truenine.composeserver.depend.jackson.serializers -import java.time.Instant import java.time.OffsetDateTime import java.time.ZoneOffset import tools.jackson.core.JsonGenerator diff --git a/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/TimestampDeserializer.kt b/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/TimestampDeserializer.kt index 260aa358a..84f10cec4 100644 --- a/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/TimestampDeserializer.kt +++ b/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/TimestampDeserializer.kt @@ -1,12 +1,6 @@ package io.github.truenine.composeserver.depend.jackson.serializers -import java.time.Instant -import java.time.LocalDate -import java.time.LocalDateTime -import java.time.LocalTime -import java.time.OffsetDateTime -import java.time.ZoneOffset -import java.time.ZonedDateTime +import java.time.* import java.time.format.DateTimeFormatter import java.time.format.DateTimeParseException import tools.jackson.core.JsonParser diff --git a/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/TimestampSerializer.kt b/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/TimestampSerializer.kt index 9aa6a685b..0332c4378 100644 --- a/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/TimestampSerializer.kt +++ b/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/TimestampSerializer.kt @@ -1,12 +1,6 @@ package io.github.truenine.composeserver.depend.jackson.serializers -import java.time.Instant -import java.time.LocalDate -import java.time.LocalDateTime -import java.time.LocalTime -import java.time.OffsetDateTime -import java.time.ZoneOffset -import java.time.ZonedDateTime +import java.time.* import tools.jackson.core.JsonGenerator import tools.jackson.core.JsonToken import tools.jackson.databind.SerializationContext diff --git a/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/ZonedDateTimeTimestampSerializer.kt b/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/ZonedDateTimeTimestampSerializer.kt index aa8b27c0e..87809c379 100644 --- a/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/ZonedDateTimeTimestampSerializer.kt +++ b/depend/depend-jackson/src/main/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/ZonedDateTimeTimestampSerializer.kt @@ -1,6 +1,5 @@ package io.github.truenine.composeserver.depend.jackson.serializers -import java.time.Instant import java.time.ZoneOffset import java.time.ZonedDateTime import tools.jackson.core.JsonGenerator diff --git a/depend/depend-jackson/src/test/kotlin/io/github/truenine/composeserver/depend/jackson/DatetimeSerializeTest.kt b/depend/depend-jackson/src/test/kotlin/io/github/truenine/composeserver/depend/jackson/DatetimeSerializeTest.kt index deb6f5f9f..6f17e225c 100644 --- a/depend/depend-jackson/src/test/kotlin/io/github/truenine/composeserver/depend/jackson/DatetimeSerializeTest.kt +++ b/depend/depend-jackson/src/test/kotlin/io/github/truenine/composeserver/depend/jackson/DatetimeSerializeTest.kt @@ -1,10 +1,8 @@ package io.github.truenine.composeserver.depend.jackson -import io.github.truenine.composeserver.date -import io.github.truenine.composeserver.datetime +import io.github.truenine.composeserver.* import io.github.truenine.composeserver.depend.jackson.autoconfig.JacksonAutoConfiguration import io.github.truenine.composeserver.testtoolkit.log -import io.github.truenine.composeserver.time import jakarta.annotation.Resource import kotlin.test.Test import org.springframework.boot.test.context.SpringBootTest diff --git a/depend/depend-jackson/src/test/kotlin/io/github/truenine/composeserver/depend/jackson/DatetimeSerializerTest.kt b/depend/depend-jackson/src/test/kotlin/io/github/truenine/composeserver/depend/jackson/DatetimeSerializerTest.kt index 80d19d9a4..14c699dd9 100644 --- a/depend/depend-jackson/src/test/kotlin/io/github/truenine/composeserver/depend/jackson/DatetimeSerializerTest.kt +++ b/depend/depend-jackson/src/test/kotlin/io/github/truenine/composeserver/depend/jackson/DatetimeSerializerTest.kt @@ -3,9 +3,7 @@ package io.github.truenine.composeserver.depend.jackson import io.github.truenine.composeserver.datetime import io.github.truenine.composeserver.testtoolkit.log import jakarta.annotation.Resource -import kotlin.test.Test -import kotlin.test.assertEquals -import kotlin.test.assertNotNull +import kotlin.test.* import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Disabled import org.springframework.boot.test.context.SpringBootTest diff --git a/depend/depend-jackson/src/test/kotlin/io/github/truenine/composeserver/depend/jackson/JacksonSerializationConfigTest.kt b/depend/depend-jackson/src/test/kotlin/io/github/truenine/composeserver/depend/jackson/JacksonSerializationConfigTest.kt index 7528d7094..3415a417a 100644 --- a/depend/depend-jackson/src/test/kotlin/io/github/truenine/composeserver/depend/jackson/JacksonSerializationConfigTest.kt +++ b/depend/depend-jackson/src/test/kotlin/io/github/truenine/composeserver/depend/jackson/JacksonSerializationConfigTest.kt @@ -5,11 +5,7 @@ import io.github.truenine.composeserver.testtoolkit.log import jakarta.annotation.Resource import java.time.Instant import java.time.LocalDateTime -import kotlin.test.Test -import kotlin.test.assertEquals -import kotlin.test.assertFailsWith -import kotlin.test.assertNotNull -import kotlin.test.assertTrue +import kotlin.test.* import org.junit.jupiter.api.Nested import org.springframework.boot.test.context.SpringBootTest import tools.jackson.databind.ObjectMapper diff --git a/depend/depend-jackson/src/test/kotlin/io/github/truenine/composeserver/depend/jackson/JacksonSerializationTest.kt b/depend/depend-jackson/src/test/kotlin/io/github/truenine/composeserver/depend/jackson/JacksonSerializationTest.kt index ccc2760ac..64095383a 100644 --- a/depend/depend-jackson/src/test/kotlin/io/github/truenine/composeserver/depend/jackson/JacksonSerializationTest.kt +++ b/depend/depend-jackson/src/test/kotlin/io/github/truenine/composeserver/depend/jackson/JacksonSerializationTest.kt @@ -3,13 +3,8 @@ package io.github.truenine.composeserver.depend.jackson import io.github.truenine.composeserver.depend.jackson.autoconfig.JacksonAutoConfiguration import io.github.truenine.composeserver.testtoolkit.log import jakarta.annotation.Resource -import java.time.Instant -import java.time.LocalDateTime -import java.time.ZoneOffset -import kotlin.test.Test -import kotlin.test.assertEquals -import kotlin.test.assertNotNull -import kotlin.test.assertTrue +import java.time.* +import kotlin.test.* import org.junit.jupiter.api.Nested import org.springframework.boot.test.context.SpringBootTest import tools.jackson.databind.ObjectMapper diff --git a/depend/depend-jackson/src/test/kotlin/io/github/truenine/composeserver/depend/jackson/KotlinModuleCompatibilityTest.kt b/depend/depend-jackson/src/test/kotlin/io/github/truenine/composeserver/depend/jackson/KotlinModuleCompatibilityTest.kt index 7463939ca..99fb8e23a 100644 --- a/depend/depend-jackson/src/test/kotlin/io/github/truenine/composeserver/depend/jackson/KotlinModuleCompatibilityTest.kt +++ b/depend/depend-jackson/src/test/kotlin/io/github/truenine/composeserver/depend/jackson/KotlinModuleCompatibilityTest.kt @@ -5,9 +5,7 @@ import io.github.truenine.composeserver.testtoolkit.log import jakarta.annotation.Resource import java.time.LocalDateTime import java.time.ZonedDateTime -import kotlin.test.assertEquals -import kotlin.test.assertNotNull -import kotlin.test.assertTrue +import kotlin.test.* import org.junit.jupiter.api.Nested import org.junit.jupiter.api.Test import org.springframework.boot.test.context.SpringBootTest diff --git a/depend/depend-jackson/src/test/kotlin/io/github/truenine/composeserver/depend/jackson/TimestampSerializationTest.kt b/depend/depend-jackson/src/test/kotlin/io/github/truenine/composeserver/depend/jackson/TimestampSerializationTest.kt index d2b7803d7..670b41266 100644 --- a/depend/depend-jackson/src/test/kotlin/io/github/truenine/composeserver/depend/jackson/TimestampSerializationTest.kt +++ b/depend/depend-jackson/src/test/kotlin/io/github/truenine/composeserver/depend/jackson/TimestampSerializationTest.kt @@ -3,18 +3,8 @@ package io.github.truenine.composeserver.depend.jackson import io.github.truenine.composeserver.depend.jackson.autoconfig.JacksonAutoConfiguration import io.github.truenine.composeserver.testtoolkit.log import jakarta.annotation.Resource -import java.time.Instant -import java.time.LocalDate -import java.time.LocalDateTime -import java.time.LocalTime -import java.time.OffsetDateTime -import java.time.ZoneId -import java.time.ZoneOffset -import java.time.ZonedDateTime -import kotlin.test.Test -import kotlin.test.assertEquals -import kotlin.test.assertNotNull -import kotlin.test.assertTrue +import java.time.* +import kotlin.test.* import org.junit.jupiter.api.Nested import org.springframework.boot.test.context.SpringBootTest import tools.jackson.databind.ObjectMapper diff --git a/depend/depend-jackson/src/test/kotlin/io/github/truenine/composeserver/depend/jackson/TimestampSerializersTest.kt b/depend/depend-jackson/src/test/kotlin/io/github/truenine/composeserver/depend/jackson/TimestampSerializersTest.kt index bf68be51b..a577f73ff 100644 --- a/depend/depend-jackson/src/test/kotlin/io/github/truenine/composeserver/depend/jackson/TimestampSerializersTest.kt +++ b/depend/depend-jackson/src/test/kotlin/io/github/truenine/composeserver/depend/jackson/TimestampSerializersTest.kt @@ -1,31 +1,14 @@ package io.github.truenine.composeserver.depend.jackson -import io.github.truenine.composeserver.depend.jackson.serializers.InstantTimestampDeserializer -import io.github.truenine.composeserver.depend.jackson.serializers.InstantTimestampSerializer -import io.github.truenine.composeserver.depend.jackson.serializers.LocalDateTimeTimestampDeserializer -import io.github.truenine.composeserver.depend.jackson.serializers.LocalDateTimeTimestampSerializer -import io.github.truenine.composeserver.depend.jackson.serializers.OffsetDateTimeTimestampDeserializer -import io.github.truenine.composeserver.depend.jackson.serializers.OffsetDateTimeTimestampSerializer -import io.github.truenine.composeserver.depend.jackson.serializers.ZonedDateTimeTimestampDeserializer -import io.github.truenine.composeserver.depend.jackson.serializers.ZonedDateTimeTimestampSerializer +import io.github.truenine.composeserver.depend.jackson.serializers.* import io.github.truenine.composeserver.testtoolkit.log -import java.time.Instant -import java.time.LocalDateTime -import java.time.OffsetDateTime -import java.time.ZoneId -import java.time.ZoneOffset -import java.time.ZonedDateTime -import kotlin.test.Test -import kotlin.test.assertEquals -import kotlin.test.assertNotNull -import kotlin.test.assertTrue +import java.time.* +import kotlin.test.* import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Nested import tools.jackson.databind.ObjectMapper import tools.jackson.databind.json.JsonMapper -import tools.jackson.databind.module.SimpleDeserializers -import tools.jackson.databind.module.SimpleModule -import tools.jackson.databind.module.SimpleSerializers +import tools.jackson.databind.module.* /** * Timestamp serializer tests diff --git a/depend/depend-jackson/src/test/kotlin/io/github/truenine/composeserver/depend/jackson/autoconfig/JacksonPropertiesTest.kt b/depend/depend-jackson/src/test/kotlin/io/github/truenine/composeserver/depend/jackson/autoconfig/JacksonPropertiesTest.kt index a042c11e2..cee0ef7a1 100644 --- a/depend/depend-jackson/src/test/kotlin/io/github/truenine/composeserver/depend/jackson/autoconfig/JacksonPropertiesTest.kt +++ b/depend/depend-jackson/src/test/kotlin/io/github/truenine/composeserver/depend/jackson/autoconfig/JacksonPropertiesTest.kt @@ -1,9 +1,7 @@ package io.github.truenine.composeserver.depend.jackson.autoconfig import com.fasterxml.jackson.annotation.JsonInclude -import org.junit.jupiter.api.Assertions.assertEquals -import org.junit.jupiter.api.Assertions.assertFalse -import org.junit.jupiter.api.Assertions.assertTrue +import org.junit.jupiter.api.Assertions.* import org.junit.jupiter.api.Nested import org.junit.jupiter.api.Test diff --git a/depend/depend-jackson/src/test/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/ISO8601DeserializerTest.kt b/depend/depend-jackson/src/test/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/ISO8601DeserializerTest.kt index ac1929619..5af8ea019 100644 --- a/depend/depend-jackson/src/test/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/ISO8601DeserializerTest.kt +++ b/depend/depend-jackson/src/test/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/ISO8601DeserializerTest.kt @@ -1,10 +1,7 @@ package io.github.truenine.composeserver.depend.jackson.serializers import io.github.truenine.composeserver.toMillis -import java.time.LocalDate -import java.time.LocalDateTime -import java.time.LocalTime -import java.time.ZoneOffset +import java.time.* import kotlin.test.assertEquals import kotlin.test.assertNotNull import kotlin.test.assertNull diff --git a/depend/depend-jackson/src/test/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/ISO8601SerializerTest.kt b/depend/depend-jackson/src/test/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/ISO8601SerializerTest.kt index d6135f12c..c4806302e 100644 --- a/depend/depend-jackson/src/test/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/ISO8601SerializerTest.kt +++ b/depend/depend-jackson/src/test/kotlin/io/github/truenine/composeserver/depend/jackson/serializers/ISO8601SerializerTest.kt @@ -1,22 +1,15 @@ package io.github.truenine.composeserver.depend.jackson.serializers import io.github.truenine.composeserver.toMillis -import java.time.LocalDate -import java.time.LocalDateTime -import java.time.LocalTime -import java.time.ZoneOffset +import java.time.* import kotlin.test.assertEquals import kotlin.test.assertNotNull -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Nested -import org.junit.jupiter.api.Test +import org.junit.jupiter.api.* import org.junit.jupiter.params.ParameterizedTest import org.junit.jupiter.params.provider.ValueSource import tools.jackson.databind.ObjectMapper import tools.jackson.databind.json.JsonMapper -import tools.jackson.databind.module.SimpleDeserializers -import tools.jackson.databind.module.SimpleModule -import tools.jackson.databind.module.SimpleSerializers +import tools.jackson.databind.module.* import tools.jackson.module.kotlin.KotlinModule class ISO8601SerializerTest { diff --git a/depend/depend-paho/build.gradle.kts b/depend/depend-paho/build.gradle.kts index 306dd62ec..ccd0f3e57 100644 --- a/depend/depend-paho/build.gradle.kts +++ b/depend/depend-paho/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("buildlogic.kotlinspring-conventions") + id("buildlogic.kotlin-spring-boot-conventions") id("buildlogic.spotless-conventions") } diff --git a/depend/depend-servlet/build.gradle.kts b/depend/depend-servlet/build.gradle.kts index d70cfd033..561b069de 100644 --- a/depend/depend-servlet/build.gradle.kts +++ b/depend/depend-servlet/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("buildlogic.kotlinspring-conventions") + id("buildlogic.kotlin-spring-boot-conventions") id("buildlogic.spotless-conventions") } diff --git a/depend/depend-servlet/src/main/kotlin/io/github/truenine/composeserver/depend/servlet/annotations/HeadMapping.kt b/depend/depend-servlet/src/main/kotlin/io/github/truenine/composeserver/depend/servlet/annotations/HeadMapping.kt index ac042f4c9..bc67be595 100644 --- a/depend/depend-servlet/src/main/kotlin/io/github/truenine/composeserver/depend/servlet/annotations/HeadMapping.kt +++ b/depend/depend-servlet/src/main/kotlin/io/github/truenine/composeserver/depend/servlet/annotations/HeadMapping.kt @@ -2,9 +2,7 @@ package io.github.truenine.composeserver.depend.servlet.annotations import org.springframework.core.annotation.AliasFor import org.springframework.http.MediaType -import org.springframework.web.bind.annotation.Mapping -import org.springframework.web.bind.annotation.RequestMapping -import org.springframework.web.bind.annotation.RequestMethod +import org.springframework.web.bind.annotation.* /** * ## HTTP Method HEAD diff --git a/depend/depend-servlet/src/main/kotlin/io/github/truenine/composeserver/depend/servlet/autoconfig/CustomConverterConfiguration.kt b/depend/depend-servlet/src/main/kotlin/io/github/truenine/composeserver/depend/servlet/autoconfig/CustomConverterConfiguration.kt index e4fa2a498..d72ebad11 100644 --- a/depend/depend-servlet/src/main/kotlin/io/github/truenine/composeserver/depend/servlet/autoconfig/CustomConverterConfiguration.kt +++ b/depend/depend-servlet/src/main/kotlin/io/github/truenine/composeserver/depend/servlet/autoconfig/CustomConverterConfiguration.kt @@ -1,12 +1,8 @@ package io.github.truenine.composeserver.depend.servlet.autoconfig -import io.github.truenine.composeserver.depend.servlet.converters.JavaLocalDateConverter -import io.github.truenine.composeserver.depend.servlet.converters.JavaLocalDateTimeConverter -import io.github.truenine.composeserver.depend.servlet.converters.JavaLocalTimeConverter +import io.github.truenine.composeserver.depend.servlet.converters.* import io.github.truenine.composeserver.slf4j -import org.springframework.context.annotation.Bean -import org.springframework.context.annotation.Configuration -import org.springframework.context.annotation.Primary +import org.springframework.context.annotation.* private val log = slf4j(CustomConverterConfiguration::class) diff --git a/depend/depend-servlet/src/main/kotlin/io/github/truenine/composeserver/depend/servlet/converters/AnyEnumConverterFactory.kt b/depend/depend-servlet/src/main/kotlin/io/github/truenine/composeserver/depend/servlet/converters/AnyEnumConverterFactory.kt index a3d9c2f1d..6a01512a2 100644 --- a/depend/depend-servlet/src/main/kotlin/io/github/truenine/composeserver/depend/servlet/converters/AnyEnumConverterFactory.kt +++ b/depend/depend-servlet/src/main/kotlin/io/github/truenine/composeserver/depend/servlet/converters/AnyEnumConverterFactory.kt @@ -1,9 +1,6 @@ package io.github.truenine.composeserver.depend.servlet.converters -import io.github.truenine.composeserver.IAnyEnum -import io.github.truenine.composeserver.IIntEnum -import io.github.truenine.composeserver.IStringEnum -import io.github.truenine.composeserver.logger +import io.github.truenine.composeserver.* import java.util.concurrent.ConcurrentHashMap import org.springframework.core.convert.converter.Converter import org.springframework.core.convert.converter.ConverterFactory @@ -13,7 +10,7 @@ import org.springframework.core.convert.converter.ConverterFactory @Deprecated(message = "API burden is too high", level = DeprecationLevel.ERROR) open class AnyEnumConverterFactory : ConverterFactory { companion object { - @JvmStatic private val converters = ConcurrentHashMap, Converter>() + @JvmStatic private val converters = ConcurrentHashMap, Converter>() } @Suppress("UNCHECKED_CAST") @@ -27,7 +24,7 @@ open class AnyEnumConverterFactory : ConverterFactory { } as Converter } - private class AnyEnumConverter(targetClass: Class) : Converter { + private class AnyEnumConverter(targetClass: Class) : Converter { private val isString = IStringEnum::class.java.isAssignableFrom(targetClass) private val isInt = IIntEnum::class.java.isAssignableFrom(targetClass) private val valueMappingMap = targetClass.enumConstants.associateBy { it?.value } diff --git a/depend/depend-servlet/src/main/kotlin/io/github/truenine/composeserver/depend/servlet/converters/JavaLocalDateConverter.kt b/depend/depend-servlet/src/main/kotlin/io/github/truenine/composeserver/depend/servlet/converters/JavaLocalDateConverter.kt index 05d893bb0..e557056dc 100644 --- a/depend/depend-servlet/src/main/kotlin/io/github/truenine/composeserver/depend/servlet/converters/JavaLocalDateConverter.kt +++ b/depend/depend-servlet/src/main/kotlin/io/github/truenine/composeserver/depend/servlet/converters/JavaLocalDateConverter.kt @@ -7,7 +7,7 @@ import org.springframework.core.convert.converter.Converter private val log = slf4j(JavaLocalDateConverter::class) -open class JavaLocalDateConverter : Converter { +open class JavaLocalDateConverter : Converter { override fun convert(source: String): LocalDate? { log.trace("Converting date = {}", source) return source.toLongOrNull()?.toLocalDate() diff --git a/depend/depend-servlet/src/main/kotlin/io/github/truenine/composeserver/depend/servlet/converters/JavaLocalDateTimeConverter.kt b/depend/depend-servlet/src/main/kotlin/io/github/truenine/composeserver/depend/servlet/converters/JavaLocalDateTimeConverter.kt index 7a909768c..45d64d25b 100644 --- a/depend/depend-servlet/src/main/kotlin/io/github/truenine/composeserver/depend/servlet/converters/JavaLocalDateTimeConverter.kt +++ b/depend/depend-servlet/src/main/kotlin/io/github/truenine/composeserver/depend/servlet/converters/JavaLocalDateTimeConverter.kt @@ -7,7 +7,7 @@ import org.springframework.core.convert.converter.Converter private val log = slf4j(JavaLocalDateTimeConverter::class) -open class JavaLocalDateTimeConverter : Converter { +open class JavaLocalDateTimeConverter : Converter { override fun convert(source: String): LocalDateTime? { log.trace("Converting date-time = {}", source) return source.toLongOrNull()?.toLocalDateTime() diff --git a/depend/depend-servlet/src/main/kotlin/io/github/truenine/composeserver/depend/servlet/converters/JavaLocalTimeConverter.kt b/depend/depend-servlet/src/main/kotlin/io/github/truenine/composeserver/depend/servlet/converters/JavaLocalTimeConverter.kt index cdfdd4dc8..75aa92e3c 100644 --- a/depend/depend-servlet/src/main/kotlin/io/github/truenine/composeserver/depend/servlet/converters/JavaLocalTimeConverter.kt +++ b/depend/depend-servlet/src/main/kotlin/io/github/truenine/composeserver/depend/servlet/converters/JavaLocalTimeConverter.kt @@ -7,7 +7,7 @@ import org.springframework.core.convert.converter.Converter private val log = slf4j(JavaLocalTimeConverter::class) -open class JavaLocalTimeConverter : Converter { +open class JavaLocalTimeConverter : Converter { override fun convert(source: String): LocalTime? { log.trace("Converting time = {}", source) return source.toLongOrNull()?.toLocalTime() diff --git a/depend/depend-servlet/src/main/kotlin/io/github/truenine/composeserver/depend/servlet/converters/ToolsJacksonHttpMessageConverter.kt b/depend/depend-servlet/src/main/kotlin/io/github/truenine/composeserver/depend/servlet/converters/ToolsJacksonHttpMessageConverter.kt index 5a851f45b..087137e60 100644 --- a/depend/depend-servlet/src/main/kotlin/io/github/truenine/composeserver/depend/servlet/converters/ToolsJacksonHttpMessageConverter.kt +++ b/depend/depend-servlet/src/main/kotlin/io/github/truenine/composeserver/depend/servlet/converters/ToolsJacksonHttpMessageConverter.kt @@ -3,9 +3,7 @@ package io.github.truenine.composeserver.depend.servlet.converters import java.lang.reflect.Type import java.nio.charset.Charset import java.nio.charset.StandardCharsets -import org.springframework.http.HttpInputMessage -import org.springframework.http.HttpOutputMessage -import org.springframework.http.MediaType +import org.springframework.http.* import org.springframework.http.converter.AbstractHttpMessageConverter import org.springframework.http.converter.GenericHttpMessageConverter import tools.jackson.databind.ObjectMapper diff --git a/depend/depend-servlet/src/main/kotlin/io/github/truenine/composeserver/depend/servlet/filter/MDCFilter.kt b/depend/depend-servlet/src/main/kotlin/io/github/truenine/composeserver/depend/servlet/filter/MDCFilter.kt index dd352778e..60b0ab76a 100644 --- a/depend/depend-servlet/src/main/kotlin/io/github/truenine/composeserver/depend/servlet/filter/MDCFilter.kt +++ b/depend/depend-servlet/src/main/kotlin/io/github/truenine/composeserver/depend/servlet/filter/MDCFilter.kt @@ -1,10 +1,7 @@ package io.github.truenine.composeserver.depend.servlet.filter import io.github.truenine.composeserver.depend.servlet.remoteRequestIp -import jakarta.servlet.Filter -import jakarta.servlet.FilterChain -import jakarta.servlet.ServletRequest -import jakarta.servlet.ServletResponse +import jakarta.servlet.* import jakarta.servlet.http.HttpServletRequest import java.util.* import org.slf4j.MDC diff --git a/depend/depend-servlet/src/test/kotlin/io/github/truenine/composeserver/depend/servlet/HttpServletRequestFnsTest.kt b/depend/depend-servlet/src/test/kotlin/io/github/truenine/composeserver/depend/servlet/HttpServletRequestFnsTest.kt index ecaa62d7c..b28bdff96 100644 --- a/depend/depend-servlet/src/test/kotlin/io/github/truenine/composeserver/depend/servlet/HttpServletRequestFnsTest.kt +++ b/depend/depend-servlet/src/test/kotlin/io/github/truenine/composeserver/depend/servlet/HttpServletRequestFnsTest.kt @@ -1,10 +1,7 @@ package io.github.truenine.composeserver.depend.servlet import io.github.truenine.composeserver.consts.IHeaders -import kotlin.test.Test -import kotlin.test.assertEquals -import kotlin.test.assertNotNull -import kotlin.test.assertTrue +import kotlin.test.* import org.springframework.mock.web.MockHttpServletRequest class HttpServletRequestFnsTest { diff --git a/depend/depend-servlet/src/test/kotlin/io/github/truenine/composeserver/depend/servlet/HttpServletResponseFnsTest.kt b/depend/depend-servlet/src/test/kotlin/io/github/truenine/composeserver/depend/servlet/HttpServletResponseFnsTest.kt index c811da838..4c14bc51c 100644 --- a/depend/depend-servlet/src/test/kotlin/io/github/truenine/composeserver/depend/servlet/HttpServletResponseFnsTest.kt +++ b/depend/depend-servlet/src/test/kotlin/io/github/truenine/composeserver/depend/servlet/HttpServletResponseFnsTest.kt @@ -4,10 +4,7 @@ import io.github.truenine.composeserver.consts.IHeaders import io.github.truenine.composeserver.enums.MediaTypes import java.nio.charset.StandardCharsets import java.util.* -import kotlin.test.Test -import kotlin.test.assertEquals -import kotlin.test.assertNotNull -import kotlin.test.assertTrue +import kotlin.test.* import org.springframework.mock.web.MockHttpServletResponse class HttpServletResponseFnsTest { diff --git a/depend/depend-servlet/src/test/kotlin/io/github/truenine/composeserver/depend/servlet/IReadableAttachmentFnsTest.kt b/depend/depend-servlet/src/test/kotlin/io/github/truenine/composeserver/depend/servlet/IReadableAttachmentFnsTest.kt index 420eafe7e..840d9adc5 100644 --- a/depend/depend-servlet/src/test/kotlin/io/github/truenine/composeserver/depend/servlet/IReadableAttachmentFnsTest.kt +++ b/depend/depend-servlet/src/test/kotlin/io/github/truenine/composeserver/depend/servlet/IReadableAttachmentFnsTest.kt @@ -2,10 +2,7 @@ package io.github.truenine.composeserver.depend.servlet import io.github.truenine.composeserver.domain.IReadableAttachment import java.nio.charset.StandardCharsets -import kotlin.test.Test -import kotlin.test.assertEquals -import kotlin.test.assertFalse -import kotlin.test.assertTrue +import kotlin.test.* import org.springframework.mock.web.MockMultipartFile class IReadableAttachmentFnsTest { diff --git a/depend/depend-servlet/src/test/kotlin/io/github/truenine/composeserver/depend/servlet/PathVariableTest.kt b/depend/depend-servlet/src/test/kotlin/io/github/truenine/composeserver/depend/servlet/PathVariableTest.kt index e3eeb2d8f..7b0e70231 100644 --- a/depend/depend-servlet/src/test/kotlin/io/github/truenine/composeserver/depend/servlet/PathVariableTest.kt +++ b/depend/depend-servlet/src/test/kotlin/io/github/truenine/composeserver/depend/servlet/PathVariableTest.kt @@ -8,10 +8,7 @@ import org.springframework.context.annotation.Import import org.springframework.test.web.servlet.MockMvc import org.springframework.test.web.servlet.get import org.springframework.test.web.servlet.setup.MockMvcBuilders -import org.springframework.web.bind.annotation.GetMapping -import org.springframework.web.bind.annotation.PathVariable -import org.springframework.web.bind.annotation.RequestMapping -import org.springframework.web.bind.annotation.RestController +import org.springframework.web.bind.annotation.* import org.springframework.web.context.WebApplicationContext /** # Ensure the parsing nature of pathVariable */ diff --git a/depend/depend-servlet/src/test/kotlin/io/github/truenine/composeserver/depend/servlet/SpringResponseEntityFnsTest.kt b/depend/depend-servlet/src/test/kotlin/io/github/truenine/composeserver/depend/servlet/SpringResponseEntityFnsTest.kt index 6af71794c..36647f76d 100644 --- a/depend/depend-servlet/src/test/kotlin/io/github/truenine/composeserver/depend/servlet/SpringResponseEntityFnsTest.kt +++ b/depend/depend-servlet/src/test/kotlin/io/github/truenine/composeserver/depend/servlet/SpringResponseEntityFnsTest.kt @@ -1,10 +1,7 @@ package io.github.truenine.composeserver.depend.servlet import java.time.LocalDateTime -import kotlin.test.Test -import kotlin.test.assertEquals -import kotlin.test.assertNotNull -import kotlin.test.assertTrue +import kotlin.test.* import org.springframework.http.MediaType class SpringResponseEntityFnsTest { diff --git a/depend/depend-servlet/src/test/kotlin/io/github/truenine/composeserver/depend/servlet/controller/TestGetParameterController.kt b/depend/depend-servlet/src/test/kotlin/io/github/truenine/composeserver/depend/servlet/controller/TestGetParameterController.kt index bb60bcd37..f3ef85e72 100644 --- a/depend/depend-servlet/src/test/kotlin/io/github/truenine/composeserver/depend/servlet/controller/TestGetParameterController.kt +++ b/depend/depend-servlet/src/test/kotlin/io/github/truenine/composeserver/depend/servlet/controller/TestGetParameterController.kt @@ -2,10 +2,7 @@ package io.github.truenine.composeserver.depend.servlet.controller import io.github.truenine.composeserver.int import io.github.truenine.composeserver.string -import org.springframework.web.bind.annotation.GetMapping -import org.springframework.web.bind.annotation.RequestMapping -import org.springframework.web.bind.annotation.RequestParam -import org.springframework.web.bind.annotation.RestController +import org.springframework.web.bind.annotation.* @RestController @RequestMapping("test/getParameter") diff --git a/depend/depend-servlet/src/test/kotlin/io/github/truenine/composeserver/depend/servlet/parameter/GetParameterTest.kt b/depend/depend-servlet/src/test/kotlin/io/github/truenine/composeserver/depend/servlet/parameter/GetParameterTest.kt index 094827bd4..0d29e7205 100644 --- a/depend/depend-servlet/src/test/kotlin/io/github/truenine/composeserver/depend/servlet/parameter/GetParameterTest.kt +++ b/depend/depend-servlet/src/test/kotlin/io/github/truenine/composeserver/depend/servlet/parameter/GetParameterTest.kt @@ -2,12 +2,7 @@ package io.github.truenine.composeserver.depend.servlet.parameter import io.github.truenine.composeserver.depend.servlet.TestApplication import jakarta.annotation.Resource -import kotlin.test.BeforeTest -import kotlin.test.Test -import kotlin.test.assertEquals -import kotlin.test.assertFails -import kotlin.test.assertIs -import kotlin.test.assertNotNull +import kotlin.test.* import org.apache.catalina.util.URLEncoder import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.context.SpringBootTest @@ -17,10 +12,7 @@ import org.springframework.test.web.servlet.MockMvc import org.springframework.test.web.servlet.get import org.springframework.test.web.servlet.setup.MockMvcBuilders import org.springframework.web.bind.MissingServletRequestParameterException -import org.springframework.web.bind.annotation.GetMapping -import org.springframework.web.bind.annotation.RequestMapping -import org.springframework.web.bind.annotation.RequestParam -import org.springframework.web.bind.annotation.RestController +import org.springframework.web.bind.annotation.* import org.springframework.web.context.WebApplicationContext import tools.jackson.databind.ObjectMapper diff --git a/depend/depend-servlet/src/test/kotlin/io/github/truenine/composeserver/depend/servlet/parameter/UploadFileParamAssertTest.kt b/depend/depend-servlet/src/test/kotlin/io/github/truenine/composeserver/depend/servlet/parameter/UploadFileParamAssertTest.kt index f4d8f4ca8..2e03fe7c9 100644 --- a/depend/depend-servlet/src/test/kotlin/io/github/truenine/composeserver/depend/servlet/parameter/UploadFileParamAssertTest.kt +++ b/depend/depend-servlet/src/test/kotlin/io/github/truenine/composeserver/depend/servlet/parameter/UploadFileParamAssertTest.kt @@ -14,10 +14,7 @@ import org.springframework.mock.web.MockPart import org.springframework.test.web.servlet.MockMvc import org.springframework.test.web.servlet.multipart import org.springframework.test.web.servlet.setup.MockMvcBuilders -import org.springframework.web.bind.annotation.PostMapping -import org.springframework.web.bind.annotation.RequestMapping -import org.springframework.web.bind.annotation.RequestPart -import org.springframework.web.bind.annotation.RestController +import org.springframework.web.bind.annotation.* import org.springframework.web.context.WebApplicationContext import org.springframework.web.multipart.MultipartFile diff --git a/depend/depend-servlet/src/test/kotlin/io/github/truenine/composeserver/depend/servlet/resolvers/IPageParamLikeArgumentResolverTest.kt b/depend/depend-servlet/src/test/kotlin/io/github/truenine/composeserver/depend/servlet/resolvers/IPageParamLikeArgumentResolverTest.kt index eb79aa351..9d34400d3 100644 --- a/depend/depend-servlet/src/test/kotlin/io/github/truenine/composeserver/depend/servlet/resolvers/IPageParamLikeArgumentResolverTest.kt +++ b/depend/depend-servlet/src/test/kotlin/io/github/truenine/composeserver/depend/servlet/resolvers/IPageParamLikeArgumentResolverTest.kt @@ -3,13 +3,8 @@ package io.github.truenine.composeserver.depend.servlet.resolvers import io.github.truenine.composeserver.Pq import io.github.truenine.composeserver.domain.IPageParam import io.github.truenine.composeserver.domain.IPageParamLike -import io.mockk.every -import io.mockk.mockk -import io.mockk.verify -import kotlin.test.Test -import kotlin.test.assertEquals -import kotlin.test.assertFalse -import kotlin.test.assertTrue +import io.mockk.* +import kotlin.test.* import org.junit.jupiter.api.BeforeEach import org.springframework.core.MethodParameter import org.springframework.test.web.servlet.MockMvc diff --git a/depend/depend-springdoc-openapi/build.gradle.kts b/depend/depend-springdoc-openapi/build.gradle.kts index a421f94a5..30064de46 100644 --- a/depend/depend-springdoc-openapi/build.gradle.kts +++ b/depend/depend-springdoc-openapi/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("buildlogic.kotlinspring-conventions") + id("buildlogic.kotlin-spring-boot-conventions") id("buildlogic.spotless-conventions") } diff --git a/depend/depend-springdoc-openapi/src/main/kotlin/io/github/truenine/composeserver/depend/springdocopenapi/autoconfig/OpenApiDocConfig.kt b/depend/depend-springdoc-openapi/src/main/kotlin/io/github/truenine/composeserver/depend/springdocopenapi/autoconfig/OpenApiDocConfig.kt index 44ad937ea..28992bcd1 100644 --- a/depend/depend-springdoc-openapi/src/main/kotlin/io/github/truenine/composeserver/depend/springdocopenapi/autoconfig/OpenApiDocConfig.kt +++ b/depend/depend-springdoc-openapi/src/main/kotlin/io/github/truenine/composeserver/depend/springdocopenapi/autoconfig/OpenApiDocConfig.kt @@ -10,9 +10,7 @@ import io.swagger.v3.oas.models.media.Schema import io.swagger.v3.oas.models.media.StringSchema import io.swagger.v3.oas.models.parameters.HeaderParameter import jakarta.annotation.PostConstruct -import java.time.LocalDate -import java.time.LocalDateTime -import java.time.LocalTime +import java.time.* import java.util.* import org.springdoc.core.models.GroupedOpenApi import org.springdoc.core.utils.SpringDocUtils diff --git a/depend/depend-springdoc-openapi/src/main/kotlin/io/github/truenine/composeserver/depend/springdocopenapi/properties/SpringdocOpenApiProperties.kt b/depend/depend-springdoc-openapi/src/main/kotlin/io/github/truenine/composeserver/depend/springdocopenapi/properties/SpringdocOpenApiProperties.kt index ba54468fb..658bb241c 100644 --- a/depend/depend-springdoc-openapi/src/main/kotlin/io/github/truenine/composeserver/depend/springdocopenapi/properties/SpringdocOpenApiProperties.kt +++ b/depend/depend-springdoc-openapi/src/main/kotlin/io/github/truenine/composeserver/depend/springdocopenapi/properties/SpringdocOpenApiProperties.kt @@ -1,9 +1,7 @@ package io.github.truenine.composeserver.depend.springdocopenapi.properties import io.github.truenine.composeserver.consts.SpringBootConfigurationPropertiesPrefixes -import org.springframework.boot.context.properties.ConfigurationProperties -import org.springframework.boot.context.properties.ConfigurationPropertiesBinding -import org.springframework.boot.context.properties.NestedConfigurationProperty +import org.springframework.boot.context.properties.* @ConfigurationPropertiesBinding @ConfigurationProperties(prefix = SpringBootConfigurationPropertiesPrefixes.DEPEND_SPRINGDOC_OPENAPI, ignoreUnknownFields = true) diff --git a/depend/depend-springdoc-openapi/src/test/kotlin/io/github/truenine/composeserver/depend/springdocopenapi/ApiEndpointsTest.kt b/depend/depend-springdoc-openapi/src/test/kotlin/io/github/truenine/composeserver/depend/springdocopenapi/ApiEndpointsTest.kt index a3dc3bf24..b6ba94248 100644 --- a/depend/depend-springdoc-openapi/src/test/kotlin/io/github/truenine/composeserver/depend/springdocopenapi/ApiEndpointsTest.kt +++ b/depend/depend-springdoc-openapi/src/test/kotlin/io/github/truenine/composeserver/depend/springdocopenapi/ApiEndpointsTest.kt @@ -1,8 +1,6 @@ package io.github.truenine.composeserver.depend.springdocopenapi -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.DisplayName -import org.junit.jupiter.api.Test +import org.junit.jupiter.api.* import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.context.SpringBootTest import org.springframework.http.MediaType diff --git a/depend/depend-springdoc-openapi/src/test/kotlin/io/github/truenine/composeserver/depend/springdocopenapi/BeanSetupTest.kt b/depend/depend-springdoc-openapi/src/test/kotlin/io/github/truenine/composeserver/depend/springdocopenapi/BeanSetupTest.kt index 86b836cc8..f6b700a1c 100644 --- a/depend/depend-springdoc-openapi/src/test/kotlin/io/github/truenine/composeserver/depend/springdocopenapi/BeanSetupTest.kt +++ b/depend/depend-springdoc-openapi/src/test/kotlin/io/github/truenine/composeserver/depend/springdocopenapi/BeanSetupTest.kt @@ -1,9 +1,7 @@ package io.github.truenine.composeserver.depend.springdocopenapi import io.github.truenine.composeserver.testtoolkit.log -import kotlin.test.BeforeTest -import kotlin.test.Test -import kotlin.test.assertNotNull +import kotlin.test.* import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.context.SpringBootTest import org.springframework.http.MediaType diff --git a/depend/depend-springdoc-openapi/src/test/kotlin/io/github/truenine/composeserver/depend/springdocopenapi/OpenApiConfigTest.kt b/depend/depend-springdoc-openapi/src/test/kotlin/io/github/truenine/composeserver/depend/springdocopenapi/OpenApiConfigTest.kt index 329f4971c..7f1c81fec 100644 --- a/depend/depend-springdoc-openapi/src/test/kotlin/io/github/truenine/composeserver/depend/springdocopenapi/OpenApiConfigTest.kt +++ b/depend/depend-springdoc-openapi/src/test/kotlin/io/github/truenine/composeserver/depend/springdocopenapi/OpenApiConfigTest.kt @@ -4,9 +4,7 @@ import io.github.truenine.composeserver.depend.springdocopenapi.autoconfig.OpenA import io.github.truenine.composeserver.depend.springdocopenapi.properties.SpringdocOpenApiProperties import io.swagger.v3.oas.models.OpenAPI import jakarta.annotation.Resource -import kotlin.test.assertEquals -import kotlin.test.assertNotNull -import kotlin.test.assertTrue +import kotlin.test.* import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.Test import org.springdoc.core.models.GroupedOpenApi diff --git a/depend/depend-springdoc-openapi/src/test/kotlin/io/github/truenine/composeserver/depend/springdocopenapi/PropertiesTest.kt b/depend/depend-springdoc-openapi/src/test/kotlin/io/github/truenine/composeserver/depend/springdocopenapi/PropertiesTest.kt index 19046ac59..70570a64d 100644 --- a/depend/depend-springdoc-openapi/src/test/kotlin/io/github/truenine/composeserver/depend/springdocopenapi/PropertiesTest.kt +++ b/depend/depend-springdoc-openapi/src/test/kotlin/io/github/truenine/composeserver/depend/springdocopenapi/PropertiesTest.kt @@ -1,13 +1,8 @@ package io.github.truenine.composeserver.depend.springdocopenapi -import io.github.truenine.composeserver.depend.springdocopenapi.properties.JwtHeaderInfoProperties -import io.github.truenine.composeserver.depend.springdocopenapi.properties.SpringdocOpenApiProperties -import io.github.truenine.composeserver.depend.springdocopenapi.properties.SwaggerDescInfo +import io.github.truenine.composeserver.depend.springdocopenapi.properties.* import jakarta.annotation.Resource -import kotlin.test.assertEquals -import kotlin.test.assertFalse -import kotlin.test.assertNotNull -import kotlin.test.assertTrue +import kotlin.test.* import org.junit.jupiter.api.Test import org.springframework.boot.test.context.SpringBootTest import org.springframework.test.context.TestPropertySource diff --git a/depend/depend-springdoc-openapi/src/test/kotlin/io/github/truenine/composeserver/depend/springdocopenapi/TestApplication.kt b/depend/depend-springdoc-openapi/src/test/kotlin/io/github/truenine/composeserver/depend/springdocopenapi/TestApplication.kt index 944c16254..7eb83b8d2 100644 --- a/depend/depend-springdoc-openapi/src/test/kotlin/io/github/truenine/composeserver/depend/springdocopenapi/TestApplication.kt +++ b/depend/depend-springdoc-openapi/src/test/kotlin/io/github/truenine/composeserver/depend/springdocopenapi/TestApplication.kt @@ -3,9 +3,7 @@ package io.github.truenine.composeserver.depend.springdocopenapi import io.github.truenine.composeserver.depend.springdocopenapi.autoconfig.AutoConfigEntrance import org.springframework.boot.autoconfigure.SpringBootApplication import org.springframework.context.annotation.Import -import org.springframework.web.bind.annotation.GetMapping -import org.springframework.web.bind.annotation.RequestMapping -import org.springframework.web.bind.annotation.RestController +import org.springframework.web.bind.annotation.* @SpringBootApplication @Import(AutoConfigEntrance::class) class TestApplication diff --git a/depend/depend-xxl-job/build.gradle.kts b/depend/depend-xxl-job/build.gradle.kts index 0abbeea54..8db28e191 100644 --- a/depend/depend-xxl-job/build.gradle.kts +++ b/depend/depend-xxl-job/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("buildlogic.kotlinspring-conventions") + id("buildlogic.kotlin-spring-boot-conventions") id("buildlogic.spotless-conventions") } diff --git a/docsite/build.gradle.kts b/docsite/build.gradle.kts index 2447e5590..ff7168805 100644 --- a/docsite/build.gradle.kts +++ b/docsite/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("buildlogic.kotlinspring-test-conventions") + id("buildlogic.kotlin-spring-boot-test-conventions") id("buildlogic.spotless-conventions") alias(libs.plugins.org.springframework.boot) alias(libs.plugins.com.google.devtools.ksp) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b5bfa9fad..61d204c0f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,63 +1,64 @@ [versions] -ch-qos-logback = "1.5.21" +ch-qos-logback = "1.5.23" cn-dev33-sa-token = "1.44.0" -cn-hutool = "5.8.41" +cn-hutool = "5.8.42" com-alibaba-cloud = "2023.0.3.3" -com-baomidou-mybatis-plus = "3.5.14" +com-baomidou-mybatis-plus = "3.5.15" com-diffplug-spotless = "8.1.0" com-fasterxml-jackson2 = "2.20.1" com-fasterxml-jackson3 = "3.0-rc5" -com-flywaydb-flyway = "11.17.1" +com-flywaydb-flyway = "11.20.0" com-github-tschuchortdev-kotlin-compile-testing = "1.6.0" -com-google-devtools-ksp = "2.3.3" +com-google-devtools-ksp = "2.3.4" com-mapstruct = "1.6.3" com-querydsl = "5.1.0" com-squareup-kotlinpoet = "2.2.0" com-squareup-okio = "3.16.4" com-vanniktech-maven-publish = "0.35.0" -com-xuxueli-xxl-job = "3.2.0" -com-yomahub-liteflow = "2.15.1" +com-xuxueli-xxl-job = "3.3.1" +com-yomahub-liteflow = "2.15.2" dev-langchain4j-community = "1.1.0-beta7" group = "io.github.truenine" intellij-platform = "2025.2.1" intellij-platform-ide = "243" intellij-platform-plugin-java = "21" -io-netty = "4.2.7.Final" +io-netty = "4.2.9.Final" java = "17" net-sf-sevenzipjbinding = "16.02-2.01" nl-littlerobots-version-catalog-updat-gradle-plugin = "1.0.1" -org-apache-commons-exec = "1.5.0" -org-apache-groovy = "5.0.2" -org-apache-logging-log4j = "2.25.2" +org-apache-commons-exec = "1.6.0" +org-apache-groovy = "5.0.3" +org-apache-logging-log4j = "2.25.3" org-assertj = "4.0.0-M1" org-awaitility = "4.3.0" -org-babyfish-jimmer = "0.9.116" +org-babyfish-jimmer = "0.9.119" org-gradle = "9.2.1" -tools-jackson = "3.0.2" -org-hibernate-orm = "7.2.0.CR2" +tools-jackson = "3.0.3" +org-hibernate-orm = "7.2.0.Final" org-jetbrains-dokka = "2.1.0" -org-jetbrains-intellij-platform = "2.10.4" -org-jetbrains-kotlin = "2.3.0-RC" +org-jetbrains-intellij-platform = "2.10.5" +org-jetbrains-kotlin = "2.3.0" org-jetbrains-kotlinx-coroutines = "1.10.2" org-jetbrains-kotlinx-datetime = "0.7.1-0.6.x-compat" -org-jetbrains-kotlinx-io = "0.8.1" -org-jetbrains-kotlinx-serialization = "1.9.0" +org-jetbrains-kotlinx-io = "0.8.2" +org-jetbrains-kotlinx-serialization = "1.10.0-RC" org-junit-jupiter = "6.1.0-M1" +io-kotest = "6.0.7" org-liquibase = "5.0.1" org-slf4j = "2.1.0-alpha1" -org-springframework-ai = "1.1.0" -org-springframework-batch = "6.0.0" -org-springframework-boot = "4.0.0" +org-springframework-ai = "2.0.0-M1" +org-springframework-batch = "6.0.1" +org-springframework-boot = "4.0.1" org-springframework-cloud = "2025.0.0" -org-springframework-data = "4.0.0" -org-springframework-framework = "7.0.1" -org-springframework-integration = "7.0.0" -org-springframework-modulith = "2.0.0" -org-springframework-security = "7.0.0" -org-testcontainers = "1.21.3" +org-springframework-data = "4.0.1" +org-springframework-framework = "7.0.2" +org-springframework-integration = "7.0.1" +org-springframework-modulith = "2.0.1" +org-springframework-security = "7.0.2" +org-testcontainers = "1.21.4" org-testng = "7.11.0" -project = "0.0.49" -com-netflix-dgs-codegen = "8.2.1" +project = "2025.12.26" +com-netflix-dgs-codegen = "8.3.0" [libraries] com-netflix-dgs-codegen-com-netflix-dgs-codegen-gradle-plugin = { module = "com.netflix.dgs.codegen:com.netflix.dgs.codegen.gradle.plugin", version.ref = "com-netflix-dgs-codegen" } @@ -75,7 +76,7 @@ cn-hutool-hutool-db = { module = "cn.hutool:hutool-db", version.ref = "cn-hutool cn-idev-excel-fastexcel = "cn.idev.excel:fastexcel:1.3.0" com-alibaba-cloud-spring-cloud-alibaba-dependencies = { module = "com.alibaba.cloud:spring-cloud-alibaba-dependencies", version.ref = "com-alibaba-cloud" } com-alibaba-easyexcel = "com.alibaba:easyexcel:4.0.3" -com-aliyun-oss-aliyun-sdk-oss = "com.aliyun.oss:aliyun-sdk-oss:3.18.3" +com-aliyun-oss-aliyun-sdk-oss = "com.aliyun.oss:aliyun-sdk-oss:3.18.4" com-auth0-java-jwt = "com.auth0:java-jwt:4.5.0" tools-jackson-core-jackson-databind = { module = "tools.jackson.core:jackson-databind", version.ref = "tools-jackson" } org-jspecify-jspecify = "org.jspecify:jspecify:1.0.0" @@ -102,7 +103,7 @@ com-github-junrar-junrar = "com.github.junrar:junrar:7.5.7" com-github-magese-ik-analyzer = "com.github.magese:ik-analyzer:8.5.0" com-github-tschuchortdev-kotlin-compile-testing = { module = "com.github.tschuchortdev:kotlin-compile-testing", version.ref = "com-github-tschuchortdev-kotlin-compile-testing" } com-github-tschuchortdev-kotlin-compile-testing-ksp = { module = "com.github.tschuchortdev:kotlin-compile-testing-ksp", version.ref = "com-github-tschuchortdev-kotlin-compile-testing" } -com-github-ulisesbocchio-jasypt-spring-boot-starter = "com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.5" +com-github-ulisesbocchio-jasypt-spring-boot-starter = "com.github.ulisesbocchio:jasypt-spring-boot-starter:4.0.3" com-github-wechatpay-apiv3-wechatpay-java = "com.github.wechatpay-apiv3:wechatpay-java:0.2.17" com-github-xiaoymin-knife4j-openapi3-jakarta-spring-boot-starter = "com.github.xiaoymin:knife4j-openapi3-jakarta-spring-boot-starter:4.5.0" com-github-xiaoymin-knife4j-spring-boot-starter = "com.github.xiaoymin:knife4j-spring-boot-starter:3.0.3" @@ -114,7 +115,7 @@ com-h2database-h2 = "com.h2database:h2:2.4.240" com-hikvision-ga-artemis-http-client = "com.hikvision.ga:artemis-http-client:1.1.3" com-hikvision-ga-opensource = "com.hikvision.ga:opensource:0.0.3" com-huaweicloud-esdk-obs-java = "com.huaweicloud:esdk-obs-java:3.25.10" -com-microsoft-playwright-playwright = "com.microsoft.playwright:playwright:1.56.0" +com-microsoft-playwright-playwright = "com.microsoft.playwright:playwright:1.57.0" com-mysql-mysql-connector-j = "com.mysql:mysql-connector-j:9.5.0" com-querydsl-querydsl-apt = { module = "com.querydsl:querydsl-apt", version.ref = "com-querydsl" } com-querydsl-querydsl-core = { module = "com.querydsl:querydsl-core", version.ref = "com-querydsl" } @@ -128,16 +129,16 @@ com-squareup-okio-okio-jvm = { module = "com.squareup.okio:okio-jvm", version.re com-squareup-retrofit2-retrofit = "com.squareup.retrofit2:retrofit:3.0.0" com-tencentcloudapi-tencentcloud-sdk-java-sms = "com.tencentcloudapi:tencentcloud-sdk-java-sms:3.1.1357" com-vanniktech-maven-publish-com-vanniktech-maven-publish-gradle-plugin = { module = "com.vanniktech.maven.publish:com.vanniktech.maven.publish.gradle.plugin", version.ref = "com-vanniktech-maven-publish" } -com-volcengine-ve-tos-java-sdk = "com.volcengine:ve-tos-java-sdk:2.9.5" +com-volcengine-ve-tos-java-sdk = "com.volcengine:ve-tos-java-sdk:2.9.8" com-xuxueli-xxl-job-core = { module = "com.xuxueli:xxl-job-core", version.ref = "com-xuxueli-xxl-job" } com-yomahub-liteflow-spring-boot-starter = { module = "com.yomahub:liteflow-spring-boot-starter", version.ref = "com-yomahub-liteflow" } -dev-langchain4j-langchain4j = "dev.langchain4j:langchain4j:1.8.0" +dev-langchain4j-langchain4j = "dev.langchain4j:langchain4j:1.10.0" dev-langchain4j-langchain4j-bom = "dev.langchain4j:langchain4j-bom:1.2.0" dev-langchain4j-langchain4j-community-bom = { module = "dev.langchain4j:langchain4j-community-bom", version.ref = "dev-langchain4j-community" } dev-langchain4j-langchain4j-hugging-face = { module = "dev.langchain4j:langchain4j-hugging-face", version.ref = "dev-langchain4j-community" } dev-langchain4j-langchain4j-kotlin = { module = "dev.langchain4j:langchain4j-kotlin", version.ref = "dev-langchain4j-community" } dev-langchain4j-langchain4j-mcp = { module = "dev.langchain4j:langchain4j-mcp", version.ref = "dev-langchain4j-community" } -dev-langchain4j-langchain4j-ollama = "dev.langchain4j:langchain4j-ollama:1.8.0" +dev-langchain4j-langchain4j-ollama = "dev.langchain4j:langchain4j-ollama:1.10.0" dev-langchain4j-langchain4j-ollama-spring-boot-starter = { module = "dev.langchain4j:langchain4j-ollama-spring-boot-starter", version.ref = "dev-langchain4j-community" } dev-langchain4j-langchain4j-pgvector = { module = "dev.langchain4j:langchain4j-pgvector", version.ref = "dev-langchain4j-community" } dev-langchain4j-langchain4j-reactor = { module = "dev.langchain4j:langchain4j-reactor", version.ref = "dev-langchain4j-community" } @@ -184,30 +185,33 @@ io-github-truenine-composeserver-testtoolkit-springmvc = { module = "io.github.t io-github-truenine-composeserver-testtoolkit-testcontainers = { module = "io.github.truenine:composeserver-testtoolkit-testcontainers", version.ref = "project" } io-netty-netty-bom = { module = "io.netty:netty-bom", version.ref = "io-netty" } io-jsonwebtoken-jjwt-api = "io.jsonwebtoken:jjwt-api:0.13.0" +io-kotest-kotest-runner-junit5 = { module = "io.kotest:kotest-runner-junit5", version.ref = "io-kotest" } +io-kotest-kotest-assertions-core = { module = "io.kotest:kotest-assertions-core", version.ref = "io-kotest" } +io-kotest-kotest-property = { module = "io.kotest:kotest-property", version.ref = "io-kotest" } io-minio-minio = "io.minio:minio:8.6.0" -io-mockk-mockk = "io.mockk:mockk:1.14.6" +io-mockk-mockk = "io.mockk:mockk:1.14.7" io-netty-netty-handler = { module = "io.netty:netty-handler", version.ref = "io-netty" } io-projectreactor-kotlin-reactor-kotlin-extensions = "io.projectreactor.kotlin:reactor-kotlin-extensions:1.3.0" -io-projectreactor-reactor-test = "io.projectreactor:reactor-test:3.8.0" +io-projectreactor-reactor-test = "io.projectreactor:reactor-test:3.8.1" io-spring-gradle-dependency-management-plugin = "io.spring.gradle:dependency-management-plugin:1.1.7" -io-swagger-core-v3-swagger-annotations-jakarta = "io.swagger.core.v3:swagger-annotations-jakarta:2.2.40" +io-swagger-core-v3-swagger-annotations-jakarta = "io.swagger.core.v3:swagger-annotations-jakarta:2.2.41" jakarta-annotation-jakarta-annotation-api = "jakarta.annotation:jakarta.annotation-api:3.0.0" jakarta-inject-jakarta-inject-api = "jakarta.inject:jakarta.inject-api:2.0.1" jakarta-persistence-jakarta-persistence-api = "jakarta.persistence:jakarta.persistence-api:3.2.0" jakarta-servlet-jakarta-servlet-api = "jakarta.servlet:jakarta.servlet-api:6.1.0" jakarta-validation-jakarta-validation-api = "jakarta.validation:jakarta.validation-api:4.0.0-M1" mysql-mysql-connector-java = "mysql:mysql-connector-java:8.0.33" -net-bytebuddy-byte-buddy = "net.bytebuddy:byte-buddy:1.18.1" +net-bytebuddy-byte-buddy = "net.bytebuddy:byte-buddy:1.18.3" net-sf-dozer-dozer = "net.sf.dozer:dozer:5.5.1" net-sf-sevenzipjbinding-sevenzipjbinding = { module = "net.sf.sevenzipjbinding:sevenzipjbinding", version.ref = "net-sf-sevenzipjbinding" } net-sf-sevenzipjbinding-sevenzipjbinding-all-platforms = { module = "net.sf.sevenzipjbinding:sevenzipjbinding-all-platforms", version.ref = "net-sf-sevenzipjbinding" } net-sf-supercsv-super-csv = "net.sf.supercsv:super-csv:2.4.0" nl-littlerobots-version-catalog-update-nl-littlerobots-version-catalog-update-gradle-plugin = { module = "nl.littlerobots.version-catalog-update:nl.littlerobots.version-catalog-update.gradle.plugin", version.ref = "nl-littlerobots-version-catalog-updat-gradle-plugin" } -ognl-ognl = "ognl:ognl:3.4.8" +ognl-ognl = "ognl:ognl:3.4.9" org-apache-commons-commons-compress = "org.apache.commons:commons-compress:1.28.0" org-apache-commons-commons-csv = "org.apache.commons:commons-csv:1.14.1" org-apache-commons-commons-exec = { module = "org.apache.commons:commons-exec", version.ref = "org-apache-commons-exec" } -org-apache-commons-commons-pool2 = "org.apache.commons:commons-pool2:2.12.1" +org-apache-commons-commons-pool2 = "org.apache.commons:commons-pool2:2.13.0" org-apache-groovy = { module = "org.apache.groovy:groovy", version.ref = "org-apache-groovy" } org-apache-groovy-bom = { module = "org.apache.groovy:groovy-bom", version.ref = "org-apache-groovy" } org-apache-logging-log4j-log4j-api = { module = "org.apache.logging.log4j:log4j-api", version.ref = "org-apache-logging-log4j" } @@ -223,10 +227,10 @@ org-babyfish-jimmer-jimmer-mapstruct-apt = { module = "org.babyfish.jimmer:jimme org-babyfish-jimmer-jimmer-spring-boot-starter = { module = "org.babyfish.jimmer:jimmer-spring-boot-starter", version.ref = "org-babyfish-jimmer" } org-babyfish-jimmer-jimmer-sql = { module = "org.babyfish.jimmer:jimmer-sql", version.ref = "org-babyfish-jimmer" } org-babyfish-jimmer-jimmer-sql-kotlin = { module = "org.babyfish.jimmer:jimmer-sql-kotlin", version.ref = "org-babyfish-jimmer" } -org-bouncycastle-bcprov-jdk18on = "org.bouncycastle:bcprov-jdk18on:1.82" -org-casbin-casbin-spring-boot-starter = "org.casbin:casbin-spring-boot-starter:1.9.0" +org-bouncycastle-bcprov-jdk18on = "org.bouncycastle:bcprov-jdk18on:1.83" +org-casbin-casbin-spring-boot-starter = "org.casbin:casbin-spring-boot-starter:2.0.0" org-casbin-casbin-spring-security-starter = "org.casbin:casbin-spring-security-starter:1.1.0" -org-casbin-jcasbin = "org.casbin:jcasbin:1.85.1" +org-casbin-jcasbin = "org.casbin:jcasbin:1.86.0" org-eclipse-paho-client-mqttv3 = "org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.5" org-flywaydb-flyway-core = { module = "org.flywaydb:flyway-core", version.ref = "com-flywaydb-flyway" } org-flywaydb-flyway-database-postgresql = { module = "org.flywaydb:flyway-database-postgresql", version.ref = "com-flywaydb-flyway" } @@ -234,7 +238,7 @@ org-flywaydb-flyway-mysql = { module = "org.flywaydb:flyway-mysql", version.ref org-freemarker-freemarker = "org.freemarker:freemarker:2.3.34" org-hibernate-orm-hibernate-core = { module = "org.hibernate:hibernate-core", version.ref = "org-hibernate-orm" } org-hsqldb-hsqldb = "org.hsqldb:hsqldb:2.7.4" -org-htmlunit-neko-htmlunit = "org.htmlunit:neko-htmlunit:4.18.0" +org-htmlunit-neko-htmlunit = "org.htmlunit:neko-htmlunit:4.20.0" org-jetbrains-annotations = "org.jetbrains:annotations:26.0.2-1" org-jetbrains-dokka-dokka-gradle-plugin = { module = "org.jetbrains.dokka:dokka-gradle-plugin", version.ref = "org-jetbrains-dokka" } org-jetbrains-intellij-platform-gradle-plugin = { module = "org.jetbrains.intellij.platform:org.jetbrains.intellij.platform.gradle.plugin", version.ref = "org-jetbrains-intellij-platform" } @@ -272,14 +276,14 @@ org-junit-jupiter-junit-jupiter-params = { module = "org.junit.jupiter:junit-jup org-junit-platform-junit-platform-launcher = { module = "org.junit.platform:junit-platform-launcher", version.ref = "org-junit-jupiter" } org-junit-platform-junit-platform-suite = { module = "org.junit.platform:junit-platform-suite", version.ref = "org-junit-jupiter" } org-junit-vintage-junit-vintage-engine = { module = "org.junit.vintage:junit-vintage-engine", version.ref = "org-junit-jupiter" } -org-lionsoul-ip2region = "org.lionsoul:ip2region:3.1.1" +org-lionsoul-ip2region = "org.lionsoul:ip2region:3.3.2" org-liquibase-liquibase-core = { module = "org.liquibase:liquibase-core", version.ref = "org-liquibase" } org-mapstruct-mapstruct = { module = "org.mapstruct:mapstruct", version.ref = "com-mapstruct" } org-mapstruct-mapstruct-processor = { module = "org.mapstruct:mapstruct-processor", version.ref = "com-mapstruct" } org-owasp-antisamy-antisamy = "org.owasp.antisamy:antisamy:1.7.8" org-postgresql-postgresql = "org.postgresql:postgresql:42.7.8" org-projectlombok-lombok = "org.projectlombok:lombok:1.18.42" -org-seleniumhq-selenium-selenium-java = "org.seleniumhq.selenium:selenium-java:4.38.0" +org-seleniumhq-selenium-selenium-java = "org.seleniumhq.selenium:selenium-java:4.39.0" org-skyscreamer-jsonassert = "org.skyscreamer:jsonassert:2.0-rc1" org-slf4j-slf4j-api = { module = "org.slf4j:slf4j-api", version.ref = "org-slf4j" } org-springdoc-springdoc-openapi-starter-webmvc-ui = "org.springdoc:springdoc-openapi-starter-webmvc-ui:3.0.0" @@ -323,7 +327,7 @@ org-springframework-boot-spring-boot-starter-websocket = { module = "org.springf org-springframework-boot-spring-boot-test = { module = "org.springframework.boot:spring-boot-test", version.ref = "org-springframework-boot" } org-springframework-boot-spring-boot-test-autoconfigure = { module = "org.springframework.boot:spring-boot-test-autoconfigure", version.ref = "org-springframework-boot" } org-springframework-cloud-spring-cloud-dependencies = { module = "org.springframework.cloud:spring-cloud-dependencies", version.ref = "org-springframework-cloud" } -org-springframework-cloud-spring-cloud-starter-bootstrap = "org.springframework.cloud:spring-cloud-starter-bootstrap:5.0.0-RC1" +org-springframework-cloud-spring-cloud-starter-bootstrap = "org.springframework.cloud:spring-cloud-starter-bootstrap:5.0.0" org-springframework-data-spring-data-commons = { module = "org.springframework.data:spring-data-commons", version.ref = "org-springframework-data" } org-springframework-data-spring-data-jpa = { module = "org.springframework.data:spring-data-jpa", version.ref = "org-springframework-data" } org-springframework-integration-spring-integration-core = { module = "org.springframework.integration:spring-integration-core", version.ref = "org-springframework-integration" } @@ -351,7 +355,7 @@ org-testcontainers-postgresql = { module = "org.testcontainers:postgresql", vers org-testcontainers-testcontainers = { module = "org.testcontainers:testcontainers", version.ref = "org-testcontainers" } org-testcontainers-testcontainers-bom = { module = "org.testcontainers:testcontainers-bom", version.ref = "org-testcontainers" } org-testng-testng = { module = "org.testng:testng", version.ref = "org-testng" } -org-xerial-sqlite-jdbc = "org.xerial:sqlite-jdbc:3.51.0.0" +org-xerial-sqlite-jdbc = "org.xerial:sqlite-jdbc:3.51.1.0" p6spy-p6spy = "p6spy:p6spy:3.9.1" [plugins] diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 23449a2b5..2a1bb9dd7 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.0-rc-2-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradleplugin/gradleplugin-composeserver/build.gradle.kts b/gradleplugin/gradleplugin-composeserver/build.gradle.kts index f92d96c6e..7619ae5ee 100644 --- a/gradleplugin/gradleplugin-composeserver/build.gradle.kts +++ b/gradleplugin/gradleplugin-composeserver/build.gradle.kts @@ -1,7 +1,7 @@ plugins { `java-gradle-plugin` id("buildlogic.kotlin-conventions") - id("buildlogic.publish-conventions") + id("buildlogic.maven-publish-conventions") id("buildlogic.spotless-conventions") } diff --git a/gradleplugin/gradleplugin-composeserver/src/main/kotlin/io/github/truenine/composeserver/gradleplugin/GradleExtensions.kt b/gradleplugin/gradleplugin-composeserver/src/main/kotlin/io/github/truenine/composeserver/gradleplugin/GradleExtensions.kt index 7bdf4358d..a583c7dfc 100644 --- a/gradleplugin/gradleplugin-composeserver/src/main/kotlin/io/github/truenine/composeserver/gradleplugin/GradleExtensions.kt +++ b/gradleplugin/gradleplugin-composeserver/src/main/kotlin/io/github/truenine/composeserver/gradleplugin/GradleExtensions.kt @@ -1,8 +1,6 @@ package io.github.truenine.composeserver.gradleplugin -import io.github.truenine.composeserver.gradleplugin.consts.Constant -import io.github.truenine.composeserver.gradleplugin.consts.GradleProjectDelegator -import io.github.truenine.composeserver.gradleplugin.consts.MavenRepositoryUrls +import io.github.truenine.composeserver.gradleplugin.consts.* import java.net.URI import org.gradle.api.Project import org.gradle.api.artifacts.MinimalExternalModuleDependency diff --git a/gradleplugin/gradleplugin-composeserver/src/main/kotlin/io/github/truenine/composeserver/gradleplugin/generator/GradleGenerator.kt b/gradleplugin/gradleplugin-composeserver/src/main/kotlin/io/github/truenine/composeserver/gradleplugin/generator/GradleGenerator.kt index 8ef4646ed..f801f15d1 100644 --- a/gradleplugin/gradleplugin-composeserver/src/main/kotlin/io/github/truenine/composeserver/gradleplugin/generator/GradleGenerator.kt +++ b/gradleplugin/gradleplugin-composeserver/src/main/kotlin/io/github/truenine/composeserver/gradleplugin/generator/GradleGenerator.kt @@ -1,12 +1,8 @@ package io.github.truenine.composeserver.gradleplugin.generator -import io.github.truenine.composeserver.gradleplugin.consts.Constant -import io.github.truenine.composeserver.gradleplugin.consts.MavenRepos -import io.github.truenine.composeserver.gradleplugin.consts.MavenRepositoryUrls +import io.github.truenine.composeserver.gradleplugin.consts.* import io.github.truenine.composeserver.gradleplugin.wrap -import java.io.File -import java.io.FileWriter -import java.io.InputStreamReader +import java.io.* import javax.inject.Inject import org.gradle.api.Project diff --git a/gradleplugin/gradleplugin-composeserver/src/main/kotlin/io/github/truenine/composeserver/gradleplugin/jar/JarExtension.kt b/gradleplugin/gradleplugin-composeserver/src/main/kotlin/io/github/truenine/composeserver/gradleplugin/jar/JarExtension.kt index 8465eeb7d..4672ed65f 100644 --- a/gradleplugin/gradleplugin-composeserver/src/main/kotlin/io/github/truenine/composeserver/gradleplugin/jar/JarExtension.kt +++ b/gradleplugin/gradleplugin-composeserver/src/main/kotlin/io/github/truenine/composeserver/gradleplugin/jar/JarExtension.kt @@ -6,9 +6,7 @@ import org.gradle.api.Project import org.gradle.api.tasks.Copy import org.gradle.api.tasks.Delete import org.gradle.api.tasks.bundling.Jar -import org.gradle.kotlin.dsl.extra -import org.gradle.kotlin.dsl.named -import org.gradle.kotlin.dsl.register +import org.gradle.kotlin.dsl.* import org.springframework.boot.gradle.tasks.bundling.BootJar class JarExtension(private val project: Project, private val dsl: JarExtensionConfig) { diff --git a/gradleplugin/gradleplugin-composeserver/src/test/kotlin/io/github/truenine/composeserver/gradleplugin/FunctionsTest.kt b/gradleplugin/gradleplugin-composeserver/src/test/kotlin/io/github/truenine/composeserver/gradleplugin/FunctionsTest.kt index 83e610a2d..9b00cb618 100644 --- a/gradleplugin/gradleplugin-composeserver/src/test/kotlin/io/github/truenine/composeserver/gradleplugin/FunctionsTest.kt +++ b/gradleplugin/gradleplugin-composeserver/src/test/kotlin/io/github/truenine/composeserver/gradleplugin/FunctionsTest.kt @@ -1,8 +1,6 @@ package io.github.truenine.composeserver.gradleplugin -import kotlin.test.assertEquals -import kotlin.test.assertNotNull -import kotlin.test.assertTrue +import kotlin.test.* import org.gradle.api.Project import org.gradle.api.plugins.JavaPlugin import org.gradle.testfixtures.ProjectBuilder diff --git a/gradleplugin/gradleplugin-composeserver/src/test/kotlin/io/github/truenine/composeserver/gradleplugin/GradlePluginTestSuite.kt b/gradleplugin/gradleplugin-composeserver/src/test/kotlin/io/github/truenine/composeserver/gradleplugin/GradlePluginTestSuite.kt index b599118da..3a86c9683 100644 --- a/gradleplugin/gradleplugin-composeserver/src/test/kotlin/io/github/truenine/composeserver/gradleplugin/GradlePluginTestSuite.kt +++ b/gradleplugin/gradleplugin-composeserver/src/test/kotlin/io/github/truenine/composeserver/gradleplugin/GradlePluginTestSuite.kt @@ -2,9 +2,7 @@ package io.github.truenine.composeserver.gradleplugin import io.github.truenine.composeserver.gradleplugin.consts.ConstantTest import io.github.truenine.composeserver.gradleplugin.consts.GradleProjectDelegatorTest -import io.github.truenine.composeserver.gradleplugin.dotenv.DotenvConfigTest -import io.github.truenine.composeserver.gradleplugin.dotenv.DotenvIntegrationTest -import io.github.truenine.composeserver.gradleplugin.dotenv.DotenvLoaderTest +import io.github.truenine.composeserver.gradleplugin.dotenv.* import io.github.truenine.composeserver.gradleplugin.entrance.ConfigEntranceTest import io.github.truenine.composeserver.gradleplugin.generator.GradleGeneratorConfigTest import io.github.truenine.composeserver.gradleplugin.generator.MavenRepoTypeTest diff --git a/gradleplugin/gradleplugin-composeserver/src/test/kotlin/io/github/truenine/composeserver/gradleplugin/consts/GradleProjectDelegatorTest.kt b/gradleplugin/gradleplugin-composeserver/src/test/kotlin/io/github/truenine/composeserver/gradleplugin/consts/GradleProjectDelegatorTest.kt index 6449dbf8c..d042f1971 100644 --- a/gradleplugin/gradleplugin-composeserver/src/test/kotlin/io/github/truenine/composeserver/gradleplugin/consts/GradleProjectDelegatorTest.kt +++ b/gradleplugin/gradleplugin-composeserver/src/test/kotlin/io/github/truenine/composeserver/gradleplugin/consts/GradleProjectDelegatorTest.kt @@ -1,8 +1,6 @@ package io.github.truenine.composeserver.gradleplugin.consts -import kotlin.test.assertEquals -import kotlin.test.assertNotNull -import kotlin.test.assertTrue +import kotlin.test.* import org.gradle.api.Project import org.gradle.api.plugins.JavaPlugin import org.gradle.testfixtures.ProjectBuilder diff --git a/gradleplugin/gradleplugin-composeserver/src/test/kotlin/io/github/truenine/composeserver/gradleplugin/dotenv/DotenvConfigTest.kt b/gradleplugin/gradleplugin-composeserver/src/test/kotlin/io/github/truenine/composeserver/gradleplugin/dotenv/DotenvConfigTest.kt index 183973a15..6168c32ea 100644 --- a/gradleplugin/gradleplugin-composeserver/src/test/kotlin/io/github/truenine/composeserver/gradleplugin/dotenv/DotenvConfigTest.kt +++ b/gradleplugin/gradleplugin-composeserver/src/test/kotlin/io/github/truenine/composeserver/gradleplugin/dotenv/DotenvConfigTest.kt @@ -1,9 +1,6 @@ package io.github.truenine.composeserver.gradleplugin.dotenv -import kotlin.test.assertEquals -import kotlin.test.assertFalse -import kotlin.test.assertNull -import kotlin.test.assertTrue +import kotlin.test.* import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test diff --git a/gradleplugin/gradleplugin-composeserver/src/test/kotlin/io/github/truenine/composeserver/gradleplugin/dotenv/DotenvLoaderTest.kt b/gradleplugin/gradleplugin-composeserver/src/test/kotlin/io/github/truenine/composeserver/gradleplugin/dotenv/DotenvLoaderTest.kt index 7579521c0..8797a809f 100644 --- a/gradleplugin/gradleplugin-composeserver/src/test/kotlin/io/github/truenine/composeserver/gradleplugin/dotenv/DotenvLoaderTest.kt +++ b/gradleplugin/gradleplugin-composeserver/src/test/kotlin/io/github/truenine/composeserver/gradleplugin/dotenv/DotenvLoaderTest.kt @@ -1,9 +1,7 @@ package io.github.truenine.composeserver.gradleplugin.dotenv import java.io.File -import kotlin.test.assertEquals -import kotlin.test.assertFalse -import kotlin.test.assertTrue +import kotlin.test.* import org.gradle.api.Project import org.gradle.api.tasks.JavaExec import org.gradle.api.tasks.testing.Test diff --git a/gradleplugin/gradleplugin-composeserver/src/test/kotlin/io/github/truenine/composeserver/gradleplugin/entrance/ConfigEntranceTest.kt b/gradleplugin/gradleplugin-composeserver/src/test/kotlin/io/github/truenine/composeserver/gradleplugin/entrance/ConfigEntranceTest.kt index feedf5d55..ad6246696 100644 --- a/gradleplugin/gradleplugin-composeserver/src/test/kotlin/io/github/truenine/composeserver/gradleplugin/entrance/ConfigEntranceTest.kt +++ b/gradleplugin/gradleplugin-composeserver/src/test/kotlin/io/github/truenine/composeserver/gradleplugin/entrance/ConfigEntranceTest.kt @@ -1,8 +1,6 @@ package io.github.truenine.composeserver.gradleplugin.entrance -import kotlin.test.assertEquals -import kotlin.test.assertNotNull -import kotlin.test.assertTrue +import kotlin.test.* import org.gradle.api.Project import org.gradle.testfixtures.ProjectBuilder import org.junit.jupiter.api.BeforeEach diff --git a/gradleplugin/gradleplugin-composeserver/src/test/kotlin/io/github/truenine/composeserver/gradleplugin/generator/MavenRepoTypeTest.kt b/gradleplugin/gradleplugin-composeserver/src/test/kotlin/io/github/truenine/composeserver/gradleplugin/generator/MavenRepoTypeTest.kt index b4d6fdf17..ce1b57648 100644 --- a/gradleplugin/gradleplugin-composeserver/src/test/kotlin/io/github/truenine/composeserver/gradleplugin/generator/MavenRepoTypeTest.kt +++ b/gradleplugin/gradleplugin-composeserver/src/test/kotlin/io/github/truenine/composeserver/gradleplugin/generator/MavenRepoTypeTest.kt @@ -1,8 +1,6 @@ package io.github.truenine.composeserver.gradleplugin.generator -import kotlin.test.assertEquals -import kotlin.test.assertNotNull -import kotlin.test.assertNull +import kotlin.test.* import org.junit.jupiter.api.Test class MavenRepoTypeTest { diff --git a/gradleplugin/gradleplugin-composeserver/src/test/kotlin/io/github/truenine/composeserver/gradleplugin/jar/JarExtensionSimpleTest.kt b/gradleplugin/gradleplugin-composeserver/src/test/kotlin/io/github/truenine/composeserver/gradleplugin/jar/JarExtensionSimpleTest.kt index c0e80e83d..2603e6a32 100644 --- a/gradleplugin/gradleplugin-composeserver/src/test/kotlin/io/github/truenine/composeserver/gradleplugin/jar/JarExtensionSimpleTest.kt +++ b/gradleplugin/gradleplugin-composeserver/src/test/kotlin/io/github/truenine/composeserver/gradleplugin/jar/JarExtensionSimpleTest.kt @@ -1,9 +1,7 @@ package io.github.truenine.composeserver.gradleplugin.jar import java.io.File -import kotlin.test.assertEquals -import kotlin.test.assertNotNull -import kotlin.test.assertTrue +import kotlin.test.* import org.gradle.api.Project import org.gradle.api.plugins.JavaPlugin import org.gradle.api.tasks.Copy diff --git a/gradleplugin/gradleplugin-composeserver/src/test/kotlin/io/github/truenine/composeserver/gradleplugin/jar/JarExtensionTest.kt b/gradleplugin/gradleplugin-composeserver/src/test/kotlin/io/github/truenine/composeserver/gradleplugin/jar/JarExtensionTest.kt index e839082a6..17e0d33c9 100644 --- a/gradleplugin/gradleplugin-composeserver/src/test/kotlin/io/github/truenine/composeserver/gradleplugin/jar/JarExtensionTest.kt +++ b/gradleplugin/gradleplugin-composeserver/src/test/kotlin/io/github/truenine/composeserver/gradleplugin/jar/JarExtensionTest.kt @@ -1,10 +1,8 @@ package io.github.truenine.composeserver.gradleplugin.jar import java.io.File -import kotlin.test.assertEquals -import kotlin.test.assertFalse +import kotlin.test.* import kotlin.test.assertNotNull -import kotlin.test.assertTrue import org.gradle.api.Project import org.gradle.api.plugins.JavaPlugin import org.gradle.api.tasks.Copy diff --git a/gradleplugin/gradleplugin-dotenv/build.gradle.kts b/gradleplugin/gradleplugin-dotenv/build.gradle.kts index 39897db3f..28fdd62fa 100644 --- a/gradleplugin/gradleplugin-dotenv/build.gradle.kts +++ b/gradleplugin/gradleplugin-dotenv/build.gradle.kts @@ -1,7 +1,7 @@ plugins { `java-gradle-plugin` id("buildlogic.kotlin-conventions") - id("buildlogic.publish-conventions") + id("buildlogic.maven-publish-conventions") id("buildlogic.spotless-conventions") } diff --git a/gradleplugin/gradleplugin-dotenv/src/main/kotlin/io/github/truenine/composeserver/gradleplugin/dotenv/Main.kt b/gradleplugin/gradleplugin-dotenv/src/main/kotlin/io/github/truenine/composeserver/gradleplugin/dotenv/Main.kt index 52b0eeed3..ada441dcb 100644 --- a/gradleplugin/gradleplugin-dotenv/src/main/kotlin/io/github/truenine/composeserver/gradleplugin/dotenv/Main.kt +++ b/gradleplugin/gradleplugin-dotenv/src/main/kotlin/io/github/truenine/composeserver/gradleplugin/dotenv/Main.kt @@ -1,10 +1,10 @@ package io.github.truenine.composeserver.gradleplugin.dotenv -import java.io.File import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.tasks.JavaExec import org.gradle.api.tasks.testing.Test +import java.io.File /** * # Dotenv Gradle Plugin diff --git a/gradleplugin/gradleplugin-dotenv/src/test/kotlin/io/github/truenine/composeserver/gradleplugin/dotenv/DotenvPluginFunctionalTest.kt b/gradleplugin/gradleplugin-dotenv/src/test/kotlin/io/github/truenine/composeserver/gradleplugin/dotenv/DotenvPluginFunctionalTest.kt index bfb57a2df..7b4c2cf2b 100644 --- a/gradleplugin/gradleplugin-dotenv/src/test/kotlin/io/github/truenine/composeserver/gradleplugin/dotenv/DotenvPluginFunctionalTest.kt +++ b/gradleplugin/gradleplugin-dotenv/src/test/kotlin/io/github/truenine/composeserver/gradleplugin/dotenv/DotenvPluginFunctionalTest.kt @@ -1,12 +1,12 @@ package io.github.truenine.composeserver.gradleplugin.dotenv -import java.io.File -import java.nio.file.Path -import kotlin.test.assertEquals import org.gradle.testkit.runner.GradleRunner import org.gradle.testkit.runner.TaskOutcome import org.junit.jupiter.api.Test import org.junit.jupiter.api.io.TempDir +import java.io.File +import java.nio.file.Path +import kotlin.test.assertEquals class DotenvPluginFunctionalTest { diff --git a/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/FileOperationPanel.kt b/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/FileOperationPanel.kt index fa29c6a06..3c84a328f 100644 --- a/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/FileOperationPanel.kt +++ b/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/FileOperationPanel.kt @@ -8,34 +8,13 @@ import com.intellij.openapi.fileChooser.FileChooserDescriptor import com.intellij.openapi.project.Project import com.intellij.openapi.ui.SimpleToolWindowPanel import com.intellij.openapi.vfs.VirtualFile -import com.intellij.ui.components.JBScrollPane -import com.intellij.ui.components.JBTextArea -import com.intellij.ui.components.JBTextField +import com.intellij.ui.components.* import com.intellij.util.ui.JBUI import io.github.truenine.composeserver.ide.ideamcp.common.Logger -import io.github.truenine.composeserver.ide.ideamcp.services.CleanOptions -import io.github.truenine.composeserver.ide.ideamcp.services.CleanService -import io.github.truenine.composeserver.ide.ideamcp.services.ErrorService -import io.github.truenine.composeserver.ide.ideamcp.services.FileManager -import java.awt.BorderLayout -import java.awt.Dimension -import java.awt.GridBagConstraints -import java.awt.GridBagLayout -import java.awt.Insets -import javax.swing.Box -import javax.swing.BoxLayout -import javax.swing.JButton -import javax.swing.JCheckBox -import javax.swing.JLabel -import javax.swing.JOptionPane -import javax.swing.JPanel -import javax.swing.JSeparator -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.SupervisorJob -import kotlinx.coroutines.cancel -import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext +import io.github.truenine.composeserver.ide.ideamcp.services.* +import java.awt.* +import javax.swing.* +import kotlinx.coroutines.* /** File operation panel that provides file selection and batch operations, integrating error view and code clean-up features. */ class FileOperationPanel(private val project: Project) : SimpleToolWindowPanel(true, true), Disposable { diff --git a/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/LibCodeTestPanel.kt b/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/LibCodeTestPanel.kt index 977cc5386..986b21bf9 100644 --- a/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/LibCodeTestPanel.kt +++ b/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/LibCodeTestPanel.kt @@ -3,28 +3,14 @@ package io.github.truenine.composeserver.ide.ideamcp import com.intellij.openapi.components.service import com.intellij.openapi.project.Project import com.intellij.openapi.ui.SimpleToolWindowPanel -import com.intellij.ui.components.JBLabel -import com.intellij.ui.components.JBScrollPane -import com.intellij.ui.components.JBTextField +import com.intellij.ui.components.* import io.github.truenine.composeserver.ide.ideamcp.common.Logger import io.github.truenine.composeserver.ide.ideamcp.services.LibCodeResult import io.github.truenine.composeserver.ide.ideamcp.services.LibCodeService -import java.awt.BorderLayout -import java.awt.Font -import java.awt.GridBagConstraints -import java.awt.GridBagLayout -import java.awt.Insets -import javax.swing.JButton -import javax.swing.JCheckBox -import javax.swing.JLabel -import javax.swing.JPanel -import javax.swing.JTextArea -import javax.swing.SwingUtilities +import java.awt.* +import javax.swing.* import javax.swing.border.TitledBorder -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext +import kotlinx.coroutines.* /** * LibCodeService test panel. diff --git a/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/McpDebugPanel.kt b/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/McpDebugPanel.kt index 16c2ac800..c6d80ee3c 100644 --- a/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/McpDebugPanel.kt +++ b/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/McpDebugPanel.kt @@ -5,9 +5,7 @@ import com.intellij.openapi.ui.SimpleToolWindowPanel import com.intellij.ui.components.JBScrollPane import java.awt.BorderLayout import java.awt.Font -import javax.swing.JLabel -import javax.swing.JPanel -import javax.swing.JTextArea +import javax.swing.* /** Simplified MCP debug panel. */ class McpDebugPanel(private val project: Project) : SimpleToolWindowPanel(true, true) { diff --git a/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/McpTerminalPanel.kt b/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/McpTerminalPanel.kt index 92413c8fb..fcb0fa382 100644 --- a/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/McpTerminalPanel.kt +++ b/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/McpTerminalPanel.kt @@ -5,27 +5,14 @@ import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.components.service import com.intellij.openapi.project.Project import com.intellij.openapi.ui.SimpleToolWindowPanel -import com.intellij.ui.components.JBScrollPane -import com.intellij.ui.components.JBTextArea -import com.intellij.ui.components.JBTextField +import com.intellij.ui.components.* import com.intellij.util.ui.JBUI import io.github.truenine.composeserver.ide.ideamcp.common.Logger -import java.awt.BorderLayout -import java.awt.Dimension -import java.awt.Font +import java.awt.* import java.awt.event.KeyAdapter import java.awt.event.KeyEvent -import javax.swing.Box -import javax.swing.BoxLayout -import javax.swing.JButton -import javax.swing.JLabel -import javax.swing.JPanel -import javax.swing.JSplitPane -import javax.swing.UIManager -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.SupervisorJob -import kotlinx.coroutines.cancel +import javax.swing.* +import kotlinx.coroutines.* /** MCP terminal clean-up panel providing command input and output cleaning features. */ class McpTerminalPanel(private val project: Project) : SimpleToolWindowPanel(true, true), Disposable { diff --git a/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/TerminalOutputInterceptor.kt b/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/TerminalOutputInterceptor.kt index 51b479157..f0a729dd5 100644 --- a/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/TerminalOutputInterceptor.kt +++ b/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/TerminalOutputInterceptor.kt @@ -1,18 +1,12 @@ package io.github.truenine.composeserver.ide.ideamcp import com.intellij.execution.configurations.GeneralCommandLine -import com.intellij.execution.process.OSProcessHandler -import com.intellij.execution.process.ProcessEvent -import com.intellij.execution.process.ProcessListener +import com.intellij.execution.process.* import com.intellij.openapi.Disposable import com.intellij.openapi.components.Service import com.intellij.openapi.util.Key import java.nio.charset.Charset -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.SupervisorJob -import kotlinx.coroutines.cancel -import kotlinx.coroutines.launch +import kotlinx.coroutines.* import org.slf4j.LoggerFactory /** diff --git a/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/actions/CleanCodeAction.kt b/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/actions/CleanCodeAction.kt index ca9efecd2..b333ce2f1 100644 --- a/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/actions/CleanCodeAction.kt +++ b/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/actions/CleanCodeAction.kt @@ -1,13 +1,8 @@ package io.github.truenine.composeserver.ide.ideamcp.actions -import com.intellij.openapi.actionSystem.ActionUpdateThread -import com.intellij.openapi.actionSystem.AnAction -import com.intellij.openapi.actionSystem.AnActionEvent -import com.intellij.openapi.actionSystem.CommonDataKeys +import com.intellij.openapi.actionSystem.* import com.intellij.openapi.components.service -import com.intellij.openapi.progress.ProgressIndicator -import com.intellij.openapi.progress.ProgressManager -import com.intellij.openapi.progress.Task +import com.intellij.openapi.progress.* import com.intellij.openapi.project.Project import com.intellij.openapi.ui.Messages import com.intellij.openapi.vfs.VirtualFile diff --git a/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/actions/CleanOptionsDialog.kt b/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/actions/CleanOptionsDialog.kt index 63b815e15..29a5aef0c 100644 --- a/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/actions/CleanOptionsDialog.kt +++ b/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/actions/CleanOptionsDialog.kt @@ -4,12 +4,7 @@ import com.intellij.openapi.project.Project import com.intellij.openapi.ui.DialogWrapper import com.intellij.openapi.ui.ValidationInfo import io.github.truenine.composeserver.ide.ideamcp.services.CleanOptions -import javax.swing.Box -import javax.swing.BoxLayout -import javax.swing.JCheckBox -import javax.swing.JComponent -import javax.swing.JLabel -import javax.swing.JPanel +import javax.swing.* /** * Code clean-up options dialog. diff --git a/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/actions/CleanResultDialog.kt b/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/actions/CleanResultDialog.kt index 3932eda73..af70dbf35 100644 --- a/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/actions/CleanResultDialog.kt +++ b/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/actions/CleanResultDialog.kt @@ -9,16 +9,7 @@ import io.github.truenine.composeserver.ide.ideamcp.services.CleanResult import io.github.truenine.composeserver.ide.ideamcp.tools.CleanOperation import java.awt.BorderLayout import java.awt.Dimension -import javax.swing.Action -import javax.swing.BorderFactory -import javax.swing.BoxLayout -import javax.swing.DefaultListModel -import javax.swing.JComponent -import javax.swing.JLabel -import javax.swing.JList -import javax.swing.JPanel -import javax.swing.ListSelectionModel -import javax.swing.SwingConstants +import javax.swing.* import javax.swing.table.AbstractTableModel /** Dialog that displays detailed results and statistics for code clean-up operations. */ diff --git a/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/actions/ErrorReportDialog.kt b/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/actions/ErrorReportDialog.kt index 0dd348968..7c2ae34ca 100644 --- a/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/actions/ErrorReportDialog.kt +++ b/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/actions/ErrorReportDialog.kt @@ -4,16 +4,9 @@ import com.intellij.openapi.project.Project import com.intellij.openapi.ui.DialogWrapper import com.intellij.ui.components.JBScrollPane import com.intellij.ui.table.JBTable -import io.github.truenine.composeserver.ide.ideamcp.tools.ErrorInfo -import io.github.truenine.composeserver.ide.ideamcp.tools.ErrorSeverity -import io.github.truenine.composeserver.ide.ideamcp.tools.FileErrorInfo +import io.github.truenine.composeserver.ide.ideamcp.tools.* import java.awt.Dimension -import javax.swing.Action -import javax.swing.Box -import javax.swing.BoxLayout -import javax.swing.JComponent -import javax.swing.JLabel -import javax.swing.JPanel +import javax.swing.* import javax.swing.table.AbstractTableModel /** diff --git a/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/actions/ErrorViewOptionsDialog.kt b/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/actions/ErrorViewOptionsDialog.kt index d58c05840..210b30bfb 100644 --- a/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/actions/ErrorViewOptionsDialog.kt +++ b/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/actions/ErrorViewOptionsDialog.kt @@ -2,12 +2,7 @@ package io.github.truenine.composeserver.ide.ideamcp.actions import com.intellij.openapi.project.Project import com.intellij.openapi.ui.DialogWrapper -import javax.swing.Box -import javax.swing.BoxLayout -import javax.swing.JCheckBox -import javax.swing.JComponent -import javax.swing.JLabel -import javax.swing.JPanel +import javax.swing.* /** * Error view options dialog. diff --git a/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/actions/LibCodeDialog.kt b/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/actions/LibCodeDialog.kt index a7d87ff99..d37116a59 100644 --- a/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/actions/LibCodeDialog.kt +++ b/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/actions/LibCodeDialog.kt @@ -11,13 +11,7 @@ import io.github.truenine.composeserver.ide.ideamcp.services.LibCodeResult import io.github.truenine.composeserver.ide.ideamcp.tools.SourceType import java.awt.BorderLayout import java.awt.Dimension -import javax.swing.Action -import javax.swing.BorderFactory -import javax.swing.BoxLayout -import javax.swing.JComponent -import javax.swing.JLabel -import javax.swing.JPanel -import javax.swing.SwingConstants +import javax.swing.* /** * Dialog for displaying library code. diff --git a/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/actions/ViewErrorAction.kt b/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/actions/ViewErrorAction.kt index b6efde603..4f75f9184 100644 --- a/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/actions/ViewErrorAction.kt +++ b/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/actions/ViewErrorAction.kt @@ -1,13 +1,8 @@ package io.github.truenine.composeserver.ide.ideamcp.actions -import com.intellij.openapi.actionSystem.ActionUpdateThread -import com.intellij.openapi.actionSystem.AnAction -import com.intellij.openapi.actionSystem.AnActionEvent -import com.intellij.openapi.actionSystem.CommonDataKeys +import com.intellij.openapi.actionSystem.* import com.intellij.openapi.components.service -import com.intellij.openapi.progress.ProgressIndicator -import com.intellij.openapi.progress.ProgressManager -import com.intellij.openapi.progress.Task +import com.intellij.openapi.progress.* import com.intellij.openapi.project.Project import com.intellij.openapi.ui.Messages import io.github.truenine.composeserver.ide.ideamcp.services.ErrorService diff --git a/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/actions/ViewLibCodeAction.kt b/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/actions/ViewLibCodeAction.kt index 10542f2b7..7caf28bf2 100644 --- a/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/actions/ViewLibCodeAction.kt +++ b/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/actions/ViewLibCodeAction.kt @@ -1,19 +1,12 @@ package io.github.truenine.composeserver.ide.ideamcp.actions -import com.intellij.openapi.actionSystem.ActionUpdateThread -import com.intellij.openapi.actionSystem.AnAction -import com.intellij.openapi.actionSystem.AnActionEvent -import com.intellij.openapi.actionSystem.CommonDataKeys +import com.intellij.openapi.actionSystem.* import com.intellij.openapi.components.service import com.intellij.openapi.editor.Editor -import com.intellij.openapi.progress.ProgressIndicator -import com.intellij.openapi.progress.ProgressManager -import com.intellij.openapi.progress.Task +import com.intellij.openapi.progress.* import com.intellij.openapi.project.Project import com.intellij.openapi.ui.Messages -import com.intellij.psi.PsiElement -import com.intellij.psi.PsiFile -import com.intellij.psi.PsiReference +import com.intellij.psi.* import io.github.truenine.composeserver.ide.ideamcp.common.Logger import io.github.truenine.composeserver.ide.ideamcp.services.LibCodeService import kotlinx.coroutines.runBlocking diff --git a/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/services/CleanService.kt b/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/services/CleanService.kt index 08f34d4d4..f7495dce6 100644 --- a/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/services/CleanService.kt +++ b/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/services/CleanService.kt @@ -3,9 +3,7 @@ package io.github.truenine.composeserver.ide.ideamcp.services import com.intellij.codeInsight.actions.OptimizeImportsProcessor import com.intellij.codeInsight.actions.ReformatCodeProcessor import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer -import com.intellij.openapi.application.ApplicationManager -import com.intellij.openapi.application.ReadAction -import com.intellij.openapi.application.WriteAction +import com.intellij.openapi.application.* import com.intellij.openapi.components.Service import com.intellij.openapi.components.service import com.intellij.openapi.project.Project @@ -14,9 +12,7 @@ import com.intellij.psi.PsiFile import com.intellij.psi.PsiManager import io.github.truenine.composeserver.ide.ideamcp.common.Logger import io.github.truenine.composeserver.ide.ideamcp.tools.CleanOperation -import kotlin.coroutines.resume -import kotlin.coroutines.resumeWithException -import kotlin.coroutines.suspendCoroutine +import kotlin.coroutines.* import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext diff --git a/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/services/ErrorService.kt b/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/services/ErrorService.kt index 68dc3526d..70592804f 100644 --- a/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/services/ErrorService.kt +++ b/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/services/ErrorService.kt @@ -9,13 +9,8 @@ import com.intellij.openapi.editor.Document import com.intellij.openapi.fileEditor.FileDocumentManager import com.intellij.openapi.project.Project import com.intellij.openapi.vfs.VirtualFile -import com.intellij.psi.PsiDocumentManager -import com.intellij.psi.PsiErrorElement -import com.intellij.psi.PsiFile -import com.intellij.psi.PsiManager -import io.github.truenine.composeserver.ide.ideamcp.tools.ErrorInfo -import io.github.truenine.composeserver.ide.ideamcp.tools.ErrorSeverity -import io.github.truenine.composeserver.ide.ideamcp.tools.FileErrorInfo +import com.intellij.psi.* +import io.github.truenine.composeserver.ide.ideamcp.tools.* import org.slf4j.LoggerFactory /** diff --git a/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/tools/CleanCodeTool.kt b/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/tools/CleanCodeTool.kt index 2bab29533..4ac725dfc 100644 --- a/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/tools/CleanCodeTool.kt +++ b/ide/ide-idea-mcp/src/main/kotlin/io/github/truenine/composeserver/ide/ideamcp/tools/CleanCodeTool.kt @@ -4,9 +4,7 @@ import com.intellij.openapi.components.service import com.intellij.openapi.project.Project import io.github.truenine.composeserver.ide.ideamcp.common.ErrorDetails import io.github.truenine.composeserver.ide.ideamcp.common.Logger -import io.github.truenine.composeserver.ide.ideamcp.services.CleanOptions -import io.github.truenine.composeserver.ide.ideamcp.services.CleanService -import io.github.truenine.composeserver.ide.ideamcp.services.FileManager +import io.github.truenine.composeserver.ide.ideamcp.services.* import kotlinx.coroutines.runBlocking import kotlinx.serialization.Serializable import kotlinx.serialization.json.Json diff --git a/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/FileOperationPanelTest.kt b/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/FileOperationPanelTest.kt index 4563cfa2f..d8488ad60 100644 --- a/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/FileOperationPanelTest.kt +++ b/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/FileOperationPanelTest.kt @@ -1,9 +1,6 @@ package io.github.truenine.composeserver.ide.ideamcp -import kotlin.test.Test -import kotlin.test.assertEquals -import kotlin.test.assertNotNull -import kotlin.test.assertTrue +import kotlin.test.* /** FileOperationPanel unit tests verifying basic behavior of the file operation panel. */ class FileOperationPanelTest { diff --git a/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/examples/LibCodeServiceUsageExample.kt b/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/examples/LibCodeServiceUsageExample.kt index 97bdcea98..35032f844 100644 --- a/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/examples/LibCodeServiceUsageExample.kt +++ b/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/examples/LibCodeServiceUsageExample.kt @@ -5,9 +5,7 @@ import io.github.truenine.composeserver.ide.ideamcp.services.LibCodeServiceImpl import io.github.truenine.composeserver.ide.ideamcp.testutil.MockDataGenerator import io.github.truenine.composeserver.ide.ideamcp.tools.SourceType import io.mockk.mockk -import kotlin.test.Test -import kotlin.test.assertNotNull -import kotlin.test.assertTrue +import kotlin.test.* import kotlinx.coroutines.runBlocking /** diff --git a/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/integration/FullIntegrationTest.kt b/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/integration/FullIntegrationTest.kt index 5270e8ccc..deb88eaa6 100644 --- a/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/integration/FullIntegrationTest.kt +++ b/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/integration/FullIntegrationTest.kt @@ -1,22 +1,10 @@ package io.github.truenine.composeserver.ide.ideamcp.integration import com.intellij.testFramework.fixtures.BasePlatformTestCase -import io.github.truenine.composeserver.ide.ideamcp.FileOperationPanel -import io.github.truenine.composeserver.ide.ideamcp.McpDebugPanel -import io.github.truenine.composeserver.ide.ideamcp.McpDebugToolWindowFactory -import io.github.truenine.composeserver.ide.ideamcp.McpTerminalPanel -import io.github.truenine.composeserver.ide.ideamcp.TerminalOutputInterceptor -import io.github.truenine.composeserver.ide.ideamcp.actions.CleanCodeAction -import io.github.truenine.composeserver.ide.ideamcp.actions.ViewErrorAction -import io.github.truenine.composeserver.ide.ideamcp.actions.ViewLibCodeAction -import io.github.truenine.composeserver.ide.ideamcp.services.CleanService -import io.github.truenine.composeserver.ide.ideamcp.services.ErrorService -import io.github.truenine.composeserver.ide.ideamcp.services.FileManager -import io.github.truenine.composeserver.ide.ideamcp.services.LibCodeService -import io.github.truenine.composeserver.ide.ideamcp.tools.CleanCodeTool -import io.github.truenine.composeserver.ide.ideamcp.tools.TerminalTool -import io.github.truenine.composeserver.ide.ideamcp.tools.ViewErrorTool -import io.github.truenine.composeserver.ide.ideamcp.tools.ViewLibCodeTool +import io.github.truenine.composeserver.ide.ideamcp.* +import io.github.truenine.composeserver.ide.ideamcp.actions.* +import io.github.truenine.composeserver.ide.ideamcp.services.* +import io.github.truenine.composeserver.ide.ideamcp.tools.* /** Full integration tests for component collaboration and data flow. */ class FullIntegrationTest : BasePlatformTestCase() { diff --git a/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/services/CleanServiceTest.kt b/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/services/CleanServiceTest.kt index a326d11ed..407d5e056 100644 --- a/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/services/CleanServiceTest.kt +++ b/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/services/CleanServiceTest.kt @@ -3,13 +3,8 @@ package io.github.truenine.composeserver.ide.ideamcp.services import com.intellij.openapi.project.Project import com.intellij.openapi.vfs.VirtualFile import io.github.truenine.composeserver.ide.ideamcp.tools.CleanOperation -import io.mockk.every -import io.mockk.mockk -import io.mockk.verify -import kotlin.test.Test -import kotlin.test.assertEquals -import kotlin.test.assertFalse -import kotlin.test.assertTrue +import io.mockk.* +import kotlin.test.* import kotlinx.coroutines.runBlocking /** CleanService unit tests. */ diff --git a/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/services/ErrorCaptureFilterTest.kt b/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/services/ErrorCaptureFilterTest.kt index 29e26acc6..0c58c04ee 100644 --- a/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/services/ErrorCaptureFilterTest.kt +++ b/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/services/ErrorCaptureFilterTest.kt @@ -5,10 +5,7 @@ import com.intellij.psi.PsiFile import com.intellij.testFramework.fixtures.BasePlatformTestCase import io.mockk.every import io.mockk.mockk -import kotlin.test.assertFalse -import kotlin.test.assertNotSame -import kotlin.test.assertSame -import kotlin.test.assertTrue +import kotlin.test.* /** * Tests for ErrorCaptureFilter. diff --git a/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/services/ErrorServiceFunctionalTest.kt b/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/services/ErrorServiceFunctionalTest.kt index f882bc188..ef3510c7c 100644 --- a/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/services/ErrorServiceFunctionalTest.kt +++ b/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/services/ErrorServiceFunctionalTest.kt @@ -2,9 +2,7 @@ package io.github.truenine.composeserver.ide.ideamcp.services import com.intellij.testFramework.fixtures.BasePlatformTestCase import io.github.truenine.composeserver.ide.ideamcp.tools.ErrorSeverity -import kotlin.test.assertEquals -import kotlin.test.assertNotNull -import kotlin.test.assertTrue +import kotlin.test.* /** Functional tests verifying refactored error-capture behavior. */ class ErrorServiceFunctionalTest : BasePlatformTestCase() { diff --git a/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/services/ErrorServiceIntegrationTest.kt b/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/services/ErrorServiceIntegrationTest.kt index 04024d3fd..783be8bae 100644 --- a/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/services/ErrorServiceIntegrationTest.kt +++ b/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/services/ErrorServiceIntegrationTest.kt @@ -1,10 +1,7 @@ package io.github.truenine.composeserver.ide.ideamcp.services import com.intellij.testFramework.fixtures.BasePlatformTestCase -import kotlin.test.assertNotNull -import kotlin.test.assertNotSame -import kotlin.test.assertSame -import kotlin.test.assertTrue +import kotlin.test.* /** * ErrorService integration tests. diff --git a/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/services/FileManagerTest.kt b/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/services/FileManagerTest.kt index 74d25f553..4d3861ffc 100644 --- a/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/services/FileManagerTest.kt +++ b/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/services/FileManagerTest.kt @@ -4,10 +4,7 @@ import com.intellij.openapi.project.Project import com.intellij.openapi.vfs.VirtualFile import io.mockk.every import io.mockk.mockk -import kotlin.test.Test -import kotlin.test.assertEquals -import kotlin.test.assertFalse -import kotlin.test.assertTrue +import kotlin.test.* /** FileManager unit tests. */ class FileManagerTest { diff --git a/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/services/LibCodeServiceConsoleTest.kt b/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/services/LibCodeServiceConsoleTest.kt index fc845075c..1b99d53e3 100644 --- a/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/services/LibCodeServiceConsoleTest.kt +++ b/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/services/LibCodeServiceConsoleTest.kt @@ -2,10 +2,7 @@ package io.github.truenine.composeserver.ide.ideamcp.services import com.intellij.openapi.project.Project import io.mockk.mockk -import kotlin.test.Test -import kotlin.test.assertContains -import kotlin.test.assertNotNull -import kotlin.test.assertTrue +import kotlin.test.* import kotlinx.coroutines.runBlocking /** LibCodeService console output tests. Verifies that the service returns complete content and prints detailed information to the console. */ diff --git a/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/simple/SimpleLibCodeTest.kt b/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/simple/SimpleLibCodeTest.kt index 373459199..4e2b45423 100644 --- a/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/simple/SimpleLibCodeTest.kt +++ b/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/simple/SimpleLibCodeTest.kt @@ -3,9 +3,7 @@ package io.github.truenine.composeserver.ide.ideamcp.simple import com.intellij.openapi.project.Project import io.github.truenine.composeserver.ide.ideamcp.services.LibCodeServiceImpl import io.mockk.mockk -import kotlin.test.Test -import kotlin.test.assertNotNull -import kotlin.test.assertTrue +import kotlin.test.* import kotlinx.coroutines.runBlocking /** Simple LibCodeService test verifying basic behavior. */ diff --git a/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/testutil/MockDataGenerator.kt b/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/testutil/MockDataGenerator.kt index ed6ac6d8e..1ec9ba64b 100644 --- a/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/testutil/MockDataGenerator.kt +++ b/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/testutil/MockDataGenerator.kt @@ -3,9 +3,7 @@ package io.github.truenine.composeserver.ide.ideamcp.testutil import io.github.truenine.composeserver.ide.ideamcp.services.LibCodeMetadata import io.github.truenine.composeserver.ide.ideamcp.services.LibCodeResult import io.github.truenine.composeserver.ide.ideamcp.tools.SourceType -import java.io.ByteArrayOutputStream -import java.io.File -import java.io.FileOutputStream +import java.io.* import java.util.jar.JarEntry import java.util.jar.JarOutputStream import kotlin.random.Random diff --git a/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/tools/CleanCodeToolTest.kt b/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/tools/CleanCodeToolTest.kt index 8a6714728..d1e49e1bb 100644 --- a/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/tools/CleanCodeToolTest.kt +++ b/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/tools/CleanCodeToolTest.kt @@ -1,10 +1,7 @@ package io.github.truenine.composeserver.ide.ideamcp.tools import io.github.truenine.composeserver.ide.ideamcp.common.ErrorDetails -import kotlin.test.Test -import kotlin.test.assertEquals -import kotlin.test.assertFalse -import kotlin.test.assertTrue +import kotlin.test.* import kotlinx.serialization.json.Json /** CleanCodeTool unit tests. */ diff --git a/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/tools/ViewLibCodeToolTest.kt b/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/tools/ViewLibCodeToolTest.kt index 2eb9a8901..39aab7492 100644 --- a/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/tools/ViewLibCodeToolTest.kt +++ b/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/tools/ViewLibCodeToolTest.kt @@ -3,9 +3,7 @@ package io.github.truenine.composeserver.ide.ideamcp.tools import com.intellij.openapi.project.Project import io.github.truenine.composeserver.ide.ideamcp.services.LibCodeResult import io.github.truenine.composeserver.ide.ideamcp.services.LibCodeService -import io.mockk.coEvery -import io.mockk.every -import io.mockk.mockk +import io.mockk.* import kotlin.test.Test import kotlin.test.assertTrue diff --git a/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/verification/LibCodeServiceVerificationTest.kt b/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/verification/LibCodeServiceVerificationTest.kt index 9cf824c70..bc54fefc5 100644 --- a/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/verification/LibCodeServiceVerificationTest.kt +++ b/ide/ide-idea-mcp/src/test/kotlin/io/github/truenine/composeserver/ide/ideamcp/verification/LibCodeServiceVerificationTest.kt @@ -4,10 +4,7 @@ import com.intellij.openapi.project.Project import io.github.truenine.composeserver.ide.ideamcp.services.LibCodeServiceImpl import io.github.truenine.composeserver.ide.ideamcp.tools.SourceType import io.mockk.mockk -import kotlin.test.Test -import kotlin.test.assertEquals -import kotlin.test.assertNotNull -import kotlin.test.assertTrue +import kotlin.test.* import kotlinx.coroutines.runBlocking /** diff --git a/integrate-test/cacheable/build.gradle.kts b/integrate-test/cacheable/build.gradle.kts index e875110cc..c21f071b3 100644 --- a/integrate-test/cacheable/build.gradle.kts +++ b/integrate-test/cacheable/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("buildlogic.kotlinspring-test-conventions") + id("buildlogic.kotlin-spring-boot-test-conventions") id("buildlogic.spotless-conventions") } diff --git a/integrate-test/cacheable/src/test/kotlin/itest/integrate/cacheable/factory/RedisConnectionFactoryIntegrationTest.kt b/integrate-test/cacheable/src/test/kotlin/itest/integrate/cacheable/factory/RedisConnectionFactoryIntegrationTest.kt index ec6bc2ea9..53f691f27 100644 --- a/integrate-test/cacheable/src/test/kotlin/itest/integrate/cacheable/factory/RedisConnectionFactoryIntegrationTest.kt +++ b/integrate-test/cacheable/src/test/kotlin/itest/integrate/cacheable/factory/RedisConnectionFactoryIntegrationTest.kt @@ -2,10 +2,7 @@ package itest.integrate.cacheable.factory import io.github.truenine.composeserver.testtoolkit.testcontainers.ICacheRedisContainer import jakarta.annotation.Resource -import kotlin.test.Test -import kotlin.test.assertEquals -import kotlin.test.assertIs -import kotlin.test.assertNotNull +import kotlin.test.* import org.springframework.boot.test.context.SpringBootTest import org.springframework.data.redis.connection.RedisConnectionFactory import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory diff --git a/integrate-test/depend/jackson/build.gradle.kts b/integrate-test/depend/jackson/build.gradle.kts index ab752a4c8..1cec522f7 100644 --- a/integrate-test/depend/jackson/build.gradle.kts +++ b/integrate-test/depend/jackson/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("buildlogic.kotlinspring-test-conventions") + id("buildlogic.kotlin-spring-boot-test-conventions") id("buildlogic.spotless-conventions") } diff --git a/integrate-test/depend/jackson/src/test/kotlin/itest/integrate/depend/jackson/JacksonCustomConfigurationTest.kt b/integrate-test/depend/jackson/src/test/kotlin/itest/integrate/depend/jackson/JacksonCustomConfigurationTest.kt index 17f1ac10c..f4b79c778 100644 --- a/integrate-test/depend/jackson/src/test/kotlin/itest/integrate/depend/jackson/JacksonCustomConfigurationTest.kt +++ b/integrate-test/depend/jackson/src/test/kotlin/itest/integrate/depend/jackson/JacksonCustomConfigurationTest.kt @@ -1,13 +1,9 @@ package itest.integrate.depend.jackson import com.fasterxml.jackson.annotation.JsonInclude -import io.github.truenine.composeserver.depend.jackson.autoconfig.JacksonAutoConfiguration -import io.github.truenine.composeserver.depend.jackson.autoconfig.JacksonProperties -import io.github.truenine.composeserver.depend.jackson.autoconfig.TimestampUnit +import io.github.truenine.composeserver.depend.jackson.autoconfig.* import jakarta.annotation.Resource -import kotlin.test.assertEquals -import kotlin.test.assertFalse -import kotlin.test.assertTrue +import kotlin.test.* import org.junit.jupiter.api.Nested import org.junit.jupiter.api.Test import org.springframework.beans.factory.annotation.Qualifier diff --git a/integrate-test/depend/jackson/src/test/kotlin/itest/integrate/depend/jackson/JacksonTimestampConfigurationTest.kt b/integrate-test/depend/jackson/src/test/kotlin/itest/integrate/depend/jackson/JacksonTimestampConfigurationTest.kt index 2e3199972..c46358b5b 100644 --- a/integrate-test/depend/jackson/src/test/kotlin/itest/integrate/depend/jackson/JacksonTimestampConfigurationTest.kt +++ b/integrate-test/depend/jackson/src/test/kotlin/itest/integrate/depend/jackson/JacksonTimestampConfigurationTest.kt @@ -1,15 +1,10 @@ package itest.integrate.depend.jackson -import io.github.truenine.composeserver.depend.jackson.autoconfig.JacksonAutoConfiguration -import io.github.truenine.composeserver.depend.jackson.autoconfig.JacksonProperties -import io.github.truenine.composeserver.depend.jackson.autoconfig.TimestampUnit +import io.github.truenine.composeserver.depend.jackson.autoconfig.* import io.github.truenine.composeserver.depend.jackson.holders.ObjectMapperHolder import jakarta.annotation.Resource import java.time.Instant -import kotlin.test.assertEquals -import kotlin.test.assertFalse -import kotlin.test.assertNotNull -import kotlin.test.assertTrue +import kotlin.test.* import org.junit.jupiter.api.Nested import org.junit.jupiter.api.Test import org.springframework.beans.factory.annotation.Qualifier diff --git a/integrate-test/depend/jackson/src/test/kotlin/itest/integrate/depend/jackson/ManualWebConfigurationTest.kt b/integrate-test/depend/jackson/src/test/kotlin/itest/integrate/depend/jackson/ManualWebConfigurationTest.kt index 5ea601e3f..c9c12a363 100644 --- a/integrate-test/depend/jackson/src/test/kotlin/itest/integrate/depend/jackson/ManualWebConfigurationTest.kt +++ b/integrate-test/depend/jackson/src/test/kotlin/itest/integrate/depend/jackson/ManualWebConfigurationTest.kt @@ -2,20 +2,15 @@ package itest.integrate.depend.jackson import io.github.truenine.composeserver.depend.jackson.autoconfig.JacksonAutoConfiguration import jakarta.annotation.Resource -import java.time.Instant -import java.time.LocalDateTime -import java.time.ZoneId +import java.time.* import java.util.* import kotlin.test.assertNotNull -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Nested -import org.junit.jupiter.api.Test +import org.junit.jupiter.api.* import org.springframework.beans.factory.annotation.Qualifier import org.springframework.boot.test.context.SpringBootTest import org.springframework.context.annotation.Configuration import org.springframework.context.annotation.Import -import org.springframework.http.HttpInputMessage -import org.springframework.http.HttpOutputMessage +import org.springframework.http.* import org.springframework.http.MediaType import org.springframework.http.converter.AbstractHttpMessageConverter import org.springframework.test.web.servlet.MockMvc @@ -24,10 +19,7 @@ import org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post import org.springframework.test.web.servlet.result.MockMvcResultMatchers.content import org.springframework.test.web.servlet.result.MockMvcResultMatchers.status import org.springframework.test.web.servlet.setup.MockMvcBuilders -import org.springframework.web.bind.annotation.GetMapping -import org.springframework.web.bind.annotation.PostMapping -import org.springframework.web.bind.annotation.RequestBody -import org.springframework.web.bind.annotation.RestController +import org.springframework.web.bind.annotation.* import tools.jackson.databind.ObjectMapper /** diff --git a/integrate-test/depend/jackson/src/test/kotlin/itest/integrate/depend/jackson/NonInternalObjectMapperIntegrationTest.kt b/integrate-test/depend/jackson/src/test/kotlin/itest/integrate/depend/jackson/NonInternalObjectMapperIntegrationTest.kt index c40f47c7a..0129b69ae 100644 --- a/integrate-test/depend/jackson/src/test/kotlin/itest/integrate/depend/jackson/NonInternalObjectMapperIntegrationTest.kt +++ b/integrate-test/depend/jackson/src/test/kotlin/itest/integrate/depend/jackson/NonInternalObjectMapperIntegrationTest.kt @@ -2,9 +2,7 @@ package itest.integrate.depend.jackson import io.github.truenine.composeserver.depend.jackson.autoconfig.JacksonAutoConfiguration import jakarta.annotation.Resource -import kotlin.test.BeforeTest -import kotlin.test.Test -import kotlin.test.assertNotNull +import kotlin.test.* import org.springframework.boot.test.context.SpringBootTest import tools.jackson.databind.ObjectMapper diff --git a/integrate-test/depend/jackson/src/test/kotlin/itest/integrate/depend/jackson/TimezoneIndependenceTest.kt b/integrate-test/depend/jackson/src/test/kotlin/itest/integrate/depend/jackson/TimezoneIndependenceTest.kt index 27e189249..927523c5e 100644 --- a/integrate-test/depend/jackson/src/test/kotlin/itest/integrate/depend/jackson/TimezoneIndependenceTest.kt +++ b/integrate-test/depend/jackson/src/test/kotlin/itest/integrate/depend/jackson/TimezoneIndependenceTest.kt @@ -2,12 +2,7 @@ package itest.integrate.depend.jackson import io.github.truenine.composeserver.depend.jackson.autoconfig.JacksonAutoConfiguration import jakarta.annotation.Resource -import java.time.Instant -import java.time.LocalDateTime -import java.time.OffsetDateTime -import java.time.ZoneId -import java.time.ZoneOffset -import java.time.ZonedDateTime +import java.time.* import java.util.* import kotlin.test.assertEquals import kotlin.test.assertTrue diff --git a/integrate-test/oss/minio/build.gradle.kts b/integrate-test/oss/minio/build.gradle.kts index 9c33467c2..e0a30b998 100644 --- a/integrate-test/oss/minio/build.gradle.kts +++ b/integrate-test/oss/minio/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("buildlogic.kotlinspring-test-conventions") + id("buildlogic.kotlin-spring-boot-test-conventions") id("buildlogic.spotless-conventions") } diff --git a/integrate-test/oss/minio/src/test/kotlin/itest/integrate/oss/minio/AutoConfigurationPropertiesTest.kt b/integrate-test/oss/minio/src/test/kotlin/itest/integrate/oss/minio/AutoConfigurationPropertiesTest.kt index 0d2dde70e..31e418a14 100644 --- a/integrate-test/oss/minio/src/test/kotlin/itest/integrate/oss/minio/AutoConfigurationPropertiesTest.kt +++ b/integrate-test/oss/minio/src/test/kotlin/itest/integrate/oss/minio/AutoConfigurationPropertiesTest.kt @@ -1,13 +1,7 @@ package itest.integrate.oss.minio import io.github.truenine.composeserver.enums.HttpMethod -import io.github.truenine.composeserver.oss.CorsRule -import io.github.truenine.composeserver.oss.CreateBucketRequest -import io.github.truenine.composeserver.oss.IObjectStorageService -import io.github.truenine.composeserver.oss.LifecycleExpiration -import io.github.truenine.composeserver.oss.LifecycleRule -import io.github.truenine.composeserver.oss.LifecycleRuleStatus -import io.github.truenine.composeserver.oss.ListObjectVersionsRequest +import io.github.truenine.composeserver.oss.* import io.github.truenine.composeserver.oss.Tag import io.github.truenine.composeserver.oss.minio.autoconfig.MinioAutoConfiguration import io.github.truenine.composeserver.oss.minio.properties.MinioProperties @@ -19,10 +13,7 @@ import java.io.ByteArrayInputStream import kotlin.test.assertEquals import kotlin.test.assertTrue import kotlinx.coroutines.runBlocking -import org.junit.jupiter.api.Disabled -import org.junit.jupiter.api.Nested -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.assertNotNull +import org.junit.jupiter.api.* import org.springframework.boot.context.properties.EnableConfigurationProperties import org.springframework.boot.test.context.SpringBootTest import org.springframework.context.annotation.Import diff --git a/integrate-test/oss/volcengine-tos/build.gradle.kts b/integrate-test/oss/volcengine-tos/build.gradle.kts index d2ed3619e..1acad5f63 100644 --- a/integrate-test/oss/volcengine-tos/build.gradle.kts +++ b/integrate-test/oss/volcengine-tos/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("buildlogic.kotlinspring-test-conventions") + id("buildlogic.kotlin-spring-boot-test-conventions") id("buildlogic.spotless-conventions") id("io.github.truenine.composeserver.dotenv") } diff --git a/integrate-test/oss/volcengine-tos/src/test/kotlin/itest/integrate/oss/volcenginetos/VolcengineTosObjectStorageServiceIntegrationTest.kt b/integrate-test/oss/volcengine-tos/src/test/kotlin/itest/integrate/oss/volcenginetos/VolcengineTosObjectStorageServiceIntegrationTest.kt index 422deecd2..403927fae 100644 --- a/integrate-test/oss/volcengine-tos/src/test/kotlin/itest/integrate/oss/volcenginetos/VolcengineTosObjectStorageServiceIntegrationTest.kt +++ b/integrate-test/oss/volcengine-tos/src/test/kotlin/itest/integrate/oss/volcenginetos/VolcengineTosObjectStorageServiceIntegrationTest.kt @@ -4,19 +4,7 @@ import com.volcengine.tos.TOSV2 import com.volcengine.tos.TOSV2ClientBuilder import io.github.truenine.composeserver.enums.HttpMethod import io.github.truenine.composeserver.logger -import io.github.truenine.composeserver.oss.CompleteMultipartUploadRequest -import io.github.truenine.composeserver.oss.CopyObjectRequest -import io.github.truenine.composeserver.oss.CorsRule -import io.github.truenine.composeserver.oss.CreateBucketRequest -import io.github.truenine.composeserver.oss.InitiateMultipartUploadRequest -import io.github.truenine.composeserver.oss.LifecycleExpiration -import io.github.truenine.composeserver.oss.LifecycleRule -import io.github.truenine.composeserver.oss.LifecycleRuleStatus -import io.github.truenine.composeserver.oss.ListObjectVersionsRequest -import io.github.truenine.composeserver.oss.ListObjectsRequest -import io.github.truenine.composeserver.oss.ShareLinkRequest -import io.github.truenine.composeserver.oss.Tag -import io.github.truenine.composeserver.oss.UploadPartRequest +import io.github.truenine.composeserver.oss.* import io.github.truenine.composeserver.oss.volcengine.VolcengineTosObjectStorageService import java.io.ByteArrayInputStream import java.time.Duration diff --git a/ksp/ksp-plugin/src/main/kotlin/io/github/truenine/composeserver/ksp/plugin/KspPluginMain.kt b/ksp/ksp-plugin/src/main/kotlin/io/github/truenine/composeserver/ksp/plugin/KspPluginMain.kt index afc2d2df0..0b972b068 100644 --- a/ksp/ksp-plugin/src/main/kotlin/io/github/truenine/composeserver/ksp/plugin/KspPluginMain.kt +++ b/ksp/ksp-plugin/src/main/kotlin/io/github/truenine/composeserver/ksp/plugin/KspPluginMain.kt @@ -1,8 +1,6 @@ package io.github.truenine.composeserver.ksp.plugin -import com.google.devtools.ksp.processing.SymbolProcessor -import com.google.devtools.ksp.processing.SymbolProcessorEnvironment -import com.google.devtools.ksp.processing.SymbolProcessorProvider +import com.google.devtools.ksp.processing.* class KspPluginMain : SymbolProcessorProvider { override fun create(environment: SymbolProcessorEnvironment): SymbolProcessor { diff --git a/ksp/ksp-plugin/src/main/kotlin/io/github/truenine/composeserver/ksp/plugin/KspPluginProcessor.kt b/ksp/ksp-plugin/src/main/kotlin/io/github/truenine/composeserver/ksp/plugin/KspPluginProcessor.kt index 71c820dd4..8fc807dc2 100644 --- a/ksp/ksp-plugin/src/main/kotlin/io/github/truenine/composeserver/ksp/plugin/KspPluginProcessor.kt +++ b/ksp/ksp-plugin/src/main/kotlin/io/github/truenine/composeserver/ksp/plugin/KspPluginProcessor.kt @@ -1,16 +1,8 @@ package io.github.truenine.composeserver.ksp.plugin -import com.google.devtools.ksp.KspExperimental -import com.google.devtools.ksp.getAnnotationsByType -import com.google.devtools.ksp.getDeclaredProperties -import com.google.devtools.ksp.isAnnotationPresent -import com.google.devtools.ksp.processing.Resolver -import com.google.devtools.ksp.processing.SymbolProcessor -import com.google.devtools.ksp.processing.SymbolProcessorEnvironment -import com.google.devtools.ksp.symbol.KSAnnotated -import com.google.devtools.ksp.symbol.KSClassDeclaration -import com.google.devtools.ksp.symbol.KSDeclaration -import com.google.devtools.ksp.validate +import com.google.devtools.ksp.* +import com.google.devtools.ksp.processing.* +import com.google.devtools.ksp.symbol.* import com.squareup.kotlinpoet.ksp.toAnnotationSpec import io.github.truenine.composeserver.ksp.meta.annotations.MetaDef import io.github.truenine.composeserver.ksp.meta.annotations.MetaSkipGeneration diff --git a/ksp/ksp-plugin/src/main/kotlin/io/github/truenine/composeserver/ksp/plugin/visitor/JpaNameClassVisitor.kt b/ksp/ksp-plugin/src/main/kotlin/io/github/truenine/composeserver/ksp/plugin/visitor/JpaNameClassVisitor.kt index ab41f933a..402bf3e7a 100644 --- a/ksp/ksp-plugin/src/main/kotlin/io/github/truenine/composeserver/ksp/plugin/visitor/JpaNameClassVisitor.kt +++ b/ksp/ksp-plugin/src/main/kotlin/io/github/truenine/composeserver/ksp/plugin/visitor/JpaNameClassVisitor.kt @@ -1,56 +1,18 @@ package io.github.truenine.composeserver.ksp.plugin.visitor -import com.google.devtools.ksp.KspExperimental -import com.google.devtools.ksp.getAllSuperTypes -import com.google.devtools.ksp.getAnnotationsByType -import com.google.devtools.ksp.isAnnotationPresent -import com.google.devtools.ksp.isOpen -import com.google.devtools.ksp.isPublic +import com.google.devtools.ksp.* import com.google.devtools.ksp.processing.KSPLogger -import com.google.devtools.ksp.symbol.AnnotationUseSiteTarget -import com.google.devtools.ksp.symbol.ClassKind -import com.google.devtools.ksp.symbol.KSClassDeclaration -import com.google.devtools.ksp.symbol.KSNode -import com.google.devtools.ksp.symbol.KSPropertyDeclaration +import com.google.devtools.ksp.symbol.* import com.google.devtools.ksp.visitor.KSTopDownVisitor -import com.squareup.kotlinpoet.AnnotationSpec -import com.squareup.kotlinpoet.ClassName -import com.squareup.kotlinpoet.CodeBlock -import com.squareup.kotlinpoet.FunSpec -import com.squareup.kotlinpoet.KModifier -import com.squareup.kotlinpoet.ParameterSpec -import com.squareup.kotlinpoet.PropertySpec -import com.squareup.kotlinpoet.TypeSpec -import com.squareup.kotlinpoet.asTypeName -import com.squareup.kotlinpoet.ksp.toAnnotationSpec -import com.squareup.kotlinpoet.ksp.toTypeName -import com.squareup.kotlinpoet.ksp.writeTo -import io.github.truenine.composeserver.ksp.addConstModifier -import io.github.truenine.composeserver.ksp.addFinalModifier -import io.github.truenine.composeserver.ksp.addOpeneModifier -import io.github.truenine.composeserver.ksp.addOverrideModifier +import com.squareup.kotlinpoet.* +import com.squareup.kotlinpoet.ksp.* +import io.github.truenine.composeserver.ksp.* import io.github.truenine.composeserver.ksp.dsl.fileDsl -import io.github.truenine.composeserver.ksp.getKsAnnotationsByAnnotationClassQualifiedName -import io.github.truenine.composeserver.ksp.isAnnotationByKClass -import io.github.truenine.composeserver.ksp.isBasicType import io.github.truenine.composeserver.ksp.kotlinpoet.Libs -import io.github.truenine.composeserver.ksp.meta.annotations.MetaAutoManagement -import io.github.truenine.composeserver.ksp.meta.annotations.MetaDef -import io.github.truenine.composeserver.ksp.meta.annotations.MetaName -import io.github.truenine.composeserver.ksp.meta.annotations.MetaSkipGeneration +import io.github.truenine.composeserver.ksp.meta.annotations.* import io.github.truenine.composeserver.ksp.meta.annotations.orm.MetaFormula import io.github.truenine.composeserver.ksp.meta.getFirstName import io.github.truenine.composeserver.ksp.models.DeclarationContext -import io.github.truenine.composeserver.ksp.packageNameAsString -import io.github.truenine.composeserver.ksp.qualifiedNameAsString -import io.github.truenine.composeserver.ksp.realDeclaration -import io.github.truenine.composeserver.ksp.simpleName -import io.github.truenine.composeserver.ksp.simpleNameAsString -import io.github.truenine.composeserver.ksp.simpleNameGetShortNameStr -import io.github.truenine.composeserver.ksp.useDelegate -import io.github.truenine.composeserver.ksp.useField -import io.github.truenine.composeserver.ksp.useFile -import io.github.truenine.composeserver.ksp.useGet import kotlin.properties.Delegates private sealed class PropertyProcessingResult { diff --git a/ksp/ksp-shared/src/main/kotlin/io/github/truenine/composeserver/ksp/FunSpecFns.kt b/ksp/ksp-shared/src/main/kotlin/io/github/truenine/composeserver/ksp/FunSpecFns.kt index f047eae9e..121d56f09 100644 --- a/ksp/ksp-shared/src/main/kotlin/io/github/truenine/composeserver/ksp/FunSpecFns.kt +++ b/ksp/ksp-shared/src/main/kotlin/io/github/truenine/composeserver/ksp/FunSpecFns.kt @@ -3,9 +3,7 @@ package io.github.truenine.composeserver.ksp import com.google.devtools.ksp.isOpen import com.google.devtools.ksp.isPublic import com.google.devtools.ksp.symbol.KSFunctionDeclaration -import com.squareup.kotlinpoet.FunSpec -import com.squareup.kotlinpoet.KModifier -import com.squareup.kotlinpoet.ParameterSpec +import com.squareup.kotlinpoet.* import com.squareup.kotlinpoet.ksp.toTypeName fun KSFunctionDeclaration.toFunSpec(): FunSpec { diff --git a/ksp/ksp-shared/src/main/kotlin/io/github/truenine/composeserver/ksp/KSAnnotatedFns.kt b/ksp/ksp-shared/src/main/kotlin/io/github/truenine/composeserver/ksp/KSAnnotatedFns.kt index d18034f1e..4f3df9863 100644 --- a/ksp/ksp-shared/src/main/kotlin/io/github/truenine/composeserver/ksp/KSAnnotatedFns.kt +++ b/ksp/ksp-shared/src/main/kotlin/io/github/truenine/composeserver/ksp/KSAnnotatedFns.kt @@ -1,8 +1,6 @@ package io.github.truenine.composeserver.ksp -import com.google.devtools.ksp.symbol.KSAnnotated -import com.google.devtools.ksp.symbol.KSAnnotation -import com.google.devtools.ksp.symbol.KSDeclaration +import com.google.devtools.ksp.symbol.* import kotlin.reflect.KClass fun KSAnnotated.getKsAnnotationsByAnnotationClassQualifiedName(qualifiedName: String): Sequence { diff --git a/ksp/ksp-shared/src/main/kotlin/io/github/truenine/composeserver/ksp/KSDeclarationFns.kt b/ksp/ksp-shared/src/main/kotlin/io/github/truenine/composeserver/ksp/KSDeclarationFns.kt index 263654ca6..f39c0fa15 100644 --- a/ksp/ksp-shared/src/main/kotlin/io/github/truenine/composeserver/ksp/KSDeclarationFns.kt +++ b/ksp/ksp-shared/src/main/kotlin/io/github/truenine/composeserver/ksp/KSDeclarationFns.kt @@ -1,13 +1,7 @@ package io.github.truenine.composeserver.ksp import com.google.devtools.ksp.findActualType -import com.google.devtools.ksp.symbol.FileLocation -import com.google.devtools.ksp.symbol.KSClassDeclaration -import com.google.devtools.ksp.symbol.KSDeclaration -import com.google.devtools.ksp.symbol.KSName -import com.google.devtools.ksp.symbol.KSPropertyDeclaration -import com.google.devtools.ksp.symbol.KSTypeAlias -import com.google.devtools.ksp.symbol.KSTypeParameter +import com.google.devtools.ksp.symbol.* import kotlin.reflect.KClass /** diff --git a/ksp/ksp-shared/src/main/kotlin/io/github/truenine/composeserver/ksp/KSTypeReferenceFns.kt b/ksp/ksp-shared/src/main/kotlin/io/github/truenine/composeserver/ksp/KSTypeReferenceFns.kt index 749a2126e..0c0ae5b77 100644 --- a/ksp/ksp-shared/src/main/kotlin/io/github/truenine/composeserver/ksp/KSTypeReferenceFns.kt +++ b/ksp/ksp-shared/src/main/kotlin/io/github/truenine/composeserver/ksp/KSTypeReferenceFns.kt @@ -1,8 +1,6 @@ package io.github.truenine.composeserver.ksp -import com.google.devtools.ksp.symbol.KSDeclaration -import com.google.devtools.ksp.symbol.KSType -import com.google.devtools.ksp.symbol.KSTypeReference +import com.google.devtools.ksp.symbol.* import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.ConcurrentMap diff --git a/ksp/ksp-shared/src/main/kotlin/io/github/truenine/composeserver/ksp/Utils.kt b/ksp/ksp-shared/src/main/kotlin/io/github/truenine/composeserver/ksp/Utils.kt index 10e535b58..9161167bb 100644 --- a/ksp/ksp-shared/src/main/kotlin/io/github/truenine/composeserver/ksp/Utils.kt +++ b/ksp/ksp-shared/src/main/kotlin/io/github/truenine/composeserver/ksp/Utils.kt @@ -1,15 +1,8 @@ package io.github.truenine.composeserver.ksp -import com.google.devtools.ksp.ExceptionMessage -import com.google.devtools.ksp.KSTypeNotPresentException -import com.google.devtools.ksp.KSTypesNotPresentException -import com.google.devtools.ksp.KspExperimental -import com.google.devtools.ksp.symbol.KSAnnotation -import com.google.devtools.ksp.symbol.KSType -import com.google.devtools.ksp.symbol.KSValueArgument -import java.lang.reflect.InvocationHandler -import java.lang.reflect.Method -import java.lang.reflect.Proxy +import com.google.devtools.ksp.* +import com.google.devtools.ksp.symbol.* +import java.lang.reflect.* import java.util.concurrent.ConcurrentHashMap import kotlin.reflect.KClass diff --git a/ksp/ksp-shared/src/main/kotlin/io/github/truenine/composeserver/ksp/dsl/KFileSpecScope.kt b/ksp/ksp-shared/src/main/kotlin/io/github/truenine/composeserver/ksp/dsl/KFileSpecScope.kt index 5044daf1b..ebc59c3ec 100644 --- a/ksp/ksp-shared/src/main/kotlin/io/github/truenine/composeserver/ksp/dsl/KFileSpecScope.kt +++ b/ksp/ksp-shared/src/main/kotlin/io/github/truenine/composeserver/ksp/dsl/KFileSpecScope.kt @@ -1,8 +1,6 @@ package io.github.truenine.composeserver.ksp.dsl -import com.squareup.kotlinpoet.ClassName -import com.squareup.kotlinpoet.FileSpec -import com.squareup.kotlinpoet.MemberName +import com.squareup.kotlinpoet.* import kotlin.reflect.KClass class KFileSpecScope @JvmOverloads constructor(packageName: String = "", fileName: String = "", className: ClassName? = null, memberName: MemberName? = null) : diff --git a/ksp/ksp-shared/src/main/kotlin/io/github/truenine/composeserver/ksp/dsl/KObjectSpecScope.kt b/ksp/ksp-shared/src/main/kotlin/io/github/truenine/composeserver/ksp/dsl/KObjectSpecScope.kt index 34808ed61..96c35c91d 100644 --- a/ksp/ksp-shared/src/main/kotlin/io/github/truenine/composeserver/ksp/dsl/KObjectSpecScope.kt +++ b/ksp/ksp-shared/src/main/kotlin/io/github/truenine/composeserver/ksp/dsl/KObjectSpecScope.kt @@ -1,8 +1,6 @@ package io.github.truenine.composeserver.ksp.dsl -import com.squareup.kotlinpoet.ClassName -import com.squareup.kotlinpoet.FileSpec -import com.squareup.kotlinpoet.TypeSpec +import com.squareup.kotlinpoet.* class KObjectSpecScope @JvmOverloads constructor(name: String = "", className: ClassName? = null, override val fileBuilder: FileSpec.Builder) : StandardBuilderAdaptor { diff --git a/ksp/ksp-shared/src/main/kotlin/io/github/truenine/composeserver/ksp/models/DeclarationContext.kt b/ksp/ksp-shared/src/main/kotlin/io/github/truenine/composeserver/ksp/models/DeclarationContext.kt index 5801ba70f..bb31147d7 100644 --- a/ksp/ksp-shared/src/main/kotlin/io/github/truenine/composeserver/ksp/models/DeclarationContext.kt +++ b/ksp/ksp-shared/src/main/kotlin/io/github/truenine/composeserver/ksp/models/DeclarationContext.kt @@ -1,14 +1,7 @@ package io.github.truenine.composeserver.ksp.models -import com.google.devtools.ksp.processing.CodeGenerator -import com.google.devtools.ksp.processing.Dependencies -import com.google.devtools.ksp.processing.KSPLogger -import com.google.devtools.ksp.processing.Resolver -import com.google.devtools.ksp.processing.SymbolProcessorEnvironment -import com.google.devtools.ksp.symbol.KSAnnotated -import com.google.devtools.ksp.symbol.KSDeclaration -import com.google.devtools.ksp.symbol.KSFile -import com.google.devtools.ksp.symbol.KSVisitor +import com.google.devtools.ksp.processing.* +import com.google.devtools.ksp.symbol.* import java.util.concurrent.CopyOnWriteArraySet data class DeclarationContext( diff --git a/oss/oss-aliyun-oss/build.gradle.kts b/oss/oss-aliyun-oss/build.gradle.kts index c7fb7316c..afa921d4a 100644 --- a/oss/oss-aliyun-oss/build.gradle.kts +++ b/oss/oss-aliyun-oss/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("buildlogic.kotlinspring-conventions") + id("buildlogic.kotlin-spring-boot-conventions") id("buildlogic.spotless-conventions") } diff --git a/oss/oss-huawei-obs/build.gradle.kts b/oss/oss-huawei-obs/build.gradle.kts index e2c0e4c8d..e20683f8f 100644 --- a/oss/oss-huawei-obs/build.gradle.kts +++ b/oss/oss-huawei-obs/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("buildlogic.kotlinspring-conventions") + id("buildlogic.kotlin-spring-boot-conventions") id("buildlogic.spotless-conventions") } diff --git a/oss/oss-minio/build.gradle.kts b/oss/oss-minio/build.gradle.kts index b98d14db8..46a1ace59 100644 --- a/oss/oss-minio/build.gradle.kts +++ b/oss/oss-minio/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("buildlogic.kotlinspring-conventions") + id("buildlogic.kotlin-spring-boot-conventions") id("buildlogic.spotless-conventions") } diff --git a/oss/oss-minio/src/main/kotlin/io/github/truenine/composeserver/oss/minio/MinioObjectStorageService.kt b/oss/oss-minio/src/main/kotlin/io/github/truenine/composeserver/oss/minio/MinioObjectStorageService.kt index 475c17e08..46953e3b1 100644 --- a/oss/oss-minio/src/main/kotlin/io/github/truenine/composeserver/oss/minio/MinioObjectStorageService.kt +++ b/oss/oss-minio/src/main/kotlin/io/github/truenine/composeserver/oss/minio/MinioObjectStorageService.kt @@ -2,56 +2,13 @@ package io.github.truenine.composeserver.oss.minio import com.google.common.collect.HashMultimap import com.google.common.collect.Multimap +import io.github.truenine.composeserver.* import io.github.truenine.composeserver.enums.HttpMethod -import io.github.truenine.composeserver.mapFailure -import io.github.truenine.composeserver.onFailureDo +import io.github.truenine.composeserver.oss.* import io.github.truenine.composeserver.oss.AbortIncompleteMultipartUpload -import io.github.truenine.composeserver.oss.AuthenticationException -import io.github.truenine.composeserver.oss.AuthorizationException -import io.github.truenine.composeserver.oss.BucketAccessLevel -import io.github.truenine.composeserver.oss.BucketAlreadyExistsException -import io.github.truenine.composeserver.oss.BucketInfo -import io.github.truenine.composeserver.oss.BucketNotEmptyException -import io.github.truenine.composeserver.oss.BucketNotFoundException -import io.github.truenine.composeserver.oss.CompleteMultipartUploadRequest -import io.github.truenine.composeserver.oss.ConfigurationException -import io.github.truenine.composeserver.oss.ContentRange -import io.github.truenine.composeserver.oss.CopyObjectRequest -import io.github.truenine.composeserver.oss.CorsRule -import io.github.truenine.composeserver.oss.CreateBucketRequest import io.github.truenine.composeserver.oss.DeleteResult -import io.github.truenine.composeserver.oss.IObjectStorageService -import io.github.truenine.composeserver.oss.InitiateMultipartUploadRequest -import io.github.truenine.composeserver.oss.InvalidRequestException -import io.github.truenine.composeserver.oss.LifecycleExpiration -import io.github.truenine.composeserver.oss.LifecycleNoncurrentVersionExpiration -import io.github.truenine.composeserver.oss.LifecycleNoncurrentVersionTransition import io.github.truenine.composeserver.oss.LifecycleRule -import io.github.truenine.composeserver.oss.LifecycleRuleStatus -import io.github.truenine.composeserver.oss.LifecycleTransition -import io.github.truenine.composeserver.oss.ListObjectVersionsRequest -import io.github.truenine.composeserver.oss.ListObjectsRequest -import io.github.truenine.composeserver.oss.MultipartUpload -import io.github.truenine.composeserver.oss.NetworkException -import io.github.truenine.composeserver.oss.ObjectContent -import io.github.truenine.composeserver.oss.ObjectInfo -import io.github.truenine.composeserver.oss.ObjectListing -import io.github.truenine.composeserver.oss.ObjectNotFoundException -import io.github.truenine.composeserver.oss.ObjectStorageException -import io.github.truenine.composeserver.oss.ObjectVersionInfo -import io.github.truenine.composeserver.oss.ObjectVersionListing -import io.github.truenine.composeserver.oss.PartInfo -import io.github.truenine.composeserver.oss.PutObjectRequest -import io.github.truenine.composeserver.oss.ServiceUnavailableException -import io.github.truenine.composeserver.oss.ShareLinkInfo -import io.github.truenine.composeserver.oss.ShareLinkRequest -import io.github.truenine.composeserver.oss.StorageClass import io.github.truenine.composeserver.oss.Tag -import io.github.truenine.composeserver.oss.UploadPartRequest -import io.github.truenine.composeserver.oss.UploadWithLinkRequest -import io.github.truenine.composeserver.oss.UploadWithLinkResponse -import io.github.truenine.composeserver.safeCallAsync -import io.github.truenine.composeserver.slf4j import io.minio.BucketExistsArgs import io.minio.CopyObjectArgs import io.minio.CopySource @@ -83,33 +40,17 @@ import io.minio.SetBucketTagsArgs import io.minio.SetBucketVersioningArgs import io.minio.SetObjectTagsArgs import io.minio.StatObjectArgs -import io.minio.errors.BucketPolicyTooLargeException -import io.minio.errors.ErrorResponseException -import io.minio.errors.InsufficientDataException -import io.minio.errors.InternalException -import io.minio.errors.InvalidResponseException -import io.minio.errors.ServerException -import io.minio.errors.XmlParserException +import io.minio.errors.* import io.minio.http.Method +import io.minio.messages.* import io.minio.messages.AbortIncompleteMultipartUpload as MinioAbortIncompleteMultipartUpload -import io.minio.messages.AndOperator -import io.minio.messages.CORSConfiguration -import io.minio.messages.DeleteError -import io.minio.messages.DeleteObject import io.minio.messages.Expiration as MinioExpiration -import io.minio.messages.Item -import io.minio.messages.LifecycleConfiguration import io.minio.messages.LifecycleRule as MinioLifecycleRule import io.minio.messages.NoncurrentVersionExpiration as MinioNoncurrentVersionExpiration import io.minio.messages.NoncurrentVersionTransition as MinioNoncurrentVersionTransition -import io.minio.messages.Part -import io.minio.messages.ResponseDate -import io.minio.messages.RuleFilter import io.minio.messages.Status as MinioRuleStatus import io.minio.messages.Tag as MinioTag -import io.minio.messages.Tags import io.minio.messages.Transition as MinioTransition -import io.minio.messages.VersioningConfiguration import java.io.IOException import java.io.InputStream import java.lang.reflect.InvocationTargetException @@ -117,9 +58,26 @@ import java.security.InvalidKeyException import java.security.NoSuchAlgorithmException import java.time.Duration import java.time.Instant -import java.util.concurrent.CompletionException -import java.util.concurrent.ExecutionException -import java.util.concurrent.TimeUnit +import java.util.concurrent.* +import kotlin.Any +import kotlin.Boolean +import kotlin.Exception +import kotlin.IllegalArgumentException +import kotlin.Int +import kotlin.Long +import kotlin.Result +import kotlin.String +import kotlin.Suppress +import kotlin.Unit +import kotlin.apply +import kotlin.fold +import kotlin.getOrDefault +import kotlin.getOrThrow +import kotlin.getValue +import kotlin.lazy +import kotlin.let +import kotlin.runCatching +import kotlin.to import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow diff --git a/oss/oss-minio/src/test/kotlin/io/github/truenine/composeserver/oss/minio/MinioObjectStorageServiceTest.kt b/oss/oss-minio/src/test/kotlin/io/github/truenine/composeserver/oss/minio/MinioObjectStorageServiceTest.kt index 855a4be01..37aaffeec 100644 --- a/oss/oss-minio/src/test/kotlin/io/github/truenine/composeserver/oss/minio/MinioObjectStorageServiceTest.kt +++ b/oss/oss-minio/src/test/kotlin/io/github/truenine/composeserver/oss/minio/MinioObjectStorageServiceTest.kt @@ -1,19 +1,12 @@ package io.github.truenine.composeserver.oss.minio import io.github.truenine.composeserver.enums.HttpMethod -import io.github.truenine.composeserver.oss.BucketAccessLevel -import io.github.truenine.composeserver.oss.CreateBucketRequest -import io.github.truenine.composeserver.oss.IObjectStorageService -import io.github.truenine.composeserver.oss.PutObjectRequest -import io.github.truenine.composeserver.oss.ShareLinkRequest -import io.github.truenine.composeserver.oss.UploadWithLinkRequest +import io.github.truenine.composeserver.oss.* import io.github.truenine.composeserver.testtoolkit.log import io.github.truenine.composeserver.testtoolkit.testcontainers.IOssMinioContainer import io.minio.MinioClient -import kotlin.test.assertEquals -import kotlin.test.assertFalse +import kotlin.test.* import kotlin.test.assertNotNull -import kotlin.test.assertTrue import kotlinx.coroutines.test.runTest import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Nested diff --git a/oss/oss-minio/src/test/kotlin/io/github/truenine/composeserver/oss/minio/ShareLinkIntegrationTest.kt b/oss/oss-minio/src/test/kotlin/io/github/truenine/composeserver/oss/minio/ShareLinkIntegrationTest.kt index 4c4f734e9..2915b3a98 100644 --- a/oss/oss-minio/src/test/kotlin/io/github/truenine/composeserver/oss/minio/ShareLinkIntegrationTest.kt +++ b/oss/oss-minio/src/test/kotlin/io/github/truenine/composeserver/oss/minio/ShareLinkIntegrationTest.kt @@ -1,21 +1,14 @@ package io.github.truenine.composeserver.oss.minio import io.github.truenine.composeserver.enums.HttpMethod -import io.github.truenine.composeserver.oss.CreateBucketRequest -import io.github.truenine.composeserver.oss.ShareLinkRequest -import io.github.truenine.composeserver.oss.UploadWithLinkRequest -import io.github.truenine.composeserver.oss.UploadWithLinkResponse -import io.github.truenine.composeserver.oss.generateSimpleShareLink -import io.github.truenine.composeserver.oss.putObject +import io.github.truenine.composeserver.oss.* import io.github.truenine.composeserver.testtoolkit.log import io.minio.MinioClient import java.time.Duration import kotlin.test.assertEquals import kotlin.test.assertTrue import kotlinx.coroutines.test.runTest -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Nested -import org.junit.jupiter.api.Test +import org.junit.jupiter.api.* import org.testcontainers.containers.MinIOContainer import org.testcontainers.junit.jupiter.Container import org.testcontainers.junit.jupiter.Testcontainers diff --git a/oss/oss-shared/build.gradle.kts b/oss/oss-shared/build.gradle.kts index 4c0b941e2..cfcea90dc 100644 --- a/oss/oss-shared/build.gradle.kts +++ b/oss/oss-shared/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("buildlogic.kotlinspring-conventions") + id("buildlogic.kotlin-spring-boot-conventions") id("buildlogic.spotless-conventions") } diff --git a/oss/oss-shared/src/test/kotlin/io/github/truenine/composeserver/oss/IObjectStorageServiceTest.kt b/oss/oss-shared/src/test/kotlin/io/github/truenine/composeserver/oss/IObjectStorageServiceTest.kt index 62a643568..5b13ae817 100644 --- a/oss/oss-shared/src/test/kotlin/io/github/truenine/composeserver/oss/IObjectStorageServiceTest.kt +++ b/oss/oss-shared/src/test/kotlin/io/github/truenine/composeserver/oss/IObjectStorageServiceTest.kt @@ -2,10 +2,7 @@ package io.github.truenine.composeserver.oss import io.github.truenine.composeserver.enums.HttpMethod import io.github.truenine.composeserver.testtoolkit.log -import kotlin.test.assertEquals -import kotlin.test.assertFalse -import kotlin.test.assertNotNull -import kotlin.test.assertTrue +import kotlin.test.* import kotlinx.coroutines.runBlocking import org.junit.jupiter.api.Nested import org.junit.jupiter.api.Test diff --git a/oss/oss-shared/src/test/kotlin/io/github/truenine/composeserver/oss/properties/OssPropertiesTest.kt b/oss/oss-shared/src/test/kotlin/io/github/truenine/composeserver/oss/properties/OssPropertiesTest.kt index bd312f7ba..61a66c353 100644 --- a/oss/oss-shared/src/test/kotlin/io/github/truenine/composeserver/oss/properties/OssPropertiesTest.kt +++ b/oss/oss-shared/src/test/kotlin/io/github/truenine/composeserver/oss/properties/OssPropertiesTest.kt @@ -2,10 +2,7 @@ package io.github.truenine.composeserver.oss.properties import io.github.truenine.composeserver.consts.SpringBootConfigurationPropertiesPrefixes import java.time.Duration -import kotlin.test.assertEquals -import kotlin.test.assertFalse -import kotlin.test.assertNull -import kotlin.test.assertTrue +import kotlin.test.* import org.junit.jupiter.api.Nested import org.junit.jupiter.api.Test import org.springframework.boot.context.properties.bind.Binder diff --git a/oss/oss-volcengine-tos/README.md b/oss/oss-volcengine-tos/README.md index e035627f5..5730245b9 100644 --- a/oss/oss-volcengine-tos/README.md +++ b/oss/oss-volcengine-tos/README.md @@ -1,5 +1,9 @@ -# Volcengine TOS Integration +# Volcengine TOS Integration -[Official Documentation](https://www.volcengine.com/docs/6349/74836) -[Java SDK Documentation](https://www.volcengine.com/docs/6349/79895) -[Multipart Upload](https://www.volcengine.com/docs/6349/79922) +Volcengine object storage service integration module + +## Official Docs + +- [TOS Docs](https://www.volcengine.com/docs/6349/74836) +- [Java SDK](https://www.volcengine.com/docs/6349/79895) +- [Multipart Upload](https://www.volcengine.com/docs/6349/79922) diff --git a/oss/oss-volcengine-tos/build.gradle.kts b/oss/oss-volcengine-tos/build.gradle.kts index 5c62f1e28..9f1ad43a7 100644 --- a/oss/oss-volcengine-tos/build.gradle.kts +++ b/oss/oss-volcengine-tos/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("buildlogic.kotlinspring-conventions") + id("buildlogic.kotlin-spring-boot-conventions") id("buildlogic.spotless-conventions") id("io.github.truenine.composeserver.dotenv") } diff --git a/oss/oss-volcengine-tos/src/main/kotlin/io/github/truenine/composeserver/oss/volcengine/VolcengineTosObjectStorageService.kt b/oss/oss-volcengine-tos/src/main/kotlin/io/github/truenine/composeserver/oss/volcengine/VolcengineTosObjectStorageService.kt index 0615ee07c..c4a6c8042 100644 --- a/oss/oss-volcengine-tos/src/main/kotlin/io/github/truenine/composeserver/oss/volcengine/VolcengineTosObjectStorageService.kt +++ b/oss/oss-volcengine-tos/src/main/kotlin/io/github/truenine/composeserver/oss/volcengine/VolcengineTosObjectStorageService.kt @@ -1,89 +1,19 @@ package io.github.truenine.composeserver.oss.volcengine import com.volcengine.tos.TOSV2 -import com.volcengine.tos.comm.common.ACLType -import com.volcengine.tos.comm.common.StatusType -import com.volcengine.tos.comm.common.VersioningStatusType +import com.volcengine.tos.comm.common.* +import com.volcengine.tos.model.bucket.* import com.volcengine.tos.model.bucket.CORSRule as TosCorsRule -import com.volcengine.tos.model.bucket.CreateBucketV2Input -import com.volcengine.tos.model.bucket.DeleteBucketCORSInput -import com.volcengine.tos.model.bucket.DeleteBucketInput -import com.volcengine.tos.model.bucket.DeleteBucketLifecycleInput -import com.volcengine.tos.model.bucket.DeleteBucketTaggingInput import com.volcengine.tos.model.bucket.Expiration as TosExpiration -import com.volcengine.tos.model.bucket.GetBucketCORSInput -import com.volcengine.tos.model.bucket.GetBucketLifecycleInput -import com.volcengine.tos.model.bucket.GetBucketPolicyInput -import com.volcengine.tos.model.bucket.GetBucketTaggingInput -import com.volcengine.tos.model.bucket.HeadBucketV2Input import com.volcengine.tos.model.bucket.LifecycleRule as TosLifecycleRule -import com.volcengine.tos.model.bucket.ListBucketsV2Input -import com.volcengine.tos.model.bucket.PutBucketACLInput -import com.volcengine.tos.model.bucket.PutBucketCORSInput -import com.volcengine.tos.model.bucket.PutBucketLifecycleInput -import com.volcengine.tos.model.bucket.PutBucketPolicyInput -import com.volcengine.tos.model.bucket.PutBucketTaggingInput -import com.volcengine.tos.model.bucket.PutBucketVersioningInput import com.volcengine.tos.model.bucket.Tag as TosTag -import com.volcengine.tos.model.`object`.AbortMultipartUploadInput -import com.volcengine.tos.model.`object`.CompleteMultipartUploadV2Input -import com.volcengine.tos.model.`object`.CopyObjectV2Input -import com.volcengine.tos.model.`object`.CreateMultipartUploadInput -import com.volcengine.tos.model.`object`.DeleteObjectInput -import com.volcengine.tos.model.`object`.GetObjectV2Input -import com.volcengine.tos.model.`object`.HeadObjectV2Input -import com.volcengine.tos.model.`object`.ListObjectVersionsV2Input -import com.volcengine.tos.model.`object`.ListObjectsType2Input -import com.volcengine.tos.model.`object`.ListObjectsV2Input -import com.volcengine.tos.model.`object`.ListPartsInput -import com.volcengine.tos.model.`object`.PreSignedURLInput -import com.volcengine.tos.model.`object`.PutObjectBasicInput -import com.volcengine.tos.model.`object`.PutObjectInput -import com.volcengine.tos.model.`object`.TagSet -import com.volcengine.tos.model.`object`.UploadPartV2Input -import com.volcengine.tos.model.`object`.UploadedPartV2 +import com.volcengine.tos.model.`object`.* import io.github.truenine.composeserver.enums.HttpMethod import io.github.truenine.composeserver.logger -import io.github.truenine.composeserver.oss.AuthenticationException -import io.github.truenine.composeserver.oss.AuthorizationException -import io.github.truenine.composeserver.oss.BucketAccessLevel -import io.github.truenine.composeserver.oss.BucketAlreadyExistsException +import io.github.truenine.composeserver.oss.* import io.github.truenine.composeserver.oss.BucketInfo as OssBucketInfo -import io.github.truenine.composeserver.oss.BucketNotEmptyException -import io.github.truenine.composeserver.oss.BucketNotFoundException -import io.github.truenine.composeserver.oss.CompleteMultipartUploadRequest -import io.github.truenine.composeserver.oss.ConfigurationException -import io.github.truenine.composeserver.oss.CopyObjectRequest -import io.github.truenine.composeserver.oss.CreateBucketRequest -import io.github.truenine.composeserver.oss.DeleteResult -import io.github.truenine.composeserver.oss.IObjectStorageService -import io.github.truenine.composeserver.oss.InitiateMultipartUploadRequest -import io.github.truenine.composeserver.oss.InvalidRequestException -import io.github.truenine.composeserver.oss.LifecycleExpiration import io.github.truenine.composeserver.oss.LifecycleRule -import io.github.truenine.composeserver.oss.LifecycleRuleStatus -import io.github.truenine.composeserver.oss.ListObjectVersionsRequest -import io.github.truenine.composeserver.oss.ListObjectsRequest -import io.github.truenine.composeserver.oss.MultipartUpload -import io.github.truenine.composeserver.oss.NetworkException -import io.github.truenine.composeserver.oss.ObjectContent -import io.github.truenine.composeserver.oss.ObjectInfo -import io.github.truenine.composeserver.oss.ObjectListing -import io.github.truenine.composeserver.oss.ObjectNotFoundException -import io.github.truenine.composeserver.oss.ObjectStorageException -import io.github.truenine.composeserver.oss.ObjectVersionInfo -import io.github.truenine.composeserver.oss.ObjectVersionListing -import io.github.truenine.composeserver.oss.PartInfo -import io.github.truenine.composeserver.oss.PutObjectRequest -import io.github.truenine.composeserver.oss.QuotaExceededException -import io.github.truenine.composeserver.oss.ServiceUnavailableException -import io.github.truenine.composeserver.oss.ShareLinkInfo -import io.github.truenine.composeserver.oss.ShareLinkRequest -import io.github.truenine.composeserver.oss.StorageClass import io.github.truenine.composeserver.oss.Tag -import io.github.truenine.composeserver.oss.UploadPartRequest -import io.github.truenine.composeserver.oss.UploadWithLinkRequest -import io.github.truenine.composeserver.oss.UploadWithLinkResponse import java.io.InputStream import java.net.URI import java.time.Duration @@ -125,7 +55,21 @@ class VolcengineTosObjectStorageService(private val tosClient: TOSV2, override v } override suspend fun deleteBucket(bucketName: String): Result = - execute("Failed to delete bucket $bucketName") { tosClient.deleteBucket(DeleteBucketInput().setBucket(bucketName)) } + execute("Failed to delete bucket $bucketName") { + try { + tosClient.deleteBucket(DeleteBucketInput().setBucket(bucketName)) + } catch (e: Exception) { + // If the bucket doesn't exist, consider it a successful deletion + val mapped = mapTosException(e) + if (mapped is BucketNotFoundException) { + // Successfully deleted a non-existent bucket + return@execute Unit + } else { + // Re-throw other exceptions + throw e + } + } + } override suspend fun bucketExists(bucketName: String): Result = withContext(Dispatchers.IO) { diff --git a/oss/oss-volcengine-tos/src/main/kotlin/io/github/truenine/composeserver/oss/volcengine/autoconfig/VolcengineTosAutoConfiguration.kt b/oss/oss-volcengine-tos/src/main/kotlin/io/github/truenine/composeserver/oss/volcengine/autoconfig/VolcengineTosAutoConfiguration.kt index 58246d2e6..2aedf0bae 100644 --- a/oss/oss-volcengine-tos/src/main/kotlin/io/github/truenine/composeserver/oss/volcengine/autoconfig/VolcengineTosAutoConfiguration.kt +++ b/oss/oss-volcengine-tos/src/main/kotlin/io/github/truenine/composeserver/oss/volcengine/autoconfig/VolcengineTosAutoConfiguration.kt @@ -1,8 +1,6 @@ package io.github.truenine.composeserver.oss.volcengine.autoconfig -import com.volcengine.tos.TOSClientConfiguration -import com.volcengine.tos.TOSV2 -import com.volcengine.tos.TOSV2ClientBuilder +import com.volcengine.tos.* import com.volcengine.tos.auth.StaticCredentials import com.volcengine.tos.transport.TransportConfig import io.github.truenine.composeserver.logger diff --git a/oss/oss-volcengine-tos/src/test/kotlin/io/github/truenine/composeserver/oss/volcengine/VolcengineTosObjectStorageServiceTest.kt b/oss/oss-volcengine-tos/src/test/kotlin/io/github/truenine/composeserver/oss/volcengine/VolcengineTosObjectStorageServiceTest.kt index f118fee00..2814a3c37 100644 --- a/oss/oss-volcengine-tos/src/test/kotlin/io/github/truenine/composeserver/oss/volcengine/VolcengineTosObjectStorageServiceTest.kt +++ b/oss/oss-volcengine-tos/src/test/kotlin/io/github/truenine/composeserver/oss/volcengine/VolcengineTosObjectStorageServiceTest.kt @@ -1,56 +1,14 @@ package io.github.truenine.composeserver.oss.volcengine import com.volcengine.tos.TOSV2 -import com.volcengine.tos.model.bucket.CreateBucketV2Input -import com.volcengine.tos.model.bucket.CreateBucketV2Output -import com.volcengine.tos.model.bucket.DeleteBucketInput -import com.volcengine.tos.model.bucket.DeleteBucketOutput -import com.volcengine.tos.model.bucket.GetBucketPolicyInput -import com.volcengine.tos.model.bucket.GetBucketPolicyOutput -import com.volcengine.tos.model.bucket.HeadBucketV2Input -import com.volcengine.tos.model.bucket.HeadBucketV2Output -import com.volcengine.tos.model.bucket.ListBucketsV2Input -import com.volcengine.tos.model.bucket.ListBucketsV2Output -import com.volcengine.tos.model.bucket.ListedBucket -import com.volcengine.tos.model.bucket.PutBucketACLInput -import com.volcengine.tos.model.bucket.PutBucketACLOutput -import com.volcengine.tos.model.bucket.PutBucketPolicyInput -import com.volcengine.tos.model.bucket.PutBucketPolicyOutput -import com.volcengine.tos.model.`object`.CopyObjectV2Input -import com.volcengine.tos.model.`object`.CopyObjectV2Output -import com.volcengine.tos.model.`object`.DeleteObjectInput -import com.volcengine.tos.model.`object`.DeleteObjectOutput -import com.volcengine.tos.model.`object`.GetObjectV2Input -import com.volcengine.tos.model.`object`.GetObjectV2Output -import com.volcengine.tos.model.`object`.HeadObjectV2Input -import com.volcengine.tos.model.`object`.HeadObjectV2Output -import com.volcengine.tos.model.`object`.ListObjectsV2Input -import com.volcengine.tos.model.`object`.ListObjectsV2Output -import com.volcengine.tos.model.`object`.ListedObjectV2 -import com.volcengine.tos.model.`object`.PreSignedURLInput -import com.volcengine.tos.model.`object`.PreSignedURLOutput -import com.volcengine.tos.model.`object`.PutObjectInput -import com.volcengine.tos.model.`object`.PutObjectOutput +import com.volcengine.tos.model.bucket.* +import com.volcengine.tos.model.`object`.* import io.github.truenine.composeserver.enums.HttpMethod -import io.github.truenine.composeserver.oss.BucketAccessLevel -import io.github.truenine.composeserver.oss.CompleteMultipartUploadRequest -import io.github.truenine.composeserver.oss.CopyObjectRequest -import io.github.truenine.composeserver.oss.CreateBucketRequest -import io.github.truenine.composeserver.oss.InitiateMultipartUploadRequest -import io.github.truenine.composeserver.oss.ListObjectsRequest -import io.github.truenine.composeserver.oss.PartInfo -import io.github.truenine.composeserver.oss.PutObjectRequest -import io.github.truenine.composeserver.oss.ShareLinkRequest -import io.github.truenine.composeserver.oss.UploadPartRequest -import io.github.truenine.composeserver.oss.UploadWithLinkRequest -import io.mockk.clearAllMocks -import io.mockk.every -import io.mockk.mockk -import kotlin.test.assertEquals -import kotlin.test.assertFalse +import io.github.truenine.composeserver.oss.* +import io.mockk.* +import kotlin.test.* import kotlin.test.assertNotNull import kotlin.test.assertNull -import kotlin.test.assertTrue import kotlinx.coroutines.test.runTest import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Nested diff --git a/oss/oss-volcengine-tos/src/test/kotlin/io/github/truenine/composeserver/oss/volcengine/VolcengineTosPropertiesTest.kt b/oss/oss-volcengine-tos/src/test/kotlin/io/github/truenine/composeserver/oss/volcengine/VolcengineTosPropertiesTest.kt index 81d6a0828..deaef13a8 100644 --- a/oss/oss-volcengine-tos/src/test/kotlin/io/github/truenine/composeserver/oss/volcengine/VolcengineTosPropertiesTest.kt +++ b/oss/oss-volcengine-tos/src/test/kotlin/io/github/truenine/composeserver/oss/volcengine/VolcengineTosPropertiesTest.kt @@ -1,10 +1,8 @@ package io.github.truenine.composeserver.oss.volcengine import io.github.truenine.composeserver.oss.volcengine.properties.VolcengineTosProperties -import kotlin.test.assertEquals -import kotlin.test.assertFalse +import kotlin.test.* import kotlin.test.assertNull -import kotlin.test.assertTrue import org.junit.jupiter.api.Nested import org.junit.jupiter.api.Test import org.junit.jupiter.api.assertDoesNotThrow diff --git a/pay/pay-shared/build.gradle.kts b/pay/pay-shared/build.gradle.kts index 2f728e0c8..dcc2e8349 100644 --- a/pay/pay-shared/build.gradle.kts +++ b/pay/pay-shared/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("buildlogic.kotlinspring-conventions") + id("buildlogic.kotlin-spring-boot-conventions") id("buildlogic.spotless-conventions") } diff --git a/pay/pay-wechat/build.gradle.kts b/pay/pay-wechat/build.gradle.kts index a7a26e52c..3214d0dab 100644 --- a/pay/pay-wechat/build.gradle.kts +++ b/pay/pay-wechat/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("buildlogic.kotlinspring-conventions") + id("buildlogic.kotlin-spring-boot-conventions") id("buildlogic.spotless-conventions") } diff --git a/pay/pay-wechat/src/main/kotlin/io/github/truenine/composeserver/pay/wechat/autoconfig/WeChatPaySingleAutoConfiguration.kt b/pay/pay-wechat/src/main/kotlin/io/github/truenine/composeserver/pay/wechat/autoconfig/WeChatPaySingleAutoConfiguration.kt index 984e0eebf..2943817df 100644 --- a/pay/pay-wechat/src/main/kotlin/io/github/truenine/composeserver/pay/wechat/autoconfig/WeChatPaySingleAutoConfiguration.kt +++ b/pay/pay-wechat/src/main/kotlin/io/github/truenine/composeserver/pay/wechat/autoconfig/WeChatPaySingleAutoConfiguration.kt @@ -3,16 +3,12 @@ package io.github.truenine.composeserver.pay.wechat.autoconfig import com.wechat.pay.java.core.RSAAutoCertificateConfig import com.wechat.pay.java.service.payments.jsapi.JsapiService import com.wechat.pay.java.service.refund.RefundService +import io.github.truenine.composeserver.* import io.github.truenine.composeserver.pay.wechat.properties.WeChatPayProperties import io.github.truenine.composeserver.pay.wechat.properties.WeChatPaySingleConfigProperty -import io.github.truenine.composeserver.resourceAsStream -import io.github.truenine.composeserver.slf4j -import io.github.truenine.composeserver.utf8String import org.springframework.boot.autoconfigure.condition.ConditionalOnBean import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty -import org.springframework.context.annotation.Bean -import org.springframework.context.annotation.Configuration -import org.springframework.context.annotation.DependsOn +import org.springframework.context.annotation.* import org.springframework.core.io.ClassPathResource private val log = slf4j(WeChatPaySingleAutoConfiguration::class) diff --git a/pay/pay-wechat/src/main/kotlin/io/github/truenine/composeserver/pay/wechat/service/impl/WeChatSinglePayService.kt b/pay/pay-wechat/src/main/kotlin/io/github/truenine/composeserver/pay/wechat/service/impl/WeChatSinglePayService.kt index fb590fbe7..18bfba6fd 100644 --- a/pay/pay-wechat/src/main/kotlin/io/github/truenine/composeserver/pay/wechat/service/impl/WeChatSinglePayService.kt +++ b/pay/pay-wechat/src/main/kotlin/io/github/truenine/composeserver/pay/wechat/service/impl/WeChatSinglePayService.kt @@ -5,28 +5,17 @@ import com.wechat.pay.java.core.notification.NotificationParser import com.wechat.pay.java.core.notification.RequestParam import com.wechat.pay.java.service.partnerpayments.app.model.Transaction import com.wechat.pay.java.service.payments.jsapi.JsapiService -import com.wechat.pay.java.service.payments.jsapi.model.Amount -import com.wechat.pay.java.service.payments.jsapi.model.Payer -import com.wechat.pay.java.service.payments.jsapi.model.PrepayRequest -import com.wechat.pay.java.service.payments.jsapi.model.QueryOrderByIdRequest -import com.wechat.pay.java.service.payments.jsapi.model.QueryOrderByOutTradeNoRequest +import com.wechat.pay.java.service.payments.jsapi.model.* import com.wechat.pay.java.service.refund.RefundService import com.wechat.pay.java.service.refund.model.AmountReq import com.wechat.pay.java.service.refund.model.CreateRequest +import io.github.truenine.composeserver.* import io.github.truenine.composeserver.enums.EncryptAlgorithm import io.github.truenine.composeserver.enums.ISO4217 import io.github.truenine.composeserver.generator.IOrderCodeGenerator -import io.github.truenine.composeserver.hasText -import io.github.truenine.composeserver.iso8601LongUtc -import io.github.truenine.composeserver.pay.FindPayOrderDto -import io.github.truenine.composeserver.pay.FindPayOrderVo -import io.github.truenine.composeserver.pay.PaySuccessNotifyVo -import io.github.truenine.composeserver.pay.SinglePayService +import io.github.truenine.composeserver.pay.* import io.github.truenine.composeserver.pay.wechat.properties.WeChatPaySingleConfigProperty -import io.github.truenine.composeserver.security.crypto.CryptographicKeyManager -import io.github.truenine.composeserver.security.crypto.CryptographicOperations -import io.github.truenine.composeserver.security.crypto.encodeBase64String -import io.github.truenine.composeserver.slf4j +import io.github.truenine.composeserver.security.crypto.* import jakarta.servlet.http.HttpServletRequest import jakarta.servlet.http.HttpServletResponse import java.math.BigDecimal diff --git a/psdk/psdk-wxpa/build.gradle.kts b/psdk/psdk-wxpa/build.gradle.kts index a9d7cd302..5f188169c 100644 --- a/psdk/psdk-wxpa/build.gradle.kts +++ b/psdk/psdk-wxpa/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("buildlogic.kotlinspring-conventions") + id("buildlogic.kotlin-spring-boot-conventions") id("buildlogic.spotless-conventions") } diff --git a/psdk/psdk-wxpa/src/main/kotlin/io/github/truenine/composeserver/psdk/wxpa/autoconfig/WxpaAutoConfiguration.kt b/psdk/psdk-wxpa/src/main/kotlin/io/github/truenine/composeserver/psdk/wxpa/autoconfig/WxpaAutoConfiguration.kt index dfd20a6fa..8f1a0d95f 100644 --- a/psdk/psdk-wxpa/src/main/kotlin/io/github/truenine/composeserver/psdk/wxpa/autoconfig/WxpaAutoConfiguration.kt +++ b/psdk/psdk-wxpa/src/main/kotlin/io/github/truenine/composeserver/psdk/wxpa/autoconfig/WxpaAutoConfiguration.kt @@ -3,9 +3,7 @@ package io.github.truenine.composeserver.psdk.wxpa.autoconfig import io.github.truenine.composeserver.consts.SpringBootConfigurationPropertiesPrefixes import io.github.truenine.composeserver.logger import io.github.truenine.composeserver.psdk.wxpa.api.IWxpaWebClient -import io.github.truenine.composeserver.psdk.wxpa.core.WxpaSignatureGenerator -import io.github.truenine.composeserver.psdk.wxpa.core.WxpaTokenManager -import io.github.truenine.composeserver.psdk.wxpa.core.WxpaUserInfoService +import io.github.truenine.composeserver.psdk.wxpa.core.* import io.github.truenine.composeserver.psdk.wxpa.event.WxpaTokenEventManager import io.github.truenine.composeserver.psdk.wxpa.exception.WxpaConfigurationException import io.github.truenine.composeserver.psdk.wxpa.properties.WechatProperties diff --git a/psdk/psdk-wxpa/src/main/kotlin/io/github/truenine/composeserver/psdk/wxpa/core/WxpaSignatureGenerator.kt b/psdk/psdk-wxpa/src/main/kotlin/io/github/truenine/composeserver/psdk/wxpa/core/WxpaSignatureGenerator.kt index ee2b14ace..431164d80 100644 --- a/psdk/psdk-wxpa/src/main/kotlin/io/github/truenine/composeserver/psdk/wxpa/core/WxpaSignatureGenerator.kt +++ b/psdk/psdk-wxpa/src/main/kotlin/io/github/truenine/composeserver/psdk/wxpa/core/WxpaSignatureGenerator.kt @@ -1,13 +1,11 @@ package io.github.truenine.composeserver.psdk.wxpa.core -import io.github.truenine.composeserver.datetime -import io.github.truenine.composeserver.iso8601LongUtc +import io.github.truenine.composeserver.* import io.github.truenine.composeserver.psdk.wxpa.exception.WxpaSignatureException import io.github.truenine.composeserver.psdk.wxpa.model.WxpaSignature import io.github.truenine.composeserver.psdk.wxpa.properties.WxpaProperties import io.github.truenine.composeserver.security.crypto.CryptographicKeyManager import io.github.truenine.composeserver.security.crypto.sha1 -import io.github.truenine.composeserver.slf4j private val log = slf4j() diff --git a/psdk/psdk-wxpa/src/main/kotlin/io/github/truenine/composeserver/psdk/wxpa/core/WxpaTokenManager.kt b/psdk/psdk-wxpa/src/main/kotlin/io/github/truenine/composeserver/psdk/wxpa/core/WxpaTokenManager.kt index 4ae1fd2c4..1471b7783 100644 --- a/psdk/psdk-wxpa/src/main/kotlin/io/github/truenine/composeserver/psdk/wxpa/core/WxpaTokenManager.kt +++ b/psdk/psdk-wxpa/src/main/kotlin/io/github/truenine/composeserver/psdk/wxpa/core/WxpaTokenManager.kt @@ -2,9 +2,7 @@ package io.github.truenine.composeserver.psdk.wxpa.core import io.github.truenine.composeserver.holders.EventPublisherHolder import io.github.truenine.composeserver.psdk.wxpa.api.IWxpaWebClient -import io.github.truenine.composeserver.psdk.wxpa.event.TokenExpiredEvent -import io.github.truenine.composeserver.psdk.wxpa.event.TokenType -import io.github.truenine.composeserver.psdk.wxpa.event.TokenUsedEvent +import io.github.truenine.composeserver.psdk.wxpa.event.* import io.github.truenine.composeserver.psdk.wxpa.exception.WxpaApiException import io.github.truenine.composeserver.psdk.wxpa.exception.WxpaTokenException import io.github.truenine.composeserver.psdk.wxpa.model.WxpaTicket diff --git a/psdk/psdk-wxpa/src/main/kotlin/io/github/truenine/composeserver/psdk/wxpa/service/WxpaService.kt b/psdk/psdk-wxpa/src/main/kotlin/io/github/truenine/composeserver/psdk/wxpa/service/WxpaService.kt index 3fe7e3b32..4a5459fc6 100644 --- a/psdk/psdk-wxpa/src/main/kotlin/io/github/truenine/composeserver/psdk/wxpa/service/WxpaService.kt +++ b/psdk/psdk-wxpa/src/main/kotlin/io/github/truenine/composeserver/psdk/wxpa/service/WxpaService.kt @@ -1,9 +1,7 @@ package io.github.truenine.composeserver.psdk.wxpa.service import io.github.truenine.composeserver.logger -import io.github.truenine.composeserver.psdk.wxpa.core.WxpaSignatureGenerator -import io.github.truenine.composeserver.psdk.wxpa.core.WxpaTokenManager -import io.github.truenine.composeserver.psdk.wxpa.core.WxpaUserInfoService +import io.github.truenine.composeserver.psdk.wxpa.core.* import io.github.truenine.composeserver.psdk.wxpa.model.WxpaSignature import io.github.truenine.composeserver.psdk.wxpa.model.WxpaUserInfo import org.springframework.stereotype.Service diff --git a/psdk/psdk-wxpa/src/test/kotlin/io/github/truenine/composeserver/psdk/wxpa/core/WxpaSignatureGeneratorTest.kt b/psdk/psdk-wxpa/src/test/kotlin/io/github/truenine/composeserver/psdk/wxpa/core/WxpaSignatureGeneratorTest.kt index 8f475f073..20fd4e660 100644 --- a/psdk/psdk-wxpa/src/test/kotlin/io/github/truenine/composeserver/psdk/wxpa/core/WxpaSignatureGeneratorTest.kt +++ b/psdk/psdk-wxpa/src/test/kotlin/io/github/truenine/composeserver/psdk/wxpa/core/WxpaSignatureGeneratorTest.kt @@ -5,10 +5,8 @@ import io.github.truenine.composeserver.psdk.wxpa.properties.WxpaProperties import io.github.truenine.composeserver.security.crypto.sha1 import io.mockk.every import io.mockk.mockk -import kotlin.test.assertEquals -import kotlin.test.assertFalse +import kotlin.test.* import kotlin.test.assertNotNull -import kotlin.test.assertTrue import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Nested import org.junit.jupiter.api.Test diff --git a/psdk/psdk-wxpa/src/test/kotlin/io/github/truenine/composeserver/psdk/wxpa/core/WxpaTokenManagerTest.kt b/psdk/psdk-wxpa/src/test/kotlin/io/github/truenine/composeserver/psdk/wxpa/core/WxpaTokenManagerTest.kt index f7e6587f3..e83a06e4c 100644 --- a/psdk/psdk-wxpa/src/test/kotlin/io/github/truenine/composeserver/psdk/wxpa/core/WxpaTokenManagerTest.kt +++ b/psdk/psdk-wxpa/src/test/kotlin/io/github/truenine/composeserver/psdk/wxpa/core/WxpaTokenManagerTest.kt @@ -4,9 +4,7 @@ import io.github.truenine.composeserver.psdk.wxpa.api.IWxpaWebClient import io.github.truenine.composeserver.psdk.wxpa.exception.WxpaApiException import io.github.truenine.composeserver.psdk.wxpa.exception.WxpaTokenException import io.github.truenine.composeserver.psdk.wxpa.properties.WxpaProperties -import io.mockk.every -import io.mockk.mockk -import io.mockk.verify +import io.mockk.* import kotlin.test.assertEquals import kotlin.test.assertNotNull import kotlin.test.assertTrue diff --git a/psdk/psdk-wxpa/src/test/kotlin/io/github/truenine/composeserver/psdk/wxpa/core/WxpaUserInfoServiceTest.kt b/psdk/psdk-wxpa/src/test/kotlin/io/github/truenine/composeserver/psdk/wxpa/core/WxpaUserInfoServiceTest.kt index b0451b31a..c1527fce2 100644 --- a/psdk/psdk-wxpa/src/test/kotlin/io/github/truenine/composeserver/psdk/wxpa/core/WxpaUserInfoServiceTest.kt +++ b/psdk/psdk-wxpa/src/test/kotlin/io/github/truenine/composeserver/psdk/wxpa/core/WxpaUserInfoServiceTest.kt @@ -4,11 +4,9 @@ import io.github.truenine.composeserver.psdk.wxpa.api.IWxpaWebClient import io.github.truenine.composeserver.psdk.wxpa.properties.WxpaProperties import io.mockk.every import io.mockk.mockk -import kotlin.test.assertEquals -import kotlin.test.assertFalse +import kotlin.test.* import kotlin.test.assertNotNull import kotlin.test.assertNull -import kotlin.test.assertTrue import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Nested import org.junit.jupiter.api.Test diff --git a/psdk/psdk-wxpa/src/test/kotlin/io/github/truenine/composeserver/psdk/wxpa/event/WxpaTokenEventManagerTest.kt b/psdk/psdk-wxpa/src/test/kotlin/io/github/truenine/composeserver/psdk/wxpa/event/WxpaTokenEventManagerTest.kt index 366ad4f2a..5f5d5a648 100644 --- a/psdk/psdk-wxpa/src/test/kotlin/io/github/truenine/composeserver/psdk/wxpa/event/WxpaTokenEventManagerTest.kt +++ b/psdk/psdk-wxpa/src/test/kotlin/io/github/truenine/composeserver/psdk/wxpa/event/WxpaTokenEventManagerTest.kt @@ -5,10 +5,7 @@ import io.github.truenine.composeserver.psdk.wxpa.core.WxpaTokenManager import io.github.truenine.composeserver.psdk.wxpa.model.WxpaTicket import io.github.truenine.composeserver.psdk.wxpa.model.WxpaToken import io.github.truenine.composeserver.psdk.wxpa.properties.WxpaProperties -import io.mockk.clearAllMocks -import io.mockk.every -import io.mockk.mockk -import io.mockk.verify +import io.mockk.* import java.time.Duration import kotlin.test.assertEquals import kotlin.test.assertNotNull diff --git a/psdk/psdk-wxpa/src/test/kotlin/io/github/truenine/composeserver/psdk/wxpa/event/WxpaTokenEventTest.kt b/psdk/psdk-wxpa/src/test/kotlin/io/github/truenine/composeserver/psdk/wxpa/event/WxpaTokenEventTest.kt index 7c519e925..879cea757 100644 --- a/psdk/psdk-wxpa/src/test/kotlin/io/github/truenine/composeserver/psdk/wxpa/event/WxpaTokenEventTest.kt +++ b/psdk/psdk-wxpa/src/test/kotlin/io/github/truenine/composeserver/psdk/wxpa/event/WxpaTokenEventTest.kt @@ -3,9 +3,7 @@ package io.github.truenine.composeserver.psdk.wxpa.event import io.github.truenine.composeserver.psdk.wxpa.model.WxpaTicket import io.github.truenine.composeserver.psdk.wxpa.model.WxpaToken import java.time.LocalDateTime -import kotlin.test.assertEquals -import kotlin.test.assertNotNull -import kotlin.test.assertTrue +import kotlin.test.* import org.junit.jupiter.api.Nested import org.junit.jupiter.api.Test diff --git a/psdk/psdk-wxpa/src/test/kotlin/io/github/truenine/composeserver/psdk/wxpa/integration/WxpaIntegrationTest.kt b/psdk/psdk-wxpa/src/test/kotlin/io/github/truenine/composeserver/psdk/wxpa/integration/WxpaIntegrationTest.kt index aed53c230..582396d31 100644 --- a/psdk/psdk-wxpa/src/test/kotlin/io/github/truenine/composeserver/psdk/wxpa/integration/WxpaIntegrationTest.kt +++ b/psdk/psdk-wxpa/src/test/kotlin/io/github/truenine/composeserver/psdk/wxpa/integration/WxpaIntegrationTest.kt @@ -7,11 +7,9 @@ import io.github.truenine.composeserver.psdk.wxpa.exception.WxpaApiException import io.github.truenine.composeserver.psdk.wxpa.service.WxpaService import io.github.truenine.composeserver.security.crypto.sha1 import jakarta.annotation.Resource -import kotlin.test.assertEquals -import kotlin.test.assertFalse +import kotlin.test.* import kotlin.test.assertNotNull import kotlin.test.assertNull -import kotlin.test.assertTrue import org.junit.jupiter.api.Nested import org.junit.jupiter.api.Test import org.junit.jupiter.api.assertThrows diff --git a/psdk/psdk-wxpa/src/test/kotlin/io/github/truenine/composeserver/psdk/wxpa/service/WxpaServiceTest.kt b/psdk/psdk-wxpa/src/test/kotlin/io/github/truenine/composeserver/psdk/wxpa/service/WxpaServiceTest.kt index b4de9c331..e0b6578ea 100644 --- a/psdk/psdk-wxpa/src/test/kotlin/io/github/truenine/composeserver/psdk/wxpa/service/WxpaServiceTest.kt +++ b/psdk/psdk-wxpa/src/test/kotlin/io/github/truenine/composeserver/psdk/wxpa/service/WxpaServiceTest.kt @@ -1,13 +1,9 @@ package io.github.truenine.composeserver.psdk.wxpa.service -import io.github.truenine.composeserver.psdk.wxpa.core.WxpaSignatureGenerator -import io.github.truenine.composeserver.psdk.wxpa.core.WxpaTokenManager -import io.github.truenine.composeserver.psdk.wxpa.core.WxpaUserInfoService +import io.github.truenine.composeserver.psdk.wxpa.core.* import io.github.truenine.composeserver.psdk.wxpa.model.WxpaSignature import io.github.truenine.composeserver.psdk.wxpa.model.WxpaUserInfo -import io.mockk.every -import io.mockk.mockk -import io.mockk.verify +import io.mockk.* import kotlin.test.assertEquals import kotlin.test.assertNotNull import kotlin.test.assertNull diff --git a/rds/rds-crud/build.gradle.kts b/rds/rds-crud/build.gradle.kts index a39d5f863..96980dee6 100644 --- a/rds/rds-crud/build.gradle.kts +++ b/rds/rds-crud/build.gradle.kts @@ -1,6 +1,6 @@ plugins { alias(libs.plugins.com.google.devtools.ksp) - id("buildlogic.kotlinspring-conventions") + id("buildlogic.kotlin-spring-boot-conventions") id("buildlogic.spotless-conventions") } diff --git a/rds/rds-crud/src/test/kotlin/io/github/truenine/composeserver/rds/crud/transaction/TestEntity.kt b/rds/rds-crud/src/test/kotlin/io/github/truenine/composeserver/rds/crud/transaction/TestEntity.kt index 9baa8f4b5..862a34b66 100644 --- a/rds/rds-crud/src/test/kotlin/io/github/truenine/composeserver/rds/crud/transaction/TestEntity.kt +++ b/rds/rds-crud/src/test/kotlin/io/github/truenine/composeserver/rds/crud/transaction/TestEntity.kt @@ -1,9 +1,6 @@ package io.github.truenine.composeserver.rds.crud.transaction -import org.babyfish.jimmer.sql.Entity -import org.babyfish.jimmer.sql.GeneratedValue -import org.babyfish.jimmer.sql.GenerationType -import org.babyfish.jimmer.sql.Id +import org.babyfish.jimmer.sql.* @Entity interface TestEntity { diff --git a/rds/rds-crud/src/test/kotlin/io/github/truenine/composeserver/rds/crud/transaction/TransactionTest.kt b/rds/rds-crud/src/test/kotlin/io/github/truenine/composeserver/rds/crud/transaction/TransactionTest.kt index 7fe4ab5c7..5679768ff 100644 --- a/rds/rds-crud/src/test/kotlin/io/github/truenine/composeserver/rds/crud/transaction/TransactionTest.kt +++ b/rds/rds-crud/src/test/kotlin/io/github/truenine/composeserver/rds/crud/transaction/TransactionTest.kt @@ -3,11 +3,7 @@ package io.github.truenine.composeserver.rds.crud.transaction import io.github.truenine.composeserver.testtoolkit.RDBRollback import io.github.truenine.composeserver.testtoolkit.testcontainers.IDatabasePostgresqlContainer import jakarta.annotation.Resource -import kotlin.test.Test -import kotlin.test.assertEquals -import kotlin.test.assertNotNull -import kotlin.test.assertNull -import kotlin.test.assertTrue +import kotlin.test.* import org.junit.jupiter.api.BeforeEach import org.springframework.boot.test.context.SpringBootTest import org.springframework.jdbc.core.JdbcTemplate diff --git a/rds/rds-flyway-migration-mysql8/build.gradle.kts b/rds/rds-flyway-migration-mysql8/build.gradle.kts index f73bb7175..5c475d90d 100644 --- a/rds/rds-flyway-migration-mysql8/build.gradle.kts +++ b/rds/rds-flyway-migration-mysql8/build.gradle.kts @@ -1,6 +1,6 @@ plugins { alias(libs.plugins.com.google.devtools.ksp) - id("buildlogic.kotlinspring-conventions") + id("buildlogic.kotlin-spring-boot-conventions") id("buildlogic.spotless-conventions") id("buildlogic.spotless-sql-conventions") } diff --git a/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/IdempotencyTest.kt b/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/IdempotencyTest.kt index dd7d5fef0..b4b1307a4 100644 --- a/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/IdempotencyTest.kt +++ b/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/IdempotencyTest.kt @@ -4,9 +4,7 @@ import io.github.truenine.composeserver.testtoolkit.testcontainers.IDatabaseMysq import jakarta.annotation.Resource import kotlin.test.assertEquals import kotlin.test.assertTrue -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Nested -import org.junit.jupiter.api.Test +import org.junit.jupiter.api.* import org.springframework.boot.test.context.SpringBootTest import org.springframework.jdbc.core.JdbcTemplate import org.springframework.test.annotation.Rollback diff --git a/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/TestFlywayConfiguration.kt b/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/TestFlywayConfiguration.kt index d70341453..fd62bbca5 100644 --- a/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/TestFlywayConfiguration.kt +++ b/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/TestFlywayConfiguration.kt @@ -4,9 +4,7 @@ import javax.sql.DataSource import org.flywaydb.core.Flyway import org.springframework.boot.autoconfigure.condition.ConditionalOnClass import org.springframework.boot.flyway.autoconfigure.FlywayMigrationInitializer -import org.springframework.context.annotation.Bean -import org.springframework.context.annotation.Configuration -import org.springframework.context.annotation.Primary +import org.springframework.context.annotation.* @Configuration @ConditionalOnClass(Flyway::class) diff --git a/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/V1CtIdxTest.kt b/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/V1CtIdxTest.kt index 34e4acf4a..f850b5cb9 100644 --- a/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/V1CtIdxTest.kt +++ b/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/V1CtIdxTest.kt @@ -4,9 +4,7 @@ import io.github.truenine.composeserver.testtoolkit.testcontainers.IDatabaseMysq import jakarta.annotation.Resource import kotlin.test.assertEquals import kotlin.test.assertTrue -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Nested -import org.junit.jupiter.api.Test +import org.junit.jupiter.api.* import org.springframework.boot.test.context.SpringBootTest import org.springframework.jdbc.core.JdbcTemplate import org.springframework.test.annotation.Rollback diff --git a/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/V2BaseStructTest.kt b/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/V2BaseStructTest.kt index 02cd29bdf..c1f4b743c 100644 --- a/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/V2BaseStructTest.kt +++ b/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/V2BaseStructTest.kt @@ -4,9 +4,7 @@ import io.github.truenine.composeserver.testtoolkit.testcontainers.IDatabaseMysq import jakarta.annotation.Resource import kotlin.test.assertEquals import kotlin.test.assertTrue -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Nested -import org.junit.jupiter.api.Test +import org.junit.jupiter.api.* import org.springframework.boot.test.context.SpringBootTest import org.springframework.jdbc.core.JdbcTemplate import org.springframework.test.annotation.Rollback diff --git a/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/V3TreeStructTest.kt b/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/V3TreeStructTest.kt index 5b1cf4178..3a0d9fa6a 100644 --- a/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/V3TreeStructTest.kt +++ b/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/V3TreeStructTest.kt @@ -4,9 +4,7 @@ import io.github.truenine.composeserver.testtoolkit.testcontainers.IDatabaseMysq import jakarta.annotation.Resource import kotlin.test.assertEquals import kotlin.test.assertTrue -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Nested -import org.junit.jupiter.api.Test +import org.junit.jupiter.api.* import org.springframework.boot.test.context.SpringBootTest import org.springframework.jdbc.core.JdbcTemplate import org.springframework.test.annotation.Rollback diff --git a/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/V4PresortTreeStructTest.kt b/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/V4PresortTreeStructTest.kt index db4f51683..00e15b454 100644 --- a/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/V4PresortTreeStructTest.kt +++ b/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/V4PresortTreeStructTest.kt @@ -4,9 +4,7 @@ import io.github.truenine.composeserver.testtoolkit.testcontainers.IDatabaseMysq import jakarta.annotation.Resource import kotlin.test.assertEquals import kotlin.test.assertTrue -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Nested -import org.junit.jupiter.api.Test +import org.junit.jupiter.api.* import org.springframework.boot.test.context.SpringBootTest import org.springframework.jdbc.core.JdbcTemplate import org.springframework.test.annotation.Rollback diff --git a/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/V5AllToNullableTest.kt b/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/V5AllToNullableTest.kt index 6d6f000db..142362b74 100644 --- a/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/V5AllToNullableTest.kt +++ b/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/V5AllToNullableTest.kt @@ -4,9 +4,7 @@ import io.github.truenine.composeserver.testtoolkit.testcontainers.IDatabaseMysq import jakarta.annotation.Resource import kotlin.test.assertEquals import kotlin.test.assertTrue -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Nested -import org.junit.jupiter.api.Test +import org.junit.jupiter.api.* import org.springframework.boot.test.context.SpringBootTest import org.springframework.jdbc.core.JdbcTemplate import org.springframework.test.annotation.Rollback diff --git a/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/flyway/AddBaseStructMigrationTest.kt b/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/flyway/AddBaseStructMigrationTest.kt index 61d3feae2..252959009 100644 --- a/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/flyway/AddBaseStructMigrationTest.kt +++ b/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/flyway/AddBaseStructMigrationTest.kt @@ -4,9 +4,7 @@ import io.github.truenine.composeserver.testtoolkit.testcontainers.IDatabaseMysq import jakarta.annotation.Resource import kotlin.test.assertEquals import kotlin.test.assertTrue -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Nested -import org.junit.jupiter.api.Test +import org.junit.jupiter.api.* import org.springframework.boot.test.context.SpringBootTest import org.springframework.jdbc.core.JdbcTemplate import org.springframework.test.annotation.Rollback diff --git a/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/flyway/AddPresortTreeStructMigrationTest.kt b/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/flyway/AddPresortTreeStructMigrationTest.kt index cc4f3813c..ec7c78ae3 100644 --- a/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/flyway/AddPresortTreeStructMigrationTest.kt +++ b/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/flyway/AddPresortTreeStructMigrationTest.kt @@ -4,9 +4,7 @@ import io.github.truenine.composeserver.testtoolkit.testcontainers.IDatabaseMysq import jakarta.annotation.Resource import kotlin.test.assertEquals import kotlin.test.assertTrue -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Nested -import org.junit.jupiter.api.Test +import org.junit.jupiter.api.* import org.springframework.boot.test.context.SpringBootTest import org.springframework.jdbc.core.JdbcTemplate import org.springframework.test.annotation.Rollback diff --git a/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/flyway/AddTreeStructMigrationTest.kt b/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/flyway/AddTreeStructMigrationTest.kt index b0e6d937d..33c5b61b3 100644 --- a/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/flyway/AddTreeStructMigrationTest.kt +++ b/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/flyway/AddTreeStructMigrationTest.kt @@ -4,9 +4,7 @@ import io.github.truenine.composeserver.testtoolkit.testcontainers.IDatabaseMysq import jakarta.annotation.Resource import kotlin.test.assertEquals import kotlin.test.assertTrue -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Nested -import org.junit.jupiter.api.Test +import org.junit.jupiter.api.* import org.springframework.boot.test.context.SpringBootTest import org.springframework.jdbc.core.JdbcTemplate import org.springframework.test.annotation.Rollback diff --git a/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/flyway/AllToNullableMigrationTest.kt b/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/flyway/AllToNullableMigrationTest.kt index 129bd902b..561ced7fd 100644 --- a/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/flyway/AllToNullableMigrationTest.kt +++ b/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/flyway/AllToNullableMigrationTest.kt @@ -4,9 +4,7 @@ import io.github.truenine.composeserver.testtoolkit.testcontainers.IDatabaseMysq import jakarta.annotation.Resource import kotlin.test.assertEquals import kotlin.test.assertTrue -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Nested -import org.junit.jupiter.api.Test +import org.junit.jupiter.api.* import org.springframework.boot.test.context.SpringBootTest import org.springframework.jdbc.core.JdbcTemplate import org.springframework.test.annotation.Rollback diff --git a/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/flyway/BaseStructToJimmerStyleMigrationTest.kt b/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/flyway/BaseStructToJimmerStyleMigrationTest.kt index ea55c0626..e0e4d94de 100644 --- a/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/flyway/BaseStructToJimmerStyleMigrationTest.kt +++ b/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/flyway/BaseStructToJimmerStyleMigrationTest.kt @@ -4,9 +4,7 @@ import io.github.truenine.composeserver.testtoolkit.testcontainers.IDatabaseMysq import jakarta.annotation.Resource import kotlin.test.assertEquals import kotlin.test.assertTrue -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Nested -import org.junit.jupiter.api.Test +import org.junit.jupiter.api.* import org.springframework.boot.test.context.SpringBootTest import org.springframework.jdbc.core.JdbcTemplate import org.springframework.test.annotation.Rollback diff --git a/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/flyway/CtIdxMigrationTest.kt b/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/flyway/CtIdxMigrationTest.kt index 882ec73ac..3ddd54e30 100644 --- a/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/flyway/CtIdxMigrationTest.kt +++ b/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/flyway/CtIdxMigrationTest.kt @@ -4,9 +4,7 @@ import io.github.truenine.composeserver.testtoolkit.testcontainers.IDatabaseMysq import jakarta.annotation.Resource import kotlin.test.assertEquals import kotlin.test.assertTrue -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Nested -import org.junit.jupiter.api.Test +import org.junit.jupiter.api.* import org.springframework.boot.test.context.SpringBootTest import org.springframework.jdbc.core.JdbcTemplate import org.springframework.test.annotation.Rollback diff --git a/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/flyway/RmBaseStructMigrationTest.kt b/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/flyway/RmBaseStructMigrationTest.kt index 443da0b4c..e5252e1f5 100644 --- a/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/flyway/RmBaseStructMigrationTest.kt +++ b/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/flyway/RmBaseStructMigrationTest.kt @@ -4,9 +4,7 @@ import io.github.truenine.composeserver.testtoolkit.testcontainers.IDatabaseMysq import jakarta.annotation.Resource import kotlin.test.assertEquals import kotlin.test.assertTrue -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Nested -import org.junit.jupiter.api.Test +import org.junit.jupiter.api.* import org.springframework.boot.test.context.SpringBootTest import org.springframework.jdbc.core.JdbcTemplate import org.springframework.test.annotation.Rollback diff --git a/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/flyway/RmPresortTreeStructMigrationTest.kt b/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/flyway/RmPresortTreeStructMigrationTest.kt index e7eb5c31a..c4c7b0842 100644 --- a/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/flyway/RmPresortTreeStructMigrationTest.kt +++ b/rds/rds-flyway-migration-mysql8/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationmysql8/flyway/RmPresortTreeStructMigrationTest.kt @@ -4,9 +4,7 @@ import io.github.truenine.composeserver.testtoolkit.testcontainers.IDatabaseMysq import jakarta.annotation.Resource import kotlin.test.assertEquals import kotlin.test.assertTrue -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Nested -import org.junit.jupiter.api.Test +import org.junit.jupiter.api.* import org.springframework.boot.test.context.SpringBootTest import org.springframework.jdbc.core.JdbcTemplate import org.springframework.test.annotation.Rollback diff --git a/rds/rds-flyway-migration-postgresql/build.gradle.kts b/rds/rds-flyway-migration-postgresql/build.gradle.kts index 5a69a28d2..4c0789da7 100644 --- a/rds/rds-flyway-migration-postgresql/build.gradle.kts +++ b/rds/rds-flyway-migration-postgresql/build.gradle.kts @@ -1,6 +1,6 @@ plugins { alias(libs.plugins.com.google.devtools.ksp) - id("buildlogic.kotlinspring-conventions") + id("buildlogic.kotlin-spring-boot-conventions") id("buildlogic.spotless-conventions") id("buildlogic.spotless-sql-conventions") } diff --git a/rds/rds-flyway-migration-shared/CLAUDE.md b/rds/rds-flyway-migration-shared/CLAUDE.md deleted file mode 100644 index 318874a9f..000000000 --- a/rds/rds-flyway-migration-shared/CLAUDE.md +++ /dev/null @@ -1,168 +0,0 @@ -# CLAUDE.md - -This file provides guidance to Claude Code (claude.ai/code) when working with code in this Module. - -## Overview - -The `flyway-migration-shared` module defines common specifications and implementation requirements for database migration in the framework. This module provides unified implementation standards for database structure management functions/stored procedures across different database systems (PostgreSQL, MySQL, Oracle, SQL Server, etc.). - -## `ct_idx` Function/Stored Procedure - -Creates an index for a specified column in a specified table (if the column exists and the index does not exist). Supports idempotent operations and can be called repeatedly without errors. - -**Parameters:** - -- `tab_name`: Table name (varchar(128)) -- `col_name`: Column name (varchar(255)) - -**Implementation Logic:** - -1. Check if the specified column exists in the specified table -2. If the column exists, check if a corresponding index already exists -3. Create the index only when the column exists and the index does not exist -4. Index naming convention: `{col_name}_idx` - -**Core SQL Operations:** - -- Column existence check: `select column_name from information_schema.columns where table_name = ? and column_name = ?` -- Index existence check: `select index_name from information_schema.statistics where table_name = ? and index_name = ?` -- Index creation: `create index {col_name}_idx on {tab_name} ({col_name})` - -## `add_base_struct` Function/Stored Procedure - -**Function:** Add Compose Server standard base fields to a table - -**Parameters:** - -- `tab_name`: Table name (VARCHAR(128)) - -**Standard Fields:** - -- `id`: Primary key field (BIGINT NOT NULL PRIMARY KEY), default value is non-auto-increment int64 type, **must not set any auto-increment strategy, should be handled by the application** -- `rlv`: Row Lock Version (INT DEFAULT 0), default value is 0 of int32 type, cannot be NULL -- `crd`: Created Row Datetime (TIMESTAMP DEFAULT CURRENT_TIMESTAMP), timezone-independent millisecond timestamp, default value is the timestamp when the table record is inserted -- `mrd`: Modify Row Datetime (TIMESTAMP DEFAULT null), timezone-independent millisecond timestamp, default is null -- `ldf`: Logic Delete Flag (TIMESTAMP NULL DEFAULT NULL) - -**Implementation Requirements:** - -- Check if fields already exist to avoid duplicate additions -- For tables with existing data, properly handle the addition of the ID field - - PostgreSQL: Use temporary sequence to generate IDs for existing data - - MySQL: Use AUTO_INCREMENT feature -- Support idempotent operations - -## `rm_base_struct` Function/Stored Procedure - -**Function:** Remove base structure fields from a table - -**Parameters:** - -- `tab_name`: Table name (VARCHAR(128)) - -**Implementation Requirements:** - -- Remove fields in the correct order (remove constraints first, then remove fields) -- Safely handle primary key constraint deletion -- Support idempotent operations - -## `add_tree_struct` Function/Stored Procedure - -**Function:** Add tree structure support fields to a table - -**Parameters:** - -- `tab_name`: Table name (VARCHAR(128)) - -**Tree Structure Fields:** - -- `rpi`: Row Parent Id (BIGINT DEFAULT NULL) - -**Implementation Requirements:** - -- Create index for `rpi` field -- Support idempotent operations - -## `add_presort_tree_struct` Function/Stored Procedure - -**Function:** Add pre-sorted tree structure support fields to a table - -**Parameters:** - -- `tab_name`: Table name (VARCHAR(128)) - -**Pre-sorted Tree Fields:** - -- `rpi`: Row Parent Id (BIGINT DEFAULT NULL) -- `rln`: Row Left Node (BIGINT DEFAULT 1) -- `rrn`: Row Right Node (BIGINT DEFAULT 2) -- `nlv`: Node Level (INT DEFAULT 0) -- `tgi`: Tree Group Id (VARCHAR(255)) - -**Implementation Requirements:** - -- Create corresponding indexes for all fields -- Support nested set model tree structure -- Support idempotent operations - -## `all_to_nullable` Function/Stored Procedure - -**Function:** Set all non-primary key fields in a table to nullable - -**Parameters:** - -- `tab_name`: Table name (VARCHAR(128)) - -**Implementation Requirements:** - -- Exclude primary key fields -- Remove NOT NULL constraints from fields -- Remove default values from fields -- Support idempotent operations - -## Implementation Specifications - -### General Requirements - -1. **Idempotency**: All functions/stored procedures must support repeated execution without errors -2. **Security**: Use parameterized queries to prevent SQL injection -3. **Error Handling**: Properly handle exceptional situations and provide meaningful error messages -4. **Performance**: Check if objects exist before operations to avoid unnecessary operations -5. **Version Inclusion**: add functions and rm functions should appear in the same version .sql file - -### Database-Specific Requirements - -#### PostgreSQL - -- Use PL/pgSQL language -- Use `format()` function for dynamic SQL construction -- Use `%I` identifier escaping to prevent injection -- Support array operations and loop structures - -#### Postgresql - -**Function:** Provide implicit conversions between common data types - -**Supported Conversions:** - -- json ↔ varchar -- bigint ↔ varchar - -**Implementation Requirements:** - -- Use `with inout as implicit` syntax -- Delete existing conversions first, then create new ones - -#### MySQL - -- Use stored procedure syntax -- Use `delimiter` to handle statement separators -- Use prepared statements to execute dynamic SQL -- Use `information_schema` for metadata queries - -### Naming Conventions - -- Function/stored procedure names use lowercase letters separated by underscores -- Index naming: `{column_name}_idx` -- Constraint naming follows database default rules -- Temporary objects use `temp_` prefix diff --git a/rds/rds-flyway-migration-shared/build.gradle.kts b/rds/rds-flyway-migration-shared/build.gradle.kts index 254d73f0b..d091886ce 100644 --- a/rds/rds-flyway-migration-shared/build.gradle.kts +++ b/rds/rds-flyway-migration-shared/build.gradle.kts @@ -1,6 +1,6 @@ plugins { alias(libs.plugins.com.google.devtools.ksp) - id("buildlogic.kotlinspring-conventions") + id("buildlogic.kotlin-spring-boot-conventions") id("buildlogic.spotless-conventions") } diff --git a/rds/rds-flyway-migration-shared/src/main/kotlin/io/github/truenine/composeserver/rds/flywaymigrationshared/autoconfig/FlywayPropertiesOverrideAutoConfiguration.kt b/rds/rds-flyway-migration-shared/src/main/kotlin/io/github/truenine/composeserver/rds/flywaymigrationshared/autoconfig/FlywayPropertiesOverrideAutoConfiguration.kt index e13b19249..2b17dee5e 100644 --- a/rds/rds-flyway-migration-shared/src/main/kotlin/io/github/truenine/composeserver/rds/flywaymigrationshared/autoconfig/FlywayPropertiesOverrideAutoConfiguration.kt +++ b/rds/rds-flyway-migration-shared/src/main/kotlin/io/github/truenine/composeserver/rds/flywaymigrationshared/autoconfig/FlywayPropertiesOverrideAutoConfiguration.kt @@ -2,9 +2,7 @@ package io.github.truenine.composeserver.rds.flywaymigrationshared.autoconfig import org.springframework.beans.factory.annotation.Value import org.springframework.boot.flyway.autoconfigure.FlywayProperties -import org.springframework.context.annotation.Bean -import org.springframework.context.annotation.Configuration -import org.springframework.context.annotation.Primary +import org.springframework.context.annotation.* @Configuration class FlywayPropertiesOverrideAutoConfiguration { diff --git a/rds/rds-flyway-migration-shared/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationshared/autoconfig/FlywayPropertiesOverrideAutoConfigurationTest.kt b/rds/rds-flyway-migration-shared/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationshared/autoconfig/FlywayPropertiesOverrideAutoConfigurationTest.kt index ffe8f8a03..727033c45 100644 --- a/rds/rds-flyway-migration-shared/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationshared/autoconfig/FlywayPropertiesOverrideAutoConfigurationTest.kt +++ b/rds/rds-flyway-migration-shared/src/test/kotlin/io/github/truenine/composeserver/rds/flywaymigrationshared/autoconfig/FlywayPropertiesOverrideAutoConfigurationTest.kt @@ -3,9 +3,7 @@ package io.github.truenine.composeserver.rds.flywaymigrationshared.autoconfig import io.github.truenine.composeserver.rds.flywaymigrationshared.TestEntrance import io.github.truenine.composeserver.testtoolkit.testcontainers.IDatabasePostgresqlContainer import jakarta.annotation.Resource -import kotlin.test.Test -import kotlin.test.assertEquals -import kotlin.test.assertTrue +import kotlin.test.* import org.springframework.boot.flyway.autoconfigure.FlywayProperties import org.springframework.boot.test.context.SpringBootTest import org.springframework.context.ApplicationContext diff --git a/rds/rds-jimmer-ext-postgres/build.gradle.kts b/rds/rds-jimmer-ext-postgres/build.gradle.kts index beecaaf58..7d89204c8 100644 --- a/rds/rds-jimmer-ext-postgres/build.gradle.kts +++ b/rds/rds-jimmer-ext-postgres/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("buildlogic.kotlinspring-conventions") + id("buildlogic.kotlin-spring-boot-conventions") id("buildlogic.spotless-conventions") } diff --git a/rds/rds-jimmer-ext-postgres/src/main/kotlin/io/github/truenine/composeserver/rds/jimmerextpostgres/StringFns.kt b/rds/rds-jimmer-ext-postgres/src/main/kotlin/io/github/truenine/composeserver/rds/jimmerextpostgres/StringFns.kt index 86730b443..d5aaef06a 100644 --- a/rds/rds-jimmer-ext-postgres/src/main/kotlin/io/github/truenine/composeserver/rds/jimmerextpostgres/StringFns.kt +++ b/rds/rds-jimmer-ext-postgres/src/main/kotlin/io/github/truenine/composeserver/rds/jimmerextpostgres/StringFns.kt @@ -1,8 +1,6 @@ package io.github.truenine.composeserver.rds.jimmerextpostgres -import org.babyfish.jimmer.sql.kt.ast.expression.KNonNullExpression -import org.babyfish.jimmer.sql.kt.ast.expression.KNullablePropExpression -import org.babyfish.jimmer.sql.kt.ast.expression.sql +import org.babyfish.jimmer.sql.kt.ast.expression.* /** * ## Raw substr diff --git a/rds/rds-shared/build.gradle.kts b/rds/rds-shared/build.gradle.kts index de0ab6988..c14f5a17e 100644 --- a/rds/rds-shared/build.gradle.kts +++ b/rds/rds-shared/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("buildlogic.kotlinspring-conventions") + id("buildlogic.kotlin-spring-boot-conventions") alias(libs.plugins.com.google.devtools.ksp) id("buildlogic.spotless-conventions") } diff --git a/rds/rds-shared/src/main/kotlin/io/github/truenine/composeserver/rds/SpringPageExtensions.kt b/rds/rds-shared/src/main/kotlin/io/github/truenine/composeserver/rds/SpringPageExtensions.kt index 81329b7f5..7f0a44965 100644 --- a/rds/rds-shared/src/main/kotlin/io/github/truenine/composeserver/rds/SpringPageExtensions.kt +++ b/rds/rds-shared/src/main/kotlin/io/github/truenine/composeserver/rds/SpringPageExtensions.kt @@ -3,9 +3,7 @@ package io.github.truenine.composeserver.rds import io.github.truenine.composeserver.Pq import io.github.truenine.composeserver.Pr import io.github.truenine.composeserver.domain.IPage -import org.springframework.data.domain.Page -import org.springframework.data.domain.PageRequest -import org.springframework.data.domain.Pageable +import org.springframework.data.domain.* /** # Wrap paging result into a wrapper object */ @Deprecated("Use toPr or toIPage which are more idiomatic for Kotlin", replaceWith = ReplaceWith("toPr()", "io.github.truenine.composeserver.rds.toPr")) diff --git a/rds/rds-shared/src/main/kotlin/io/github/truenine/composeserver/rds/autoconfig/JimmerAutoConfiguration.kt b/rds/rds-shared/src/main/kotlin/io/github/truenine/composeserver/rds/autoconfig/JimmerAutoConfiguration.kt index 20ac797f3..671f8f791 100644 --- a/rds/rds-shared/src/main/kotlin/io/github/truenine/composeserver/rds/autoconfig/JimmerAutoConfiguration.kt +++ b/rds/rds-shared/src/main/kotlin/io/github/truenine/composeserver/rds/autoconfig/JimmerAutoConfiguration.kt @@ -1,10 +1,7 @@ package io.github.truenine.composeserver.rds.autoconfig import io.github.truenine.composeserver.generator.ISnowflakeGenerator -import io.github.truenine.composeserver.rds.converters.DurationScalarProvider -import io.github.truenine.composeserver.rds.converters.IIntEnumJimmerProvider -import io.github.truenine.composeserver.rds.converters.IStringEnumJimmerProvider -import io.github.truenine.composeserver.rds.converters.PeriodScalarProvider +import io.github.truenine.composeserver.rds.converters.* import io.github.truenine.composeserver.rds.generators.JimmerSnowflakeLongIdGenerator import io.github.truenine.composeserver.rds.generators.JimmerSnowflakeStringIdGenerator import io.github.truenine.composeserver.rds.interceptors.JimmerEntityDraftInterceptor diff --git a/rds/rds-shared/src/main/kotlin/io/github/truenine/composeserver/rds/entities/IEntity.kt b/rds/rds-shared/src/main/kotlin/io/github/truenine/composeserver/rds/entities/IEntity.kt index aff101443..2807676d9 100644 --- a/rds/rds-shared/src/main/kotlin/io/github/truenine/composeserver/rds/entities/IEntity.kt +++ b/rds/rds-shared/src/main/kotlin/io/github/truenine/composeserver/rds/entities/IEntity.kt @@ -1,11 +1,7 @@ package io.github.truenine.composeserver.rds.entities import io.github.truenine.composeserver.instant -import org.babyfish.jimmer.sql.Column -import org.babyfish.jimmer.sql.Default -import org.babyfish.jimmer.sql.LogicalDeleted -import org.babyfish.jimmer.sql.MappedSuperclass -import org.babyfish.jimmer.sql.Version +import org.babyfish.jimmer.sql.* @MappedSuperclass interface IEntity : IPersistentEntity { diff --git a/rds/rds-shared/src/main/kotlin/io/github/truenine/composeserver/rds/entities/IPersistentEntity.kt b/rds/rds-shared/src/main/kotlin/io/github/truenine/composeserver/rds/entities/IPersistentEntity.kt index 3bc165db1..87c91b901 100644 --- a/rds/rds-shared/src/main/kotlin/io/github/truenine/composeserver/rds/entities/IPersistentEntity.kt +++ b/rds/rds-shared/src/main/kotlin/io/github/truenine/composeserver/rds/entities/IPersistentEntity.kt @@ -4,9 +4,7 @@ import io.github.truenine.composeserver.RefId import io.github.truenine.composeserver.rds.converters.JimmerLongToStringConverter import io.github.truenine.composeserver.rds.generators.JimmerSnowflakeLongIdGenerator import org.babyfish.jimmer.jackson.JsonConverter -import org.babyfish.jimmer.sql.GeneratedValue -import org.babyfish.jimmer.sql.Id -import org.babyfish.jimmer.sql.MappedSuperclass +import org.babyfish.jimmer.sql.* @MappedSuperclass interface IPersistentEntity { diff --git a/rds/rds-shared/src/test/kotlin/io/github/truenine/composeserver/rds/DisRuleFnsTest.kt b/rds/rds-shared/src/test/kotlin/io/github/truenine/composeserver/rds/DisRuleFnsTest.kt index 000c9c780..303150fb5 100644 --- a/rds/rds-shared/src/test/kotlin/io/github/truenine/composeserver/rds/DisRuleFnsTest.kt +++ b/rds/rds-shared/src/test/kotlin/io/github/truenine/composeserver/rds/DisRuleFnsTest.kt @@ -2,11 +2,7 @@ package io.github.truenine.composeserver.rds import io.github.truenine.composeserver.domain.DisRule import io.github.truenine.composeserver.rds.enums.DisTyping -import kotlin.test.assertContentEquals -import kotlin.test.assertEquals -import kotlin.test.assertFails -import kotlin.test.assertFalse -import kotlin.test.assertTrue +import kotlin.test.* import org.junit.jupiter.api.Test import tools.jackson.databind.ObjectMapper import tools.jackson.module.kotlin.readValue diff --git a/rds/rds-shared/src/test/kotlin/io/github/truenine/composeserver/rds/converters/PeriodScalarProviderTest.kt b/rds/rds-shared/src/test/kotlin/io/github/truenine/composeserver/rds/converters/PeriodScalarProviderTest.kt index 55c44c6a1..ed98adcd3 100644 --- a/rds/rds-shared/src/test/kotlin/io/github/truenine/composeserver/rds/converters/PeriodScalarProviderTest.kt +++ b/rds/rds-shared/src/test/kotlin/io/github/truenine/composeserver/rds/converters/PeriodScalarProviderTest.kt @@ -2,9 +2,7 @@ package io.github.truenine.composeserver.rds.converters import java.time.Period import java.time.format.DateTimeParseException -import kotlin.test.Test -import kotlin.test.assertEquals -import kotlin.test.assertFailsWith +import kotlin.test.* class PeriodScalarProviderTest { diff --git a/security/security-casbin/build.gradle.kts b/security/security-casbin/build.gradle.kts index 4e762a9cd..42b034f0b 100644 --- a/security/security-casbin/build.gradle.kts +++ b/security/security-casbin/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("buildlogic.kotlinspring-conventions") + id("buildlogic.kotlin-spring-boot-conventions") id("buildlogic.spotless-conventions") } diff --git a/security/security-crypto/build.gradle.kts b/security/security-crypto/build.gradle.kts index fdc95545e..002acd749 100644 --- a/security/security-crypto/build.gradle.kts +++ b/security/security-crypto/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("buildlogic.kotlinspring-conventions") + id("buildlogic.kotlin-spring-boot-conventions") id("buildlogic.spotless-conventions") } diff --git a/security/security-crypto/src/main/kotlin/io/github/truenine/composeserver/security/crypto/AutoGeneratedKeysRepo.kt b/security/security-crypto/src/main/kotlin/io/github/truenine/composeserver/security/crypto/AutoGeneratedKeysRepo.kt index df2d4af48..dfd821e2a 100644 --- a/security/security-crypto/src/main/kotlin/io/github/truenine/composeserver/security/crypto/AutoGeneratedKeysRepo.kt +++ b/security/security-crypto/src/main/kotlin/io/github/truenine/composeserver/security/crypto/AutoGeneratedKeysRepo.kt @@ -1,8 +1,6 @@ package io.github.truenine.composeserver.security.crypto -import io.github.truenine.composeserver.security.crypto.domain.IEccExtKeyPair -import io.github.truenine.composeserver.security.crypto.domain.IKeysRepo -import io.github.truenine.composeserver.security.crypto.domain.IRsaExtKeyPair +import io.github.truenine.composeserver.security.crypto.domain.* import io.github.truenine.composeserver.slf4j import javax.crypto.spec.SecretKeySpec diff --git a/security/security-crypto/src/main/kotlin/io/github/truenine/composeserver/security/crypto/CryptographicKeyManager.kt b/security/security-crypto/src/main/kotlin/io/github/truenine/composeserver/security/crypto/CryptographicKeyManager.kt index 20f230291..892967bdc 100644 --- a/security/security-crypto/src/main/kotlin/io/github/truenine/composeserver/security/crypto/CryptographicKeyManager.kt +++ b/security/security-crypto/src/main/kotlin/io/github/truenine/composeserver/security/crypto/CryptographicKeyManager.kt @@ -1,18 +1,9 @@ package io.github.truenine.composeserver.security.crypto import io.github.truenine.composeserver.enums.EncryptAlgorithm -import io.github.truenine.composeserver.security.crypto.domain.EccExtKeyPair -import io.github.truenine.composeserver.security.crypto.domain.IEccExtKeyPair -import io.github.truenine.composeserver.security.crypto.domain.IRsaExtKeyPair -import io.github.truenine.composeserver.security.crypto.domain.RsaExtKeyPair +import io.github.truenine.composeserver.security.crypto.domain.* import io.github.truenine.composeserver.slf4j -import java.security.Key -import java.security.KeyFactory -import java.security.KeyPairGenerator -import java.security.PrivateKey -import java.security.PublicKey -import java.security.SecureRandom -import java.security.Security +import java.security.* import java.security.interfaces.RSAPrivateKey import java.security.interfaces.RSAPublicKey import java.security.spec.PKCS8EncodedKeySpec diff --git a/security/security-crypto/src/main/kotlin/io/github/truenine/composeserver/security/crypto/CryptographicOperations.kt b/security/security-crypto/src/main/kotlin/io/github/truenine/composeserver/security/crypto/CryptographicOperations.kt index fd06e1f05..f337778f9 100644 --- a/security/security-crypto/src/main/kotlin/io/github/truenine/composeserver/security/crypto/CryptographicOperations.kt +++ b/security/security-crypto/src/main/kotlin/io/github/truenine/composeserver/security/crypto/CryptographicOperations.kt @@ -3,11 +3,7 @@ package io.github.truenine.composeserver.security.crypto import io.github.truenine.composeserver.enums.EncryptAlgorithm import io.github.truenine.composeserver.slf4j import java.nio.charset.Charset -import java.security.MessageDigest -import java.security.PrivateKey -import java.security.PublicKey -import java.security.SecureRandom -import java.security.Signature +import java.security.* import java.security.interfaces.RSAPrivateKey import java.security.interfaces.RSAPublicKey import javax.crypto.Cipher diff --git a/security/security-crypto/src/main/kotlin/io/github/truenine/composeserver/security/crypto/FileKeyRepo.kt b/security/security-crypto/src/main/kotlin/io/github/truenine/composeserver/security/crypto/FileKeyRepo.kt index bc273a781..5baac188b 100644 --- a/security/security-crypto/src/main/kotlin/io/github/truenine/composeserver/security/crypto/FileKeyRepo.kt +++ b/security/security-crypto/src/main/kotlin/io/github/truenine/composeserver/security/crypto/FileKeyRepo.kt @@ -1,11 +1,7 @@ package io.github.truenine.composeserver.security.crypto -import io.github.truenine.composeserver.security.crypto.domain.IEccExtKeyPair -import io.github.truenine.composeserver.security.crypto.domain.IKeysRepo -import io.github.truenine.composeserver.security.crypto.domain.IRsaExtKeyPair -import java.io.BufferedInputStream -import java.io.BufferedReader -import java.io.InputStreamReader +import io.github.truenine.composeserver.security.crypto.domain.* +import java.io.* import java.security.PrivateKey import java.security.PublicKey import java.security.interfaces.RSAPrivateKey diff --git a/security/security-crypto/src/main/kotlin/io/github/truenine/composeserver/security/crypto/FileKeysRepoImpl.kt b/security/security-crypto/src/main/kotlin/io/github/truenine/composeserver/security/crypto/FileKeysRepoImpl.kt index 428ffa37a..e46ac160d 100644 --- a/security/security-crypto/src/main/kotlin/io/github/truenine/composeserver/security/crypto/FileKeysRepoImpl.kt +++ b/security/security-crypto/src/main/kotlin/io/github/truenine/composeserver/security/crypto/FileKeysRepoImpl.kt @@ -1,8 +1,6 @@ package io.github.truenine.composeserver.security.crypto -import io.github.truenine.composeserver.security.crypto.domain.IEccExtKeyPair -import io.github.truenine.composeserver.security.crypto.domain.IKeysRepo -import io.github.truenine.composeserver.security.crypto.domain.IRsaExtKeyPair +import io.github.truenine.composeserver.security.crypto.domain.* import io.github.truenine.composeserver.slf4j import javax.crypto.spec.SecretKeySpec diff --git a/security/security-crypto/src/main/kotlin/io/github/truenine/composeserver/security/crypto/PemFormat.kt b/security/security-crypto/src/main/kotlin/io/github/truenine/composeserver/security/crypto/PemFormat.kt index 41494adbd..af620de8b 100644 --- a/security/security-crypto/src/main/kotlin/io/github/truenine/composeserver/security/crypto/PemFormat.kt +++ b/security/security-crypto/src/main/kotlin/io/github/truenine/composeserver/security/crypto/PemFormat.kt @@ -1,8 +1,6 @@ package io.github.truenine.composeserver.security.crypto -import java.security.Key -import java.security.PrivateKey -import java.security.PublicKey +import java.security.* import java.util.regex.Pattern /** diff --git a/security/security-crypto/src/main/kotlin/io/github/truenine/composeserver/security/crypto/autoconfig/PasswordEncoderAutoconfiguration.kt b/security/security-crypto/src/main/kotlin/io/github/truenine/composeserver/security/crypto/autoconfig/PasswordEncoderAutoconfiguration.kt index 0f7e7a33c..8f1af5542 100644 --- a/security/security-crypto/src/main/kotlin/io/github/truenine/composeserver/security/crypto/autoconfig/PasswordEncoderAutoconfiguration.kt +++ b/security/security-crypto/src/main/kotlin/io/github/truenine/composeserver/security/crypto/autoconfig/PasswordEncoderAutoconfiguration.kt @@ -2,9 +2,7 @@ package io.github.truenine.composeserver.security.crypto.autoconfig import io.github.truenine.composeserver.slf4j import org.springframework.context.ApplicationContext -import org.springframework.context.annotation.Bean -import org.springframework.context.annotation.Configuration -import org.springframework.context.annotation.Primary +import org.springframework.context.annotation.* import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder import org.springframework.security.crypto.password.PasswordEncoder diff --git a/security/security-crypto/src/test/kotlin/io/github/truenine/composeserver/security/crypto/ByteArrayExtensionsTest.kt b/security/security-crypto/src/test/kotlin/io/github/truenine/composeserver/security/crypto/ByteArrayExtensionsTest.kt index 4065c5c07..689844c24 100644 --- a/security/security-crypto/src/test/kotlin/io/github/truenine/composeserver/security/crypto/ByteArrayExtensionsTest.kt +++ b/security/security-crypto/src/test/kotlin/io/github/truenine/composeserver/security/crypto/ByteArrayExtensionsTest.kt @@ -1,12 +1,8 @@ package io.github.truenine.composeserver.security.crypto import io.github.truenine.composeserver.consts.IRegexes -import java.util.Base64 -import kotlin.test.assertContentEquals -import kotlin.test.assertEquals -import kotlin.test.assertFailsWith -import kotlin.test.assertNotEquals -import kotlin.test.assertTrue +import java.util.* +import kotlin.test.* import org.junit.jupiter.api.Test import org.slf4j.LoggerFactory diff --git a/security/security-crypto/src/test/kotlin/io/github/truenine/composeserver/security/crypto/CryptographicKeyManagerTest.kt b/security/security-crypto/src/test/kotlin/io/github/truenine/composeserver/security/crypto/CryptographicKeyManagerTest.kt index 40860603d..3d19d32c0 100644 --- a/security/security-crypto/src/test/kotlin/io/github/truenine/composeserver/security/crypto/CryptographicKeyManagerTest.kt +++ b/security/security-crypto/src/test/kotlin/io/github/truenine/composeserver/security/crypto/CryptographicKeyManagerTest.kt @@ -1,12 +1,7 @@ package io.github.truenine.composeserver.security.crypto import io.github.truenine.composeserver.testtoolkit.log -import kotlin.test.Test -import kotlin.test.assertEquals -import kotlin.test.assertFailsWith -import kotlin.test.assertNotNull -import kotlin.test.assertNull -import kotlin.test.assertTrue +import kotlin.test.* import kotlin.time.measureTime /** diff --git a/security/security-crypto/src/test/kotlin/io/github/truenine/composeserver/security/crypto/CryptographicOperationsTest.kt b/security/security-crypto/src/test/kotlin/io/github/truenine/composeserver/security/crypto/CryptographicOperationsTest.kt index f276efff9..0afff782f 100644 --- a/security/security-crypto/src/test/kotlin/io/github/truenine/composeserver/security/crypto/CryptographicOperationsTest.kt +++ b/security/security-crypto/src/test/kotlin/io/github/truenine/composeserver/security/crypto/CryptographicOperationsTest.kt @@ -2,14 +2,7 @@ package io.github.truenine.composeserver.security.crypto import io.github.truenine.composeserver.enums.EncryptAlgorithm import io.github.truenine.composeserver.testtoolkit.log -import kotlin.test.Test -import kotlin.test.assertContentEquals -import kotlin.test.assertEquals -import kotlin.test.assertFailsWith -import kotlin.test.assertNotEquals -import kotlin.test.assertNotNull -import kotlin.test.assertNull -import kotlin.test.assertTrue +import kotlin.test.* import kotlin.time.measureTime /** diff --git a/security/security-crypto/src/test/kotlin/io/github/truenine/composeserver/security/crypto/IBase64Test.kt b/security/security-crypto/src/test/kotlin/io/github/truenine/composeserver/security/crypto/IBase64Test.kt index b9091729f..14752ff07 100644 --- a/security/security-crypto/src/test/kotlin/io/github/truenine/composeserver/security/crypto/IBase64Test.kt +++ b/security/security-crypto/src/test/kotlin/io/github/truenine/composeserver/security/crypto/IBase64Test.kt @@ -2,15 +2,9 @@ package io.github.truenine.composeserver.security.crypto import io.github.truenine.composeserver.consts.IRegexes import io.github.truenine.composeserver.slf4j -import java.util.Base64 +import java.util.* import kotlin.system.measureTimeMillis -import kotlin.test.Test -import kotlin.test.assertContentEquals -import kotlin.test.assertEquals -import kotlin.test.assertFailsWith -import kotlin.test.assertFalse -import kotlin.test.assertNotEquals -import kotlin.test.assertTrue +import kotlin.test.* private val log = slf4j() diff --git a/security/security-crypto/src/test/kotlin/io/github/truenine/composeserver/security/crypto/PemFormatTest.kt b/security/security-crypto/src/test/kotlin/io/github/truenine/composeserver/security/crypto/PemFormatTest.kt index 607f63a14..f7c2f0c76 100644 --- a/security/security-crypto/src/test/kotlin/io/github/truenine/composeserver/security/crypto/PemFormatTest.kt +++ b/security/security-crypto/src/test/kotlin/io/github/truenine/composeserver/security/crypto/PemFormatTest.kt @@ -4,10 +4,8 @@ import java.security.KeyPair import java.security.KeyPairGenerator import java.util.stream.Stream import kotlin.system.measureTimeMillis -import kotlin.test.assertEquals -import kotlin.test.assertFalse +import kotlin.test.* import kotlin.test.assertNotNull -import kotlin.test.assertTrue import org.junit.jupiter.api.Nested import org.junit.jupiter.api.RepeatedTest import org.junit.jupiter.api.Test diff --git a/security/security-crypto/src/test/kotlin/io/github/truenine/composeserver/security/crypto/StringExtensionsTest.kt b/security/security-crypto/src/test/kotlin/io/github/truenine/composeserver/security/crypto/StringExtensionsTest.kt index c6cef688c..2dba24b5e 100644 --- a/security/security-crypto/src/test/kotlin/io/github/truenine/composeserver/security/crypto/StringExtensionsTest.kt +++ b/security/security-crypto/src/test/kotlin/io/github/truenine/composeserver/security/crypto/StringExtensionsTest.kt @@ -1,8 +1,6 @@ package io.github.truenine.composeserver.security.crypto -import kotlin.test.assertEquals -import kotlin.test.assertNotNull -import kotlin.test.assertTrue +import kotlin.test.* import org.junit.jupiter.api.Test /** Test cases for String extension functions */ diff --git a/security/security-oauth2/build.gradle.kts b/security/security-oauth2/build.gradle.kts index 3641c673d..aedf2e607 100644 --- a/security/security-oauth2/build.gradle.kts +++ b/security/security-oauth2/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("buildlogic.kotlinspring-conventions") + id("buildlogic.kotlin-spring-boot-conventions") id("buildlogic.spotless-conventions") } diff --git a/security/security-spring/build.gradle.kts b/security/security-spring/build.gradle.kts index 5e687b0f6..c28a5823b 100644 --- a/security/security-spring/build.gradle.kts +++ b/security/security-spring/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("buildlogic.kotlinspring-conventions") + id("buildlogic.kotlin-spring-boot-conventions") id("buildlogic.spotless-conventions") } diff --git a/security/security-spring/src/main/kotlin/io/github/truenine/composeserver/security/SecurityPolicyDefine.kt b/security/security-spring/src/main/kotlin/io/github/truenine/composeserver/security/SecurityPolicyDefine.kt index 8afabdbad..52ef4341d 100644 --- a/security/security-spring/src/main/kotlin/io/github/truenine/composeserver/security/SecurityPolicyDefine.kt +++ b/security/security-spring/src/main/kotlin/io/github/truenine/composeserver/security/SecurityPolicyDefine.kt @@ -1,8 +1,6 @@ package io.github.truenine.composeserver.security -import io.github.truenine.composeserver.security.spring.security.SecurityExceptionAdware -import io.github.truenine.composeserver.security.spring.security.SecurityPreflightValidFilter -import io.github.truenine.composeserver.security.spring.security.SecurityUserDetailsService +import io.github.truenine.composeserver.security.spring.security.* import org.springframework.security.authorization.AuthorizationManager import org.springframework.security.web.access.intercept.RequestAuthorizationContext diff --git a/security/security-spring/src/main/kotlin/io/github/truenine/composeserver/security/autoconfig/FileKeyRepoAutoConfiguration.kt b/security/security-spring/src/main/kotlin/io/github/truenine/composeserver/security/autoconfig/FileKeyRepoAutoConfiguration.kt index 43f061bd4..8bcb569ae 100644 --- a/security/security-spring/src/main/kotlin/io/github/truenine/composeserver/security/autoconfig/FileKeyRepoAutoConfiguration.kt +++ b/security/security-spring/src/main/kotlin/io/github/truenine/composeserver/security/autoconfig/FileKeyRepoAutoConfiguration.kt @@ -2,9 +2,7 @@ package io.github.truenine.composeserver.security.autoconfig import io.github.truenine.composeserver.security.crypto.FileKeyRepo import io.github.truenine.composeserver.slf4j -import org.springframework.context.annotation.Bean -import org.springframework.context.annotation.Configuration -import org.springframework.context.annotation.Primary +import org.springframework.context.annotation.* @Configuration class FileKeyRepoAutoConfiguration { diff --git a/security/security-spring/src/main/kotlin/io/github/truenine/composeserver/security/autoconfig/JwtIssuerAutoConfiguration.kt b/security/security-spring/src/main/kotlin/io/github/truenine/composeserver/security/autoconfig/JwtIssuerAutoConfiguration.kt index 7a4cc1582..2e76eab3c 100644 --- a/security/security-spring/src/main/kotlin/io/github/truenine/composeserver/security/autoconfig/JwtIssuerAutoConfiguration.kt +++ b/security/security-spring/src/main/kotlin/io/github/truenine/composeserver/security/autoconfig/JwtIssuerAutoConfiguration.kt @@ -5,9 +5,7 @@ import io.github.truenine.composeserver.security.jwt.JwtIssuer import java.time.Duration import java.time.temporal.ChronoUnit import org.springframework.boot.context.properties.EnableConfigurationProperties -import org.springframework.context.annotation.Bean -import org.springframework.context.annotation.Configuration -import org.springframework.context.annotation.Primary +import org.springframework.context.annotation.* import tools.jackson.databind.ObjectMapper @Configuration diff --git a/security/security-spring/src/main/kotlin/io/github/truenine/composeserver/security/autoconfig/SecurityPolicyBean.kt b/security/security-spring/src/main/kotlin/io/github/truenine/composeserver/security/autoconfig/SecurityPolicyBean.kt index 5a4b3d31e..2f5d8a4a7 100644 --- a/security/security-spring/src/main/kotlin/io/github/truenine/composeserver/security/autoconfig/SecurityPolicyBean.kt +++ b/security/security-spring/src/main/kotlin/io/github/truenine/composeserver/security/autoconfig/SecurityPolicyBean.kt @@ -2,15 +2,11 @@ package io.github.truenine.composeserver.security.autoconfig import io.github.truenine.composeserver.security.SecurityPolicyDefine import io.github.truenine.composeserver.security.annotations.EnableRestSecurity -import io.github.truenine.composeserver.security.spring.security.SecurityExceptionAdware -import io.github.truenine.composeserver.security.spring.security.SecurityPreflightValidFilter -import io.github.truenine.composeserver.security.spring.security.SecurityUserDetailsService +import io.github.truenine.composeserver.security.spring.security.* import io.github.truenine.composeserver.slf4j import org.springframework.boot.autoconfigure.condition.ConditionalOnBean import org.springframework.context.ApplicationContext -import org.springframework.context.annotation.Bean -import org.springframework.context.annotation.Configuration -import org.springframework.context.annotation.Primary +import org.springframework.context.annotation.* import org.springframework.security.authentication.AuthenticationManager import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity diff --git a/security/security-spring/src/main/kotlin/io/github/truenine/composeserver/security/spring/security/SecurityUserDetailsService.kt b/security/security-spring/src/main/kotlin/io/github/truenine/composeserver/security/spring/security/SecurityUserDetailsService.kt index e7c16c182..4c23fea59 100644 --- a/security/security-spring/src/main/kotlin/io/github/truenine/composeserver/security/spring/security/SecurityUserDetailsService.kt +++ b/security/security-spring/src/main/kotlin/io/github/truenine/composeserver/security/spring/security/SecurityUserDetailsService.kt @@ -3,9 +3,7 @@ package io.github.truenine.composeserver.security.spring.security import io.github.truenine.composeserver.domain.AuthRequestInfo import io.github.truenine.composeserver.security.UserDetailsWrapper import io.github.truenine.composeserver.slf4j -import org.springframework.security.core.userdetails.UserDetails -import org.springframework.security.core.userdetails.UserDetailsService -import org.springframework.security.core.userdetails.UsernameNotFoundException +import org.springframework.security.core.userdetails.* abstract class SecurityUserDetailsService : UserDetailsService { /** diff --git a/security/security-spring/src/test/kotlin/io/github/truenine/composeserver/security/AuthenticationManagerFnsTest.kt b/security/security-spring/src/test/kotlin/io/github/truenine/composeserver/security/AuthenticationManagerFnsTest.kt index c94955856..91f113ab0 100644 --- a/security/security-spring/src/test/kotlin/io/github/truenine/composeserver/security/AuthenticationManagerFnsTest.kt +++ b/security/security-spring/src/test/kotlin/io/github/truenine/composeserver/security/AuthenticationManagerFnsTest.kt @@ -1,8 +1,6 @@ package io.github.truenine.composeserver.security -import io.mockk.every -import io.mockk.mockk -import io.mockk.verify +import io.mockk.* import kotlin.test.assertEquals import kotlin.test.assertNull import org.junit.jupiter.api.Test diff --git a/security/security-spring/src/test/kotlin/io/github/truenine/composeserver/security/jwt/JwtIssuerVerifierTest.kt b/security/security-spring/src/test/kotlin/io/github/truenine/composeserver/security/jwt/JwtIssuerVerifierTest.kt index 26bb514a4..37e0abd2a 100644 --- a/security/security-spring/src/test/kotlin/io/github/truenine/composeserver/security/jwt/JwtIssuerVerifierTest.kt +++ b/security/security-spring/src/test/kotlin/io/github/truenine/composeserver/security/jwt/JwtIssuerVerifierTest.kt @@ -7,12 +7,7 @@ import io.github.truenine.composeserver.security.jwt.consts.IssuerParam import io.github.truenine.composeserver.security.jwt.consts.VerifierParam import java.time.Duration import java.time.temporal.ChronoUnit -import kotlin.test.assertEquals -import kotlin.test.assertFalse -import kotlin.test.assertNotNull -import kotlin.test.assertNull -import kotlin.test.assertTrue -import kotlin.test.fail +import kotlin.test.* import kotlin.time.measureTime import org.junit.jupiter.api.Test import tools.jackson.databind.ObjectMapper diff --git a/shared/build.gradle.kts b/shared/build.gradle.kts index 5dfd52f65..c58fb297b 100644 --- a/shared/build.gradle.kts +++ b/shared/build.gradle.kts @@ -1,6 +1,6 @@ plugins { - id("buildlogic.kotlinspring-conventions") - id("buildlogic.publish-conventions") + id("buildlogic.kotlin-spring-boot-conventions") + id("buildlogic.maven-publish-conventions") id("buildlogic.spotless-conventions") } @@ -28,8 +28,16 @@ dependencies { testImplementation(libs.org.springframework.boot.spring.boot.test.autoconfigure) testImplementation(libs.org.jetbrains.kotlinx.kotlinx.coroutines.test) testImplementation(libs.tools.jackson.core.jackson.databind) + + // Kotest property-based testing + testImplementation(libs.io.kotest.kotest.runner.junit5) + testImplementation(libs.io.kotest.kotest.assertions.core) + testImplementation(libs.io.kotest.kotest.property) } +// Configure test framework for property-based testing +tasks.withType { useJUnitPlatform() } + // Disable KAPT for test sources to avoid Jackson 3.x annotation processing issues afterEvaluate { tasks.findByName("kaptTestKotlin")?.enabled = false diff --git a/shared/src/main/kotlin/io/github/truenine/composeserver/Alias.kt b/shared/src/main/kotlin/io/github/truenine/composeserver/Alias.kt index 95e7d3ec2..ed177a736 100644 --- a/shared/src/main/kotlin/io/github/truenine/composeserver/Alias.kt +++ b/shared/src/main/kotlin/io/github/truenine/composeserver/Alias.kt @@ -4,9 +4,7 @@ import io.github.truenine.composeserver.domain.IPage import io.github.truenine.composeserver.domain.IPageParam import java.math.BigDecimal import java.math.BigInteger -import java.time.LocalDate -import java.time.LocalDateTime -import java.time.LocalTime +import java.time.* /** * String type alias for consistent string handling across the system. diff --git a/shared/src/main/kotlin/io/github/truenine/composeserver/DateTimeConverter.kt b/shared/src/main/kotlin/io/github/truenine/composeserver/DateTimeConverter.kt index efe4c7ef8..ac4ffbd7b 100644 --- a/shared/src/main/kotlin/io/github/truenine/composeserver/DateTimeConverter.kt +++ b/shared/src/main/kotlin/io/github/truenine/composeserver/DateTimeConverter.kt @@ -1,12 +1,7 @@ package io.github.truenine.composeserver import io.github.truenine.composeserver.DateTimeConverter.plusMillis -import java.time.Instant -import java.time.LocalDate -import java.time.LocalDateTime -import java.time.LocalTime -import java.time.ZoneId -import java.time.ZoneOffset +import java.time.* /** * Date and time converter providing comprehensive conversion operations between different time types. diff --git a/shared/src/main/kotlin/io/github/truenine/composeserver/JavaDateTimeFns.kt b/shared/src/main/kotlin/io/github/truenine/composeserver/JavaDateTimeFns.kt index 4c495785c..c4b814511 100644 --- a/shared/src/main/kotlin/io/github/truenine/composeserver/JavaDateTimeFns.kt +++ b/shared/src/main/kotlin/io/github/truenine/composeserver/JavaDateTimeFns.kt @@ -1,13 +1,6 @@ package io.github.truenine.composeserver -import java.time.Duration -import java.time.Instant -import java.time.LocalDate -import java.time.LocalDateTime -import java.time.LocalTime -import java.time.Period -import java.time.ZoneId -import java.time.ZoneOffset +import java.time.* import java.time.temporal.TemporalAdjusters /** diff --git a/shared/src/main/kotlin/io/github/truenine/composeserver/JavaIoFns.kt b/shared/src/main/kotlin/io/github/truenine/composeserver/JavaIoFns.kt index 52198bf9c..2b77640e8 100644 --- a/shared/src/main/kotlin/io/github/truenine/composeserver/JavaIoFns.kt +++ b/shared/src/main/kotlin/io/github/truenine/composeserver/JavaIoFns.kt @@ -1,8 +1,6 @@ package io.github.truenine.composeserver -import java.io.BufferedReader -import java.io.InputStream -import java.io.Reader +import java.io.* import java.nio.charset.Charset @Deprecated("Redundant helper, use bufferedReader() instead", replaceWith = ReplaceWith("bufferedReader()")) diff --git a/shared/src/main/kotlin/io/github/truenine/composeserver/autoconfig/IdGeneratorAutoConfiguration.kt b/shared/src/main/kotlin/io/github/truenine/composeserver/autoconfig/IdGeneratorAutoConfiguration.kt index 0b5354b3b..b125a445d 100644 --- a/shared/src/main/kotlin/io/github/truenine/composeserver/autoconfig/IdGeneratorAutoConfiguration.kt +++ b/shared/src/main/kotlin/io/github/truenine/composeserver/autoconfig/IdGeneratorAutoConfiguration.kt @@ -1,14 +1,9 @@ package io.github.truenine.composeserver.autoconfig -import io.github.truenine.composeserver.generator.IOrderCodeGenerator -import io.github.truenine.composeserver.generator.ISnowflakeGenerator -import io.github.truenine.composeserver.generator.SynchronizedSimpleOrderCodeGenerator -import io.github.truenine.composeserver.generator.SynchronizedSimpleSnowflake +import io.github.truenine.composeserver.generator.* import io.github.truenine.composeserver.properties.SnowflakeProperties import org.springframework.boot.context.properties.EnableConfigurationProperties -import org.springframework.context.annotation.Bean -import org.springframework.context.annotation.Configuration -import org.springframework.context.annotation.DependsOn +import org.springframework.context.annotation.* @Configuration @EnableConfigurationProperties(SnowflakeProperties::class) diff --git a/shared/src/main/kotlin/io/github/truenine/composeserver/domain/IPageParam.kt b/shared/src/main/kotlin/io/github/truenine/composeserver/domain/IPageParam.kt index 87a010438..b2d6359b0 100644 --- a/shared/src/main/kotlin/io/github/truenine/composeserver/domain/IPageParam.kt +++ b/shared/src/main/kotlin/io/github/truenine/composeserver/domain/IPageParam.kt @@ -1,8 +1,6 @@ package io.github.truenine.composeserver.domain -import com.fasterxml.jackson.annotation.JsonCreator -import com.fasterxml.jackson.annotation.JsonIgnore -import com.fasterxml.jackson.annotation.JsonProperty +import com.fasterxml.jackson.annotation.* import java.io.Serializable /** diff --git a/shared/src/main/kotlin/io/github/truenine/composeserver/generator/IUUIDGenerator.kt b/shared/src/main/kotlin/io/github/truenine/composeserver/generator/IUUIDGenerator.kt new file mode 100644 index 000000000..413c7ef28 --- /dev/null +++ b/shared/src/main/kotlin/io/github/truenine/composeserver/generator/IUUIDGenerator.kt @@ -0,0 +1,77 @@ +package io.github.truenine.composeserver.generator + +import java.util.* + +/** + * # UUID Generator Interface + * + * Defines the contract for generating UUIDs with time-based sorting capabilities. This interface follows the same design pattern as ISnowflakeGenerator. + * + * The generator produces UUIDs that are: + * - Lexicographically sortable by timestamp + * - Globally unique + * - Compatible with standard UUID format + * - Timezone-agnostic (uses UTC/Unix epoch) + * + * @author TrueNine + * @since 2025-01-01 + */ +interface IUUIDGenerator : ISerialGenerator { + + /** + * Get current timestamp in milliseconds (timezone-agnostic). Uses System.currentTimeMillis() which returns UTC epoch time. + * + * This method can be overridden for testing purposes to provide deterministic timestamps. + * + * @return Current timestamp in milliseconds since Unix epoch (1970-01-01 00:00:00 UTC) + */ + fun currentTimeMillis(): Long { + return System.currentTimeMillis() + } + + /** + * Generate next UUID as String. The default implementation delegates to nextString(). + * + * @return UUID string representation + */ + override fun next(): String { + return nextString() + } + + /** + * Generate next UUID as String. This is the primary generation method that must be implemented. + * + * Implementations should generate UUIDs that are: + * - Unique across all invocations + * - Lexicographically sortable by generation time + * - Thread-safe for concurrent access + * + * @return UUID string representation + */ + override fun nextString(): String + + /** + * Generate next UUID as java.util.UUID object. Converts the string representation to UUID type. + * + * This method provides compatibility with code that expects java.util.UUID objects rather than strings. + * + * @return UUID object + */ + fun nextUUID(): UUID { + return UUID.fromString(toStandardUUIDFormat(nextString())) + } + + /** + * Convert ULID string to standard UUID format (with hyphens). + * + * ULID format: 26 characters Crockford Base32 (e.g., "01AN4Z07BY79KA1307SR9X4MV3") UUID format: 36 characters with hyphens at positions 8, 13, 18, 23 (e.g., + * "0188d4e4-5528-7e8c-b9a0-8c7e8c7e8c7e") + * + * This conversion enables interoperability with systems that expect standard UUID format while maintaining the benefits of ULID encoding. + * + * @param ulid ULID string (26 characters) + * @return Standard UUID format string (36 characters with hyphens) + * @throws IllegalArgumentException if the ULID string is invalid + */ + fun toStandardUUIDFormat(ulid: String): String +} diff --git a/shared/src/main/kotlin/io/github/truenine/composeserver/generator/ULIDGenerator.kt b/shared/src/main/kotlin/io/github/truenine/composeserver/generator/ULIDGenerator.kt new file mode 100644 index 000000000..bd18e197d --- /dev/null +++ b/shared/src/main/kotlin/io/github/truenine/composeserver/generator/ULIDGenerator.kt @@ -0,0 +1,243 @@ +package io.github.truenine.composeserver.generator + +import java.security.SecureRandom + +/** + * # ULID Generator Implementation + * + * Thread-safe implementation of ULID (Universally Unique Lexicographically Sortable Identifier). ULID combines timestamp and randomness to create sortable + * unique identifiers. + * + * ## ULID Structure + * - 48 bits: Timestamp (milliseconds since Unix epoch) + * - 80 bits: Randomness + * - Total: 128 bits (compatible with UUID) + * + * ## String Representation + * - 26 characters in Crockford Base32 encoding + * - First 10 characters: Timestamp + * - Last 16 characters: Randomness + * + * ## Features + * - Lexicographically sortable by timestamp + * - Monotonic within same millisecond (when enabled) + * - Thread-safe for concurrent access + * - URL-safe (no special characters) + * - Case-insensitive + * + * ## Example Usage + * + * ```kotlin + * // Create generator with default settings + * val generator = ULIDGenerator() + * val ulid = generator.nextString() + * // Output: "01AN4Z07BY79KA1307SR9X4MV3" + * + * // Create generator with secure random + * val secureGenerator = ULIDGenerator(useSecureRandom = true) + * + * // Create generator without monotonic mode + * val nonMonotonicGenerator = ULIDGenerator(monotonicMode = false) + * ``` + * + * @param useSecureRandom Whether to use SecureRandom for cryptographic strength (default: false). Set to true for security-sensitive applications where + * unpredictability is critical. Note: SecureRandom has performance overhead compared to standard Random. + * @param monotonicMode Whether to use monotonic mode for same-millisecond generation (default: true). When enabled, ULIDs generated within the same millisecond + * will be monotonically increasing. When disabled, each ULID uses fresh random bytes regardless of timestamp. + * @author TrueNine + * @since 2025-01-01 + */ +open class ULIDGenerator @JvmOverloads constructor(private val useSecureRandom: Boolean = false, private val monotonicMode: Boolean = true) : IUUIDGenerator { + + private val random = if (useSecureRandom) SecureRandom() else java.util.Random() + + private var lastTimestamp = -1L + private var lastRandomBytes = ByteArray(10) + + private var generatedCount = 0L + private var monotonicIncrementCount = 0L + + init { + validateParameters() + } + + private fun validateParameters() { + // No specific validation needed for current parameters + // This method is kept for consistency with SynchronizedSimpleSnowflake + // and for future extensibility if additional parameters are added + } + + @Synchronized + override fun nextString(): String { + val timestamp = currentTimeMillis() + + val randomBytes = + if (monotonicMode && timestamp == lastTimestamp) { + monotonicIncrementCount++ + incrementRandomBytes(lastRandomBytes.copyOf()) + } else { + generateRandomBytes() + } + + lastTimestamp = timestamp + lastRandomBytes = randomBytes.copyOf() + generatedCount++ + + return encodeULID(timestamp, randomBytes) + } + + override fun toStandardUUIDFormat(ulid: String): String { + require(ulid.length == 26) { "ULID must be 26 characters long, but got ${ulid.length}" } + + val bytes = decodeULID(ulid) + + // Convert bytes to UUID format: 8-4-4-4-12 (36 characters with hyphens) + // UUID format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + val hex = bytes.joinToString("") { "%02x".format(it) } + + return buildString { + append(hex.substring(0, 8)) + append('-') + append(hex.substring(8, 12)) + append('-') + append(hex.substring(12, 16)) + append('-') + append(hex.substring(16, 20)) + append('-') + append(hex.substring(20, 32)) + } + } + + private fun generateRandomBytes(): ByteArray { + val bytes = ByteArray(10) + random.nextBytes(bytes) + return bytes + } + + private fun incrementRandomBytes(bytes: ByteArray): ByteArray { + // Increment the random bytes as an unsigned integer + // Start from the least significant byte (rightmost) + var carry = 1 + for (i in bytes.indices.reversed()) { + val value = (bytes[i].toInt() and 0xFF) + carry + bytes[i] = value.toByte() + carry = value shr 8 + if (carry == 0) break + } + // If carry is still 1, we've overflowed - generate new random bytes + if (carry == 1) { + random.nextBytes(bytes) + } + return bytes + } + + private fun encodeULID(timestamp: Long, randomBytes: ByteArray): String { + val chars = CharArray(26) + + // Encode timestamp (10 characters) + var time = timestamp + for (i in 9 downTo 0) { + chars[i] = ENCODING[(time and 0x1F).toInt()] + time = time shr 5 + } + + // Encode random bytes (16 characters) + var randomBits = 0L + var bitsRemaining = 0 + var charIndex = 10 + + for (byte in randomBytes) { + randomBits = (randomBits shl 8) or (byte.toLong() and 0xFF) + bitsRemaining += 8 + + while (bitsRemaining >= 5) { + bitsRemaining -= 5 + chars[charIndex++] = ENCODING[((randomBits shr bitsRemaining) and 0x1F).toInt()] + } + } + + if (bitsRemaining > 0) { + chars[charIndex] = ENCODING[((randomBits shl (5 - bitsRemaining)) and 0x1F).toInt()] + } + + return String(chars) + } + + private fun decodeULID(ulid: String): ByteArray { + val bytes = ByteArray(16) + var bits = 0L + var bitsCount = 0 + var byteIndex = 0 + + for (char in ulid.uppercase()) { + val value = DECODING[char.code] + require(value >= 0) { "Invalid ULID character: $char" } + + bits = (bits shl 5) or value.toLong() + bitsCount += 5 + + if (bitsCount >= 8) { + bitsCount -= 8 + bytes[byteIndex++] = ((bits shr bitsCount) and 0xFF).toByte() + } + } + + return bytes + } + + /** + * Get generation statistics. + * + * Provides monitoring information about the generator's operation: + * - generatedCount: Total number of ULIDs generated + * - monotonicIncrementCount: Number of times monotonic increment was used + * + * @return Statistics object containing generation metrics + */ + @Synchronized + fun getStatistics(): Statistics { + return Statistics(generatedCount, monotonicIncrementCount) + } + + /** + * Reset statistics counters. + * + * Resets all internal statistics counters to zero. This does not affect the generator's state or ability to generate ULIDs. + */ + @Synchronized + fun resetStatistics() { + generatedCount = 0L + monotonicIncrementCount = 0L + } + + /** + * Statistics data class for monitoring generator performance. + * + * @property generatedCount Total number of ULIDs generated since creation or last reset + * @property monotonicIncrementCount Number of times monotonic increment was used (same millisecond generation) + */ + data class Statistics(val generatedCount: Long, val monotonicIncrementCount: Long) + + companion object { + // Crockford Base32 encoding (excludes I, L, O, U to avoid confusion) + private val ENCODING = "0123456789ABCDEFGHJKMNPQRSTVWXYZ".toCharArray() + + // Decoding table for Crockford Base32 + private val DECODING = + IntArray(128) { -1 } + .apply { + for (i in ENCODING.indices) { + this[ENCODING[i].code] = i + // Support lowercase + this[ENCODING[i].lowercaseChar().code] = i + } + // Handle common confusions + this['I'.code] = 1 + this['i'.code] = 1 + this['L'.code] = 1 + this['l'.code] = 1 + this['O'.code] = 0 + this['o'.code] = 0 + } + } +} diff --git a/shared/src/main/kotlin/io/github/truenine/composeserver/holders/AbstractThreadLocalHolder.kt b/shared/src/main/kotlin/io/github/truenine/composeserver/holders/AbstractThreadLocalHolder.kt index 78d53841c..2320166a0 100644 --- a/shared/src/main/kotlin/io/github/truenine/composeserver/holders/AbstractThreadLocalHolder.kt +++ b/shared/src/main/kotlin/io/github/truenine/composeserver/holders/AbstractThreadLocalHolder.kt @@ -1,7 +1,7 @@ package io.github.truenine.composeserver.holders import java.io.Closeable -import java.util.UUID +import java.util.* import kotlin.reflect.KClass import org.springframework.core.NamedInheritableThreadLocal diff --git a/shared/src/main/kotlin/io/github/truenine/composeserver/holders/ResourceHolder.kt b/shared/src/main/kotlin/io/github/truenine/composeserver/holders/ResourceHolder.kt index e8acc7962..ebb2d00a5 100644 --- a/shared/src/main/kotlin/io/github/truenine/composeserver/holders/ResourceHolder.kt +++ b/shared/src/main/kotlin/io/github/truenine/composeserver/holders/ResourceHolder.kt @@ -10,9 +10,7 @@ import io.github.truenine.composeserver.holders.resolver.ResourceResolver import io.github.truenine.composeserver.logger import io.github.truenine.composeserver.properties.DataLoadProperties import jakarta.annotation.PreDestroy -import java.util.concurrent.Executors -import java.util.concurrent.ScheduledExecutorService -import java.util.concurrent.TimeUnit +import java.util.concurrent.* import org.springframework.boot.system.ApplicationHome import org.springframework.core.env.Environment import org.springframework.core.io.Resource diff --git a/shared/src/main/kotlin/io/github/truenine/composeserver/holders/config/ResourceHolderConfiguration.kt b/shared/src/main/kotlin/io/github/truenine/composeserver/holders/config/ResourceHolderConfiguration.kt index 722b54b07..45b58af9d 100644 --- a/shared/src/main/kotlin/io/github/truenine/composeserver/holders/config/ResourceHolderConfiguration.kt +++ b/shared/src/main/kotlin/io/github/truenine/composeserver/holders/config/ResourceHolderConfiguration.kt @@ -1,9 +1,7 @@ package io.github.truenine.composeserver.holders.config import io.github.truenine.composeserver.consts.SpringBootConfigurationPropertiesPrefixes -import jakarta.validation.constraints.Min -import jakarta.validation.constraints.NotBlank -import jakarta.validation.constraints.NotEmpty +import jakarta.validation.constraints.* import org.springframework.boot.context.properties.ConfigurationProperties import org.springframework.validation.annotation.Validated diff --git a/shared/src/test/kotlin/io/github/truenine/composeserver/AliasExtensionsTest.kt b/shared/src/test/kotlin/io/github/truenine/composeserver/AliasExtensionsTest.kt index 3856b2e63..58737d491 100644 --- a/shared/src/test/kotlin/io/github/truenine/composeserver/AliasExtensionsTest.kt +++ b/shared/src/test/kotlin/io/github/truenine/composeserver/AliasExtensionsTest.kt @@ -1,11 +1,6 @@ package io.github.truenine.composeserver -import kotlin.test.Test -import kotlin.test.assertEquals -import kotlin.test.assertFalse -import kotlin.test.assertNull -import kotlin.test.assertTrue -import kotlin.test.fail +import kotlin.test.* class AliasExtensionsTest { diff --git a/shared/src/test/kotlin/io/github/truenine/composeserver/CollectionExtensionsTest.kt b/shared/src/test/kotlin/io/github/truenine/composeserver/CollectionExtensionsTest.kt index 846324fe2..0ec755f20 100644 --- a/shared/src/test/kotlin/io/github/truenine/composeserver/CollectionExtensionsTest.kt +++ b/shared/src/test/kotlin/io/github/truenine/composeserver/CollectionExtensionsTest.kt @@ -2,11 +2,7 @@ package io.github.truenine.composeserver import io.github.truenine.composeserver.testtoolkit.log import java.util.concurrent.ConcurrentHashMap -import kotlin.test.Test -import kotlin.test.assertEquals -import kotlin.test.assertNotNull -import kotlin.test.assertNull -import kotlin.test.assertTrue +import kotlin.test.* /** Validates collection extension functions defined in CollectionExtensions.kt. */ class CollectionExtensionsTest { diff --git a/shared/src/test/kotlin/io/github/truenine/composeserver/DateTimeConverterTest.kt b/shared/src/test/kotlin/io/github/truenine/composeserver/DateTimeConverterTest.kt index 4de68a74f..a5416ab1c 100644 --- a/shared/src/test/kotlin/io/github/truenine/composeserver/DateTimeConverterTest.kt +++ b/shared/src/test/kotlin/io/github/truenine/composeserver/DateTimeConverterTest.kt @@ -1,11 +1,6 @@ package io.github.truenine.composeserver -import java.time.Instant -import java.time.LocalDate -import java.time.LocalDateTime -import java.time.LocalTime -import java.time.ZoneId -import java.time.ZoneOffset +import java.time.* import java.util.stream.Stream import kotlin.test.assertEquals import org.junit.jupiter.api.Nested diff --git a/shared/src/test/kotlin/io/github/truenine/composeserver/IStringTest.kt b/shared/src/test/kotlin/io/github/truenine/composeserver/IStringTest.kt index b21174ade..f40460135 100644 --- a/shared/src/test/kotlin/io/github/truenine/composeserver/IStringTest.kt +++ b/shared/src/test/kotlin/io/github/truenine/composeserver/IStringTest.kt @@ -1,9 +1,6 @@ package io.github.truenine.composeserver -import kotlin.test.Test -import kotlin.test.assertEquals -import kotlin.test.assertFalse -import kotlin.test.assertTrue +import kotlin.test.* /** Validates string utility helpers provided by {@link IString}. */ class IStringTest { diff --git a/shared/src/test/kotlin/io/github/truenine/composeserver/JavaDateTimeFnsTest.kt b/shared/src/test/kotlin/io/github/truenine/composeserver/JavaDateTimeFnsTest.kt index 7ccbfd4e2..b1cf67833 100644 --- a/shared/src/test/kotlin/io/github/truenine/composeserver/JavaDateTimeFnsTest.kt +++ b/shared/src/test/kotlin/io/github/truenine/composeserver/JavaDateTimeFnsTest.kt @@ -1,17 +1,8 @@ package io.github.truenine.composeserver import io.github.truenine.composeserver.testtoolkit.log -import java.time.Duration -import java.time.Instant -import java.time.LocalDate -import java.time.LocalDateTime -import java.time.LocalTime -import java.time.Period -import java.time.ZoneId -import java.time.ZoneOffset -import kotlin.test.Test -import kotlin.test.assertEquals -import kotlin.test.assertTrue +import java.time.* +import kotlin.test.* /** Verifies the date-time extension functions defined in JavaDateTimeFns.kt. */ class JavaDateTimeFnsTest { diff --git a/shared/src/test/kotlin/io/github/truenine/composeserver/LoggerExtensionsTest.kt b/shared/src/test/kotlin/io/github/truenine/composeserver/LoggerExtensionsTest.kt index 1bf4ef322..f8c9a3bb5 100644 --- a/shared/src/test/kotlin/io/github/truenine/composeserver/LoggerExtensionsTest.kt +++ b/shared/src/test/kotlin/io/github/truenine/composeserver/LoggerExtensionsTest.kt @@ -1,9 +1,6 @@ package io.github.truenine.composeserver -import kotlin.test.Test -import kotlin.test.assertEquals -import kotlin.test.assertNotNull -import kotlin.test.assertTrue +import kotlin.test.* import org.slf4j.Logger /** diff --git a/shared/src/test/kotlin/io/github/truenine/composeserver/ResultExtensionsTest.kt b/shared/src/test/kotlin/io/github/truenine/composeserver/ResultExtensionsTest.kt index 07b7059c7..07aba947a 100644 --- a/shared/src/test/kotlin/io/github/truenine/composeserver/ResultExtensionsTest.kt +++ b/shared/src/test/kotlin/io/github/truenine/composeserver/ResultExtensionsTest.kt @@ -1,9 +1,7 @@ package io.github.truenine.composeserver import io.github.truenine.composeserver.testtoolkit.log -import kotlin.test.assertEquals -import kotlin.test.assertFalse -import kotlin.test.assertTrue +import kotlin.test.* import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.test.runTest diff --git a/shared/src/test/kotlin/io/github/truenine/composeserver/consts/ICacheNamesTest.kt b/shared/src/test/kotlin/io/github/truenine/composeserver/consts/ICacheNamesTest.kt index f80372590..d534a90d1 100644 --- a/shared/src/test/kotlin/io/github/truenine/composeserver/consts/ICacheNamesTest.kt +++ b/shared/src/test/kotlin/io/github/truenine/composeserver/consts/ICacheNamesTest.kt @@ -1,9 +1,7 @@ package io.github.truenine.composeserver.consts import io.github.truenine.composeserver.testtoolkit.log -import kotlin.test.Test -import kotlin.test.assertEquals -import kotlin.test.assertTrue +import kotlin.test.* /** Validates cache name constants declared in {@link ICacheNames}. */ class ICacheNamesTest { diff --git a/shared/src/test/kotlin/io/github/truenine/composeserver/consts/IHeadersTest.kt b/shared/src/test/kotlin/io/github/truenine/composeserver/consts/IHeadersTest.kt index 2c9c8d6eb..feded3e54 100644 --- a/shared/src/test/kotlin/io/github/truenine/composeserver/consts/IHeadersTest.kt +++ b/shared/src/test/kotlin/io/github/truenine/composeserver/consts/IHeadersTest.kt @@ -2,9 +2,7 @@ package io.github.truenine.composeserver.consts import io.github.truenine.composeserver.testtoolkit.log import java.nio.charset.StandardCharsets -import kotlin.test.Test -import kotlin.test.assertEquals -import kotlin.test.assertTrue +import kotlin.test.* /** Validates HTTP header constants and helper methods defined in {@link IHeaders}. */ class IHeadersTest { diff --git a/shared/src/test/kotlin/io/github/truenine/composeserver/consts/IInterAddrTest.kt b/shared/src/test/kotlin/io/github/truenine/composeserver/consts/IInterAddrTest.kt index df64d9648..dd5b93fac 100644 --- a/shared/src/test/kotlin/io/github/truenine/composeserver/consts/IInterAddrTest.kt +++ b/shared/src/test/kotlin/io/github/truenine/composeserver/consts/IInterAddrTest.kt @@ -1,9 +1,7 @@ package io.github.truenine.composeserver.consts import io.github.truenine.composeserver.testtoolkit.log -import kotlin.test.Test -import kotlin.test.assertNotNull -import kotlin.test.assertTrue +import kotlin.test.* /** Validates network address utilities exposed via {@link IInterAddr}. */ class IInterAddrTest { diff --git a/shared/src/test/kotlin/io/github/truenine/composeserver/consts/IMethodsTest.kt b/shared/src/test/kotlin/io/github/truenine/composeserver/consts/IMethodsTest.kt index 930f68d51..a9e792f45 100644 --- a/shared/src/test/kotlin/io/github/truenine/composeserver/consts/IMethodsTest.kt +++ b/shared/src/test/kotlin/io/github/truenine/composeserver/consts/IMethodsTest.kt @@ -1,9 +1,7 @@ package io.github.truenine.composeserver.consts import io.github.truenine.composeserver.testtoolkit.log -import kotlin.test.Test -import kotlin.test.assertEquals -import kotlin.test.assertTrue +import kotlin.test.* /** Validates HTTP method constants declared in {@link IMethods}. */ class IMethodsTest { diff --git a/shared/src/test/kotlin/io/github/truenine/composeserver/consts/IParameterNamesTest.kt b/shared/src/test/kotlin/io/github/truenine/composeserver/consts/IParameterNamesTest.kt index b5aabeeca..99fbe1eb6 100644 --- a/shared/src/test/kotlin/io/github/truenine/composeserver/consts/IParameterNamesTest.kt +++ b/shared/src/test/kotlin/io/github/truenine/composeserver/consts/IParameterNamesTest.kt @@ -1,9 +1,7 @@ package io.github.truenine.composeserver.consts import io.github.truenine.composeserver.testtoolkit.log -import kotlin.test.Test -import kotlin.test.assertEquals -import kotlin.test.assertTrue +import kotlin.test.* /** Validates request parameter name constants defined in {@link IParameterNames}. */ class IParameterNamesTest { diff --git a/shared/src/test/kotlin/io/github/truenine/composeserver/consts/IRegexTest.kt b/shared/src/test/kotlin/io/github/truenine/composeserver/consts/IRegexTest.kt index fd115fcce..1e0ac0a7d 100644 --- a/shared/src/test/kotlin/io/github/truenine/composeserver/consts/IRegexTest.kt +++ b/shared/src/test/kotlin/io/github/truenine/composeserver/consts/IRegexTest.kt @@ -1,9 +1,7 @@ package io.github.truenine.composeserver.consts import java.util.regex.Pattern -import kotlin.test.Test -import kotlin.test.assertFalse -import kotlin.test.assertTrue +import kotlin.test.* /** Verifies the regular-expression constants declared in {@link IRegexes}. */ class IRegexTest { diff --git a/shared/src/test/kotlin/io/github/truenine/composeserver/domain/IPageParamTest.kt b/shared/src/test/kotlin/io/github/truenine/composeserver/domain/IPageParamTest.kt index 77034743d..44184ad0c 100644 --- a/shared/src/test/kotlin/io/github/truenine/composeserver/domain/IPageParamTest.kt +++ b/shared/src/test/kotlin/io/github/truenine/composeserver/domain/IPageParamTest.kt @@ -1,17 +1,13 @@ package io.github.truenine.composeserver.domain -import kotlin.test.AfterTest -import kotlin.test.BeforeTest -import kotlin.test.Test +import kotlin.test.* import org.assertj.core.api.Assertions.assertThat import org.springframework.boot.test.context.SpringBootTest import org.springframework.context.annotation.Import import org.springframework.mock.web.MockHttpServletRequest import org.springframework.test.web.servlet.MockMvc import org.springframework.test.web.servlet.setup.MockMvcBuilders -import org.springframework.web.bind.annotation.GetMapping -import org.springframework.web.bind.annotation.RequestParam -import org.springframework.web.bind.annotation.RestController +import org.springframework.web.bind.annotation.* import tools.jackson.databind.ObjectMapper @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK) diff --git a/shared/src/test/kotlin/io/github/truenine/composeserver/domain/TestPqController.kt b/shared/src/test/kotlin/io/github/truenine/composeserver/domain/TestPqController.kt index 1a14c6615..1627ef105 100644 --- a/shared/src/test/kotlin/io/github/truenine/composeserver/domain/TestPqController.kt +++ b/shared/src/test/kotlin/io/github/truenine/composeserver/domain/TestPqController.kt @@ -1,10 +1,7 @@ package io.github.truenine.composeserver.domain import io.github.truenine.composeserver.Pq -import org.springframework.web.bind.annotation.GetMapping -import org.springframework.web.bind.annotation.RequestBody -import org.springframework.web.bind.annotation.RequestMapping -import org.springframework.web.bind.annotation.RestController +import org.springframework.web.bind.annotation.* @RestController @RequestMapping("v1/pq") diff --git a/shared/src/test/kotlin/io/github/truenine/composeserver/domain/enc/EccKeyPairTest.kt b/shared/src/test/kotlin/io/github/truenine/composeserver/domain/enc/EccKeyPairTest.kt index 912739c22..ab38eca4f 100644 --- a/shared/src/test/kotlin/io/github/truenine/composeserver/domain/enc/EccKeyPairTest.kt +++ b/shared/src/test/kotlin/io/github/truenine/composeserver/domain/enc/EccKeyPairTest.kt @@ -3,13 +3,8 @@ package io.github.truenine.composeserver.domain.enc import io.github.truenine.composeserver.domain.IEccKeyPair import io.github.truenine.composeserver.enums.EncryptAlgorithm import io.github.truenine.composeserver.testtoolkit.log -import java.security.KeyPairGenerator -import java.security.PrivateKey -import java.security.PublicKey -import kotlin.test.Test -import kotlin.test.assertEquals -import kotlin.test.assertNotNull -import kotlin.test.assertTrue +import java.security.* +import kotlin.test.* /** Verifies the core behaviour of {@link EccKeyPair}. */ class EccKeyPairTest { diff --git a/shared/src/test/kotlin/io/github/truenine/composeserver/domain/enc/RsaKeyPairTest.kt b/shared/src/test/kotlin/io/github/truenine/composeserver/domain/enc/RsaKeyPairTest.kt index 780015ccd..cf67e9c72 100644 --- a/shared/src/test/kotlin/io/github/truenine/composeserver/domain/enc/RsaKeyPairTest.kt +++ b/shared/src/test/kotlin/io/github/truenine/composeserver/domain/enc/RsaKeyPairTest.kt @@ -7,10 +7,7 @@ import java.math.BigInteger import java.security.KeyPairGenerator import java.security.interfaces.RSAPrivateKey import java.security.interfaces.RSAPublicKey -import kotlin.test.Test -import kotlin.test.assertEquals -import kotlin.test.assertNotNull -import kotlin.test.assertTrue +import kotlin.test.* /** Verifies the core behaviour of {@link RsaKeyPair}. */ class RsaKeyPairTest { diff --git a/shared/src/test/kotlin/io/github/truenine/composeserver/enums/MediaTypesTest.kt b/shared/src/test/kotlin/io/github/truenine/composeserver/enums/MediaTypesTest.kt index 91892ffc8..56b8d78f1 100644 --- a/shared/src/test/kotlin/io/github/truenine/composeserver/enums/MediaTypesTest.kt +++ b/shared/src/test/kotlin/io/github/truenine/composeserver/enums/MediaTypesTest.kt @@ -1,10 +1,6 @@ package io.github.truenine.composeserver.enums -import kotlin.test.Test -import kotlin.test.assertEquals -import kotlin.test.assertNotNull -import kotlin.test.assertNull -import kotlin.test.assertTrue +import kotlin.test.* class MediaTypesTest { diff --git a/shared/src/test/kotlin/io/github/truenine/composeserver/generator/IUUIDGeneratorPropertyTest.kt b/shared/src/test/kotlin/io/github/truenine/composeserver/generator/IUUIDGeneratorPropertyTest.kt new file mode 100644 index 000000000..20bb3feee --- /dev/null +++ b/shared/src/test/kotlin/io/github/truenine/composeserver/generator/IUUIDGeneratorPropertyTest.kt @@ -0,0 +1,164 @@ +package io.github.truenine.composeserver.generator + +import java.util.* +import kotlin.test.assertTrue +import org.junit.jupiter.api.DisplayName +import org.junit.jupiter.api.Test + +/** + * Property-based tests for IUUIDGenerator interface. + * + * These tests verify universal properties that should hold across all implementations and all valid inputs, following the property-based testing methodology. + */ +@DisplayName("IUUIDGenerator Property Tests") +class IUUIDGeneratorPropertyTest { + + /** + * **Feature: uuid-generator, Property 1: Timezone-agnostic timestamp consistency** **Validates: Requirements 1.4, 2.4** + * + * Property: For any system timezone setting, calling currentTimeMillis() should return a timestamp that represents the same absolute point in time (Unix + * epoch milliseconds). + * + * This test verifies that the timestamp is timezone-agnostic by: + * 1. Capturing timestamps in different timezone contexts + * 2. Verifying they represent the same absolute time + * 3. Ensuring the difference is within acceptable tolerance (< 10ms) + */ + @Test + fun `property 1 - timezone-agnostic timestamp consistency`() { + // Create a test implementation of IUUIDGenerator + val generator = + object : IUUIDGenerator { + override fun nextString(): String = "test-uuid" + + override fun toStandardUUIDFormat(ulid: String): String = "00000000-0000-0000-0000-000000000000" + } + + // Store original timezone + val originalTimeZone = TimeZone.getDefault() + + try { + // Test with multiple timezones (100 iterations as per design spec) + val timezones = + listOf( + "UTC", + "America/New_York", + "Europe/London", + "Asia/Tokyo", + "Australia/Sydney", + "America/Los_Angeles", + "Europe/Paris", + "Asia/Shanghai", + "America/Chicago", + "Pacific/Auckland", + ) + + val timestamps = mutableListOf() + + // Collect timestamps from different timezone contexts + for (i in 0 until 100) { + val timezone = timezones[i % timezones.size] + TimeZone.setDefault(TimeZone.getTimeZone(timezone)) + + val timestamp = generator.currentTimeMillis() + timestamps.add(timestamp) + + // Small delay to ensure we're not just getting the same millisecond + if (i % 10 == 0) { + Thread.sleep(1) + } + } + + // Verify all timestamps are monotonically increasing or equal + // (they should increase over time, but timezone changes shouldn't affect this) + for (i in 1 until timestamps.size) { + assertTrue(timestamps[i] >= timestamps[i - 1], "Timestamp at index $i (${timestamps[i]}) should be >= previous timestamp (${timestamps[i - 1]})") + } + + // Verify timestamps are reasonable (within last year and not in future) + val now = System.currentTimeMillis() + val oneYearAgo = now - (365L * 24 * 60 * 60 * 1000) + + for ((index, timestamp) in timestamps.withIndex()) { + assertTrue(timestamp >= oneYearAgo, "Timestamp at index $index should not be older than one year") + assertTrue(timestamp <= now + 1000, "Timestamp at index $index should not be in the future (with 1s tolerance)") + } + + // Verify that changing timezone doesn't affect the absolute time value + // by checking that timestamps collected in different timezones are consistent + TimeZone.setDefault(TimeZone.getTimeZone("UTC")) + val utcTimestamp1 = generator.currentTimeMillis() + + TimeZone.setDefault(TimeZone.getTimeZone("Asia/Tokyo")) + val tokyoTimestamp = generator.currentTimeMillis() + + TimeZone.setDefault(TimeZone.getTimeZone("UTC")) + val utcTimestamp2 = generator.currentTimeMillis() + + // The difference between timestamps should be due to execution time, not timezone + val timeDiff1 = kotlin.math.abs(tokyoTimestamp - utcTimestamp1) + val timeDiff2 = kotlin.math.abs(utcTimestamp2 - tokyoTimestamp) + + // Differences should be small (< 10ms) since they're just execution delays + assertTrue(timeDiff1 < 10, "Time difference between UTC and Tokyo should be < 10ms, but was ${timeDiff1}ms") + assertTrue(timeDiff2 < 10, "Time difference between Tokyo and UTC should be < 10ms, but was ${timeDiff2}ms") + } finally { + // Restore original timezone + TimeZone.setDefault(originalTimeZone) + } + } + + /** + * Additional test to verify currentTimeMillis() returns Unix epoch time. + * + * This test ensures that the timestamp is truly timezone-agnostic by verifying it matches System.currentTimeMillis() which always returns UTC epoch time. + */ + @Test + fun `currentTimeMillis returns Unix epoch time regardless of timezone`() { + val generator = + object : IUUIDGenerator { + override fun nextString(): String = "test-uuid" + + override fun toStandardUUIDFormat(ulid: String): String = "00000000-0000-0000-0000-000000000000" + } + + val originalTimeZone = TimeZone.getDefault() + + try { + val timezones = listOf("UTC", "America/New_York", "Asia/Tokyo", "Europe/London", "Australia/Sydney") + + for (timezone in timezones) { + TimeZone.setDefault(TimeZone.getTimeZone(timezone)) + + val generatorTime = generator.currentTimeMillis() + val systemTime = System.currentTimeMillis() + + // The difference should be negligible (< 1ms) since both should return the same epoch time + val diff = kotlin.math.abs(generatorTime - systemTime) + assertTrue(diff < 1, "In timezone $timezone, generator time should match system time (diff: ${diff}ms)") + } + } finally { + TimeZone.setDefault(originalTimeZone) + } + } + + /** Test that verifies the default implementation of currentTimeMillis() delegates to System.currentTimeMillis(). */ + @Test + fun `currentTimeMillis default implementation uses System currentTimeMillis`() { + val generator = + object : IUUIDGenerator { + override fun nextString(): String = "test-uuid" + + override fun toStandardUUIDFormat(ulid: String): String = "00000000-0000-0000-0000-000000000000" + } + + // Capture timestamps in quick succession + val before = System.currentTimeMillis() + val generatorTime = generator.currentTimeMillis() + val after = System.currentTimeMillis() + + // Generator time should be between before and after + assertTrue(generatorTime >= before, "Generator time should be >= time before call") + assertTrue(generatorTime <= after, "Generator time should be <= time after call") + } +} diff --git a/shared/src/test/kotlin/io/github/truenine/composeserver/generator/OptimizedSnowflakeTest.kt b/shared/src/test/kotlin/io/github/truenine/composeserver/generator/OptimizedSnowflakeTest.kt index c91f944cc..435a66fa3 100644 --- a/shared/src/test/kotlin/io/github/truenine/composeserver/generator/OptimizedSnowflakeTest.kt +++ b/shared/src/test/kotlin/io/github/truenine/composeserver/generator/OptimizedSnowflakeTest.kt @@ -1,19 +1,11 @@ package io.github.truenine.composeserver.generator import java.util.* -import java.util.concurrent.CountDownLatch -import java.util.concurrent.Executors -import java.util.concurrent.TimeUnit +import java.util.concurrent.* import kotlin.math.abs -import kotlin.test.assertEquals -import kotlin.test.assertNotEquals -import kotlin.test.assertTrue -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Nested +import kotlin.test.* +import org.junit.jupiter.api.* import org.junit.jupiter.api.Test -import org.junit.jupiter.api.assertAll -import org.junit.jupiter.api.assertDoesNotThrow -import org.junit.jupiter.api.assertThrows class OptimizedSnowflakeTest { private lateinit var snowflake: SynchronizedSimpleSnowflake diff --git a/shared/src/test/kotlin/io/github/truenine/composeserver/generator/SynchronizedSimpleOrderCodeGeneratorTest.kt b/shared/src/test/kotlin/io/github/truenine/composeserver/generator/SynchronizedSimpleOrderCodeGeneratorTest.kt index 913dc6a75..7b9eda6f6 100644 --- a/shared/src/test/kotlin/io/github/truenine/composeserver/generator/SynchronizedSimpleOrderCodeGeneratorTest.kt +++ b/shared/src/test/kotlin/io/github/truenine/composeserver/generator/SynchronizedSimpleOrderCodeGeneratorTest.kt @@ -1,24 +1,12 @@ package io.github.truenine.composeserver.generator -import io.mockk.every -import io.mockk.mockk -import io.mockk.verify -import java.util.concurrent.ConcurrentHashMap -import java.util.concurrent.CountDownLatch -import java.util.concurrent.Executors -import java.util.concurrent.TimeUnit +import io.mockk.* +import java.util.concurrent.* import kotlin.math.abs -import kotlin.test.assertEquals -import kotlin.test.assertFailsWith -import kotlin.test.assertTrue -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.async -import kotlinx.coroutines.awaitAll -import kotlinx.coroutines.runBlocking -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Nested +import kotlin.test.* +import kotlinx.coroutines.* +import org.junit.jupiter.api.* import org.junit.jupiter.api.Test -import org.junit.jupiter.api.TestInstance import org.springframework.boot.test.context.SpringBootTest @SpringBootTest diff --git a/shared/src/test/kotlin/io/github/truenine/composeserver/generator/SynchronizedSimpleSnowflakeTest.kt b/shared/src/test/kotlin/io/github/truenine/composeserver/generator/SynchronizedSimpleSnowflakeTest.kt index f2c8339f0..7827373e9 100644 --- a/shared/src/test/kotlin/io/github/truenine/composeserver/generator/SynchronizedSimpleSnowflakeTest.kt +++ b/shared/src/test/kotlin/io/github/truenine/composeserver/generator/SynchronizedSimpleSnowflakeTest.kt @@ -1,19 +1,11 @@ package io.github.truenine.composeserver.generator import java.util.* -import java.util.concurrent.CountDownLatch -import java.util.concurrent.Executors -import java.util.concurrent.TimeUnit +import java.util.concurrent.* import kotlin.math.abs import kotlin.test.assertEquals import kotlin.test.assertTrue -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.DisplayName -import org.junit.jupiter.api.Nested -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.assertAll -import org.junit.jupiter.api.assertDoesNotThrow -import org.junit.jupiter.api.assertThrows +import org.junit.jupiter.api.* @DisplayName("SynchronizedSimpleSnowflake Tests") class SynchronizedSimpleSnowflakeTest { diff --git a/shared/src/test/kotlin/io/github/truenine/composeserver/generator/ULIDGeneratorPropertyTest.kt b/shared/src/test/kotlin/io/github/truenine/composeserver/generator/ULIDGeneratorPropertyTest.kt new file mode 100644 index 000000000..9cb3e4748 --- /dev/null +++ b/shared/src/test/kotlin/io/github/truenine/composeserver/generator/ULIDGeneratorPropertyTest.kt @@ -0,0 +1,806 @@ +package io.github.truenine.composeserver.generator + +import java.util.concurrent.* +import kotlin.test.assertEquals +import kotlin.test.assertTrue +import org.junit.jupiter.api.* + +/** + * Property-based tests for ULIDGenerator implementation. + * + * These tests verify universal properties that should hold across all valid inputs and executions. Each test runs multiple iterations to validate properties + * across a range of inputs. + */ +@DisplayName("ULIDGenerator Property Tests") +class ULIDGeneratorPropertyTest { + + /** + * **Feature: uuid-generator, Property 2: ULID format compliance** **Validates: Requirements 2.3** + * + * Property: For any generated UUID string, it should conform to ULID format: exactly 26 characters using valid Crockford Base32 encoding (0-9, A-Z excluding + * I, L, O, U). + * + * This test verifies that all generated ULIDs: + * 1. Have exactly 26 characters + * 2. Only contain valid Crockford Base32 characters + * 3. Are case-insensitive (uppercase by default) + */ + @RepeatedTest(100) + fun `property 2 - ULID format compliance`() { + val generator = ULIDGenerator() + val ulid = generator.nextString() + + // Verify length is exactly 26 characters + assertEquals(26, ulid.length, "ULID must be exactly 26 characters long") + + // Valid Crockford Base32 characters (excludes I, L, O, U) + val validChars = "0123456789ABCDEFGHJKMNPQRSTVWXYZ".toSet() + + // Verify all characters are valid + for ((index, char) in ulid.withIndex()) { + assertTrue(char.uppercaseChar() in validChars, "Character at position $index ('$char') must be valid Crockford Base32 (0-9, A-Z excluding I, L, O, U)") + } + + // Verify the ULID is uppercase (standard format) + assertTrue(ulid.all { it.isUpperCase() || it.isDigit() }, "ULID should be in uppercase format") + } + + /** + * **Feature: uuid-generator, Property 3: Lexicographic ordering** **Validates: Requirements 3.1** + * + * Property: For any two UUIDs generated sequentially (UUID1 before UUID2), UUID2 should be lexicographically greater than or equal to UUID1. + * + * This test verifies that ULIDs maintain lexicographic ordering based on generation time. + */ + @RepeatedTest(100) + fun `property 3 - lexicographic ordering`() { + val generator = ULIDGenerator() + + // Generate pairs of sequential ULIDs + val ulid1 = generator.nextString() + // Small delay to ensure different timestamps (optional, but helps test robustness) + if (System.nanoTime() % 10 == 0L) { + Thread.sleep(1) + } + val ulid2 = generator.nextString() + + // Verify lexicographic ordering + assertTrue(ulid2 >= ulid1, "Later ULID ($ulid2) should be lexicographically >= earlier ULID ($ulid1)") + } + + /** + * **Feature: uuid-generator, Property 4: Timestamp encoding in most significant bits** **Validates: Requirements 3.2** + * + * Property: For any generated ULID, decoding the first 10 characters should yield a valid timestamp that is close to the generation time (within reasonable + * tolerance). + * + * This test verifies that: + * 1. The timestamp is encoded in the first 10 characters + * 2. The decoded timestamp matches the generation time + * 3. The timestamp is in the most significant bits + */ + @RepeatedTest(100) + fun `property 4 - timestamp encoding in most significant bits`() { + // Create a generator with known timestamp + val testGenerator = + object : ULIDGenerator() { + var capturedTimestamp: Long = 0 + + override fun currentTimeMillis(): Long { + capturedTimestamp = super.currentTimeMillis() + return capturedTimestamp + } + } + + val ulid = testGenerator.nextString() + val generationTime = testGenerator.capturedTimestamp + + // Decode the first 10 characters (timestamp component) + val timestampChars = ulid.substring(0, 10) + val decodedTimestamp = decodeTimestamp(timestampChars) + + // Verify the decoded timestamp matches the generation time + assertEquals(generationTime, decodedTimestamp, "Decoded timestamp should match generation time") + + // Verify timestamp is reasonable (not in distant past or future) + val now = System.currentTimeMillis() + assertTrue(decodedTimestamp <= now + 1000, "Decoded timestamp should not be in the future") + assertTrue(decodedTimestamp >= now - 60000, "Decoded timestamp should not be more than 1 minute in the past") + } + + /** + * **Feature: uuid-generator, Property 7: Millisecond precision consistency** **Validates: Requirements 3.5** + * + * Property: For any set of UUIDs generated within the same millisecond, extracting their timestamp components should yield the same millisecond value. + * + * This test verifies that the timestamp component has millisecond precision. + */ + @Test + fun `property 7 - millisecond precision consistency`() { + val generator = ULIDGenerator() + val ulids = mutableListOf() + + // Generate multiple ULIDs rapidly to increase chance of same-millisecond generation + repeat(1000) { ulids.add(generator.nextString()) } + + // Group ULIDs by their timestamp component + val timestampGroups = ulids.groupBy { it.substring(0, 10) } + + // For each group with the same timestamp, verify they were generated in the same millisecond + for ((timestampChars, groupedUlids) in timestampGroups) { + if (groupedUlids.size > 1) { + val decodedTimestamp = decodeTimestamp(timestampChars) + + // All ULIDs in this group should have the same timestamp + for (ulid in groupedUlids) { + val ulidTimestamp = decodeTimestamp(ulid.substring(0, 10)) + assertEquals(decodedTimestamp, ulidTimestamp, "All ULIDs with same timestamp prefix should decode to same millisecond value") + } + } + } + + // Verify that different timestamp prefixes decode to different milliseconds + val uniqueTimestamps = timestampGroups.keys.map { decodeTimestamp(it) }.toSet() + assertTrue(uniqueTimestamps.isNotEmpty(), "Should have at least one unique timestamp") + } + + /** + * **Feature: uuid-generator, Property 9: Monotonic increment within same millisecond** **Validates: Requirements 4.2** + * + * Property: For any sequence of UUIDs generated within the same millisecond in monotonic mode, each UUID should be lexicographically greater than the + * previous one. + * + * This test verifies that monotonic mode ensures increasing ULIDs within the same millisecond. + */ + @Test + fun `property 9 - monotonic increment within same millisecond`() { + val generator = ULIDGenerator(monotonicMode = true) + + // Generate many ULIDs rapidly to force same-millisecond generation + val ulids = mutableListOf() + repeat(10000) { ulids.add(generator.nextString()) } + + // Group by timestamp component + val timestampGroups = ulids.groupBy { it.substring(0, 10) } + + // Find groups with multiple ULIDs (same millisecond) + val sameMillisecondGroups = timestampGroups.filter { it.value.size > 1 } + + assertTrue(sameMillisecondGroups.isNotEmpty(), "Should have at least one group with multiple ULIDs in same millisecond") + + // Verify monotonic ordering within each group + for ((timestamp, groupedUlids) in sameMillisecondGroups) { + for (i in 1 until groupedUlids.size) { + val prev = groupedUlids[i - 1] + val curr = groupedUlids[i] + + assertTrue(curr > prev, "In monotonic mode, ULID at index $i ($curr) should be > previous ULID ($prev) within same millisecond ($timestamp)") + } + } + } + + /** Additional test to verify monotonic mode statistics. */ + @Test + fun `monotonic mode increments counter when generating in same millisecond`() { + val generator = ULIDGenerator(monotonicMode = true) + + // Generate many ULIDs rapidly + repeat(10000) { generator.nextString() } + + val stats = generator.getStatistics() + + // Should have generated 10000 ULIDs + assertEquals(10000, stats.generatedCount) + + // Should have some monotonic increments (when same millisecond occurred) + assertTrue(stats.monotonicIncrementCount > 0, "Should have at least some monotonic increments when generating rapidly") + } + + /** Unit test for statistics tracking: Initial state **Validates: Requirements 4.5** */ + @Test + fun `statistics should start at zero`() { + val generator = ULIDGenerator() + val stats = generator.getStatistics() + + assertEquals(0L, stats.generatedCount, "Initial generated count should be 0") + assertEquals(0L, stats.monotonicIncrementCount, "Initial monotonic increment count should be 0") + } + + /** Unit test for statistics tracking: Generation count increment **Validates: Requirements 4.5** */ + @Test + fun `statistics should track generation count correctly`() { + val generator = ULIDGenerator() + + // Generate 5 ULIDs + repeat(5) { generator.nextString() } + + val stats = generator.getStatistics() + assertEquals(5L, stats.generatedCount, "Generated count should be 5 after generating 5 ULIDs") + + // Generate 3 more ULIDs + repeat(3) { generator.nextString() } + + val updatedStats = generator.getStatistics() + assertEquals(8L, updatedStats.generatedCount, "Generated count should be 8 after generating 8 ULIDs total") + } + + /** Unit test for statistics tracking: Monotonic increment counter **Validates: Requirements 4.5** */ + @Test + fun `statistics should track monotonic increment count in monotonic mode`() { + val generator = ULIDGenerator(monotonicMode = true) + + // Generate many ULIDs rapidly to force same-millisecond generation + repeat(5000) { generator.nextString() } + + val stats = generator.getStatistics() + + assertEquals(5000L, stats.generatedCount, "Generated count should be 5000") + assertTrue(stats.monotonicIncrementCount > 0, "Monotonic increment count should be greater than 0 when generating rapidly in monotonic mode") + assertTrue(stats.monotonicIncrementCount < stats.generatedCount, "Monotonic increment count should be less than total generated count") + } + + /** Unit test for statistics tracking: Non-monotonic mode **Validates: Requirements 4.5** */ + @Test + fun `statistics should not increment monotonic counter in non-monotonic mode`() { + val generator = ULIDGenerator(monotonicMode = false) + + // Generate many ULIDs rapidly + repeat(5000) { generator.nextString() } + + val stats = generator.getStatistics() + + assertEquals(5000L, stats.generatedCount, "Generated count should be 5000") + assertEquals(0L, stats.monotonicIncrementCount, "Monotonic increment count should remain 0 in non-monotonic mode") + } + + /** Unit test for statistics reset functionality **Validates: Requirements 4.5** */ + @Test + fun `resetStatistics should reset all counters to zero`() { + val generator = ULIDGenerator(monotonicMode = true) + + // Generate some ULIDs + repeat(1000) { generator.nextString() } + + val statsBeforeReset = generator.getStatistics() + assertTrue(statsBeforeReset.generatedCount > 0, "Generated count should be greater than 0 before reset") + + // Reset statistics + generator.resetStatistics() + + val statsAfterReset = generator.getStatistics() + assertEquals(0L, statsAfterReset.generatedCount, "Generated count should be 0 after reset") + assertEquals(0L, statsAfterReset.monotonicIncrementCount, "Monotonic increment count should be 0 after reset") + } + + /** Unit test for statistics reset: Generation continues after reset **Validates: Requirements 4.5** */ + @Test + fun `generator should continue working after statistics reset`() { + val generator = ULIDGenerator() + + // Generate some ULIDs + repeat(10) { generator.nextString() } + + // Reset statistics + generator.resetStatistics() + + // Generate more ULIDs + repeat(5) { generator.nextString() } + + val stats = generator.getStatistics() + assertEquals(5L, stats.generatedCount, "Generated count should be 5 after reset and generating 5 more ULIDs") + } + + /** Unit test for statistics under concurrent access **Validates: Requirements 4.5** */ + @Test + fun `statistics should be accurate under concurrent generation`() { + val generator = ULIDGenerator(monotonicMode = true) + val threadCount = 10 + val idsPerThread = 100 + val totalIds = threadCount * idsPerThread + + val executor = Executors.newFixedThreadPool(threadCount) + val latch = CountDownLatch(threadCount) + + repeat(threadCount) { + executor.submit { + try { + repeat(idsPerThread) { generator.nextString() } + } finally { + latch.countDown() + } + } + } + + latch.await() + executor.shutdown() + + val stats = generator.getStatistics() + assertEquals(totalIds.toLong(), stats.generatedCount, "Generated count should be $totalIds after concurrent generation") + } + + /** Unit test for statistics data class properties **Validates: Requirements 4.5** */ + @Test + fun `Statistics data class should have correct properties`() { + val generator = ULIDGenerator(monotonicMode = true) + + repeat(100) { generator.nextString() } + + val stats = generator.getStatistics() + + // Verify Statistics is a data class with correct properties + assertTrue(stats.generatedCount >= 0, "generatedCount should be non-negative") + assertTrue(stats.monotonicIncrementCount >= 0, "monotonicIncrementCount should be non-negative") + + // Verify data class equality + val stats2 = ULIDGenerator.Statistics(stats.generatedCount, stats.monotonicIncrementCount) + assertEquals(stats, stats2, "Statistics with same values should be equal") + + // Verify toString works (data class feature) + val statsString = stats.toString() + assertTrue(statsString.contains("generatedCount"), "Statistics toString should contain generatedCount") + assertTrue(statsString.contains("monotonicIncrementCount"), "Statistics toString should contain monotonicIncrementCount") + } + + /** Unit test for error handling: Invalid ULID string length **Validates: Requirements 4.4** */ + @Test + fun `toStandardUUIDFormat throws exception for invalid ULID length`() { + val generator = ULIDGenerator() + + // Test too short + val shortUlid = "01AN4Z07BY79KA1307SR9X" + val shortException = org.junit.jupiter.api.assertThrows { generator.toStandardUUIDFormat(shortUlid) } + assertTrue(shortException.message?.contains("ULID must be 26 characters long") == true, "Exception message should indicate expected length") + assertTrue(shortException.message?.contains("but got ${shortUlid.length}") == true, "Exception message should indicate actual length") + + // Test too long + val longUlid = "01AN4Z07BY79KA1307SR9X4MV3EXTRA" + val longException = org.junit.jupiter.api.assertThrows { generator.toStandardUUIDFormat(longUlid) } + assertTrue(longException.message?.contains("ULID must be 26 characters long") == true, "Exception message should indicate expected length") + assertTrue(longException.message?.contains("but got ${longUlid.length}") == true, "Exception message should indicate actual length") + + // Test empty string + val emptyException = org.junit.jupiter.api.assertThrows { generator.toStandardUUIDFormat("") } + assertTrue( + emptyException.message?.contains("ULID must be 26 characters long") == true, + "Exception message should indicate expected length for empty string", + ) + } + + /** Unit test for error handling: Invalid characters in ULID **Validates: Requirements 4.4** */ + @Test + fun `toStandardUUIDFormat throws exception for invalid characters`() { + val generator = ULIDGenerator() + + // Test with invalid character (not in Crockford Base32) + val invalidChars = + listOf( + "01AN4Z07BY79KA1307SR9X4M@3", // @ is invalid + "01AN4Z07BY79KA1307SR9X4M#3", // # is invalid + "01AN4Z07BY79KA1307SR9X4M$3", // $ is invalid + "01AN4Z07BY79KA1307SR9X4M%3", // % is invalid + ) + + for (invalidUlid in invalidChars) { + val exception = org.junit.jupiter.api.assertThrows { generator.toStandardUUIDFormat(invalidUlid) } + assertTrue(exception.message?.contains("Invalid ULID character") == true, "Exception message should indicate invalid character for: $invalidUlid") + } + } + + /** Unit test for error handling: Verify meaningful exception messages **Validates: Requirements 4.4** */ + @Test + fun `error messages are meaningful and helpful`() { + val generator = ULIDGenerator() + + // Test length error message + val lengthException = org.junit.jupiter.api.assertThrows { generator.toStandardUUIDFormat("SHORT") } + assertTrue(lengthException.message?.contains("26 characters") == true, "Length error should mention expected length") + assertTrue(lengthException.message?.contains("but got") == true, "Length error should mention actual length") + + // Test invalid character error message + val charException = org.junit.jupiter.api.assertThrows { generator.toStandardUUIDFormat("01AN4Z07BY79KA1307SR9X4M@3") } + assertTrue(charException.message?.contains("Invalid ULID character") == true, "Character error should mention invalid character") + assertTrue(charException.message?.contains("@") == true, "Character error should show the invalid character") + } + + /** Unit test to verify case-insensitive decoding works correctly */ + @Test + fun `toStandardUUIDFormat handles case-insensitive input`() { + val generator = ULIDGenerator() + val ulid = generator.nextString() + + // Convert to lowercase + val lowercaseUlid = ulid.lowercase() + + // Both should produce valid UUIDs + val uuidFromUppercase = generator.toStandardUUIDFormat(ulid) + val uuidFromLowercase = generator.toStandardUUIDFormat(lowercaseUlid) + + // Both should be valid UUID format + val hexPattern = Regex("^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$") + assertTrue(hexPattern.matches(uuidFromUppercase), "Uppercase ULID should convert to valid UUID") + assertTrue(hexPattern.matches(uuidFromLowercase), "Lowercase ULID should convert to valid UUID") + + // They should produce the same UUID + assertEquals(uuidFromUppercase, uuidFromLowercase, "Case-insensitive decoding should produce same UUID") + } + + /** Unit test to verify common character confusions are handled */ + @Test + fun `toStandardUUIDFormat handles common character confusions`() { + val generator = ULIDGenerator() + + // Generate a ULID and replace some characters with confusable ones + val ulid = "01AN4Z07BY79KA1307SR9X4MV3" + + // Test I/i -> 1 confusion + val ulidWithI = ulid.replace('1', 'I') + val uuidWithI = generator.toStandardUUIDFormat(ulidWithI) + assertTrue(uuidWithI.matches(Regex("^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$")), "ULID with 'I' should be decoded as '1'") + + // Test L/l -> 1 confusion + val ulidWithL = ulid.replace('1', 'L') + val uuidWithL = generator.toStandardUUIDFormat(ulidWithL) + assertTrue(uuidWithL.matches(Regex("^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$")), "ULID with 'L' should be decoded as '1'") + + // Test O/o -> 0 confusion + val ulidWithO = ulid.replace('0', 'O') + val uuidWithO = generator.toStandardUUIDFormat(ulidWithO) + assertTrue(uuidWithO.matches(Regex("^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$")), "ULID with 'O' should be decoded as '0'") + } + + /** + * **Feature: uuid-generator, Property 5: Standard UUID format conversion** **Validates: Requirements 3.3** + * + * Property: For any generated ULID string, converting it to standard UUID format should produce a valid 36-character string with hyphens at positions 8, 13, + * 18, and 23. + * + * This test verifies that: + * 1. The converted UUID has exactly 36 characters + * 2. Hyphens are at the correct positions (8, 13, 18, 23) + * 3. All other characters are valid hexadecimal digits + * 4. The format matches the standard UUID pattern + */ + @RepeatedTest(100) + fun `property 5 - standard UUID format conversion`() { + val generator = ULIDGenerator() + val ulid = generator.nextString() + + val uuid = generator.toStandardUUIDFormat(ulid) + + // Verify length is exactly 36 characters + assertEquals(36, uuid.length, "UUID must be exactly 36 characters long") + + // Verify hyphens are at correct positions + assertEquals('-', uuid[8], "Hyphen must be at position 8") + assertEquals('-', uuid[13], "Hyphen must be at position 13") + assertEquals('-', uuid[18], "Hyphen must be at position 18") + assertEquals('-', uuid[23], "Hyphen must be at position 23") + + // Verify all non-hyphen characters are valid hexadecimal + val hexPattern = Regex("^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$") + assertTrue(hexPattern.matches(uuid), "UUID must match standard format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (lowercase hex)") + } + + /** + * **Feature: uuid-generator, Property 6: Timestamp round-trip consistency** **Validates: Requirements 3.4** + * + * Property: For any timestamp value, encoding it into a ULID and then extracting the timestamp component should yield the same value (within millisecond + * precision). + * + * This test verifies that: + * 1. The timestamp can be extracted from a ULID + * 2. The extracted timestamp matches the original timestamp + * 3. The round-trip preserves millisecond precision + */ + @RepeatedTest(100) + fun `property 6 - timestamp round-trip consistency`() { + // Create a generator that captures the timestamp + val testGenerator = + object : ULIDGenerator() { + var capturedTimestamp: Long = 0 + + override fun currentTimeMillis(): Long { + capturedTimestamp = super.currentTimeMillis() + return capturedTimestamp + } + } + + // Generate ULID and capture timestamp + val ulid = testGenerator.nextString() + val originalTimestamp = testGenerator.capturedTimestamp + + // Extract timestamp from ULID (first 10 characters) + val timestampChars = ulid.substring(0, 10) + val extractedTimestamp = decodeTimestamp(timestampChars) + + // Verify round-trip consistency + assertEquals(originalTimestamp, extractedTimestamp, "Extracted timestamp should match original timestamp (round-trip consistency)") + } + + /** + * **Feature: uuid-generator, Property 8: Concurrent uniqueness** **Validates: Requirements 4.1** + * + * Property: For any concurrent generation of N UUIDs from multiple threads, all N UUIDs should be unique (no duplicates). + * + * This test verifies that: + * 1. ULIDs generated concurrently from multiple threads are all unique + * 2. No race conditions cause duplicate IDs + * 3. Thread-safe synchronization works correctly + */ + @RepeatedTest(100) + fun `property 8 - concurrent uniqueness`() { + val generator = ULIDGenerator() + val threadCount = 10 + val idsPerThread = 100 + val totalIds = threadCount * idsPerThread + + val generatedIds = ConcurrentHashMap.newKeySet() + val executor = Executors.newFixedThreadPool(threadCount) + val latch = CountDownLatch(threadCount) + + // Generate ULIDs concurrently from multiple threads + repeat(threadCount) { + executor.submit { + try { + repeat(idsPerThread) { + val ulid = generator.nextString() + generatedIds.add(ulid) + } + } finally { + latch.countDown() + } + } + } + + // Wait for all threads to complete + latch.await() + executor.shutdown() + + // Verify all ULIDs are unique + assertEquals(totalIds, generatedIds.size, "All $totalIds concurrently generated ULIDs should be unique (no duplicates)") + + // Additional verification: all IDs should be valid ULID format + for (ulid in generatedIds) { + assertEquals(26, ulid.length, "All generated ULIDs should be 26 characters") + assertTrue(ulid.all { it.isUpperCase() || it.isDigit() }, "All generated ULIDs should be uppercase") + } + } + + /** Unit test for thread safety: Concurrent generation from multiple threads **Validates: Requirements 2.5, 4.1** */ + @Test + fun `concurrent generation from multiple threads produces unique ULIDs`() { + val generator = ULIDGenerator() + val threadCount = 20 + val idsPerThread = 500 + val totalIds = threadCount * idsPerThread + + val generatedIds = ConcurrentHashMap.newKeySet() + val executor = Executors.newFixedThreadPool(threadCount) + val latch = CountDownLatch(threadCount) + + // Generate ULIDs concurrently + repeat(threadCount) { + executor.submit { + try { + repeat(idsPerThread) { + val ulid = generator.nextString() + val wasNew = generatedIds.add(ulid) + assertTrue(wasNew, "Each generated ULID should be unique, but found duplicate: $ulid") + } + } finally { + latch.countDown() + } + } + } + + latch.await() + executor.shutdown() + + assertEquals(totalIds, generatedIds.size, "Should generate exactly $totalIds unique ULIDs from $threadCount threads") + } + + /** Unit test for thread safety: No race conditions in state management **Validates: Requirements 2.5, 4.1** */ + @Test + fun `no race conditions in timestamp and random bytes state management`() { + val generator = ULIDGenerator(monotonicMode = true) + val threadCount = 15 + val idsPerThread = 1000 + val totalIds = threadCount * idsPerThread + + val generatedIds = ConcurrentHashMap.newKeySet() + val executor = Executors.newFixedThreadPool(threadCount) + val latch = CountDownLatch(threadCount) + + // Generate ULIDs rapidly to stress-test state management + repeat(threadCount) { + executor.submit { + try { + repeat(idsPerThread) { + val ulid = generator.nextString() + generatedIds.add(ulid) + } + } finally { + latch.countDown() + } + } + } + + latch.await() + executor.shutdown() + + // Verify no duplicates (indicates no race conditions) + assertEquals(totalIds, generatedIds.size, "No race conditions should occur - all ULIDs should be unique") + + // Verify all ULIDs are valid format + for (ulid in generatedIds) { + assertEquals(26, ulid.length, "All ULIDs should be 26 characters") + val validChars = "0123456789ABCDEFGHJKMNPQRSTVWXYZ".toSet() + assertTrue(ulid.all { it.uppercaseChar() in validChars }, "All ULIDs should contain only valid Crockford Base32 characters") + } + } + + /** Unit test for thread safety: Statistics consistency under concurrency **Validates: Requirements 2.5, 4.1** */ + @Test + fun `statistics remain consistent under concurrent access`() { + val generator = ULIDGenerator(monotonicMode = true) + val threadCount = 10 + val idsPerThread = 1000 + val totalIds = threadCount * idsPerThread + + val executor = Executors.newFixedThreadPool(threadCount) + val latch = CountDownLatch(threadCount) + + // Generate ULIDs concurrently + repeat(threadCount) { + executor.submit { + try { + repeat(idsPerThread) { generator.nextString() } + } finally { + latch.countDown() + } + } + } + + latch.await() + executor.shutdown() + + val stats = generator.getStatistics() + + // Verify generated count is accurate + assertEquals(totalIds.toLong(), stats.generatedCount, "Generated count should be exactly $totalIds under concurrent access") + + // Verify monotonic increment count is reasonable + assertTrue(stats.monotonicIncrementCount >= 0, "Monotonic increment count should be non-negative") + assertTrue(stats.monotonicIncrementCount < stats.generatedCount, "Monotonic increment count should be less than total generated count") + } + + /** Unit test for thread safety: Monotonic mode under high concurrency **Validates: Requirements 2.5, 4.1** */ + @Test + fun `monotonic mode maintains ordering under concurrent access`() { + val generator = ULIDGenerator(monotonicMode = true) + val threadCount = 10 + val idsPerThread = 500 + + val allUlids = ConcurrentHashMap.newKeySet() + val executor = Executors.newFixedThreadPool(threadCount) + val latch = CountDownLatch(threadCount) + + repeat(threadCount) { + executor.submit { + try { + repeat(idsPerThread) { + val ulid = generator.nextString() + allUlids.add(ulid) + } + } finally { + latch.countDown() + } + } + } + + latch.await() + executor.shutdown() + + // Group by timestamp + val timestampGroups = allUlids.groupBy { it.substring(0, 10) } + + // Verify monotonic ordering within each timestamp group + for ((timestamp, ulids) in timestampGroups) { + if (ulids.size > 1) { + val sortedUlids = ulids.sorted() + // In monotonic mode, ULIDs with same timestamp should be in order + // We can't guarantee perfect ordering across threads, but we can verify uniqueness + assertEquals(ulids.size, ulids.toSet().size, "All ULIDs with timestamp $timestamp should be unique") + } + } + } + + /** Unit test for thread safety: Secure random mode under concurrency **Validates: Requirements 2.5, 4.1** */ + @Test + fun `secure random mode works correctly under concurrent access`() { + val generator = ULIDGenerator(useSecureRandom = true, monotonicMode = true) + val threadCount = 10 + val idsPerThread = 200 + val totalIds = threadCount * idsPerThread + + val generatedIds = ConcurrentHashMap.newKeySet() + val executor = Executors.newFixedThreadPool(threadCount) + val latch = CountDownLatch(threadCount) + + repeat(threadCount) { + executor.submit { + try { + repeat(idsPerThread) { + val ulid = generator.nextString() + generatedIds.add(ulid) + } + } finally { + latch.countDown() + } + } + } + + latch.await() + executor.shutdown() + + // Verify all ULIDs are unique even with SecureRandom + assertEquals(totalIds, generatedIds.size, "SecureRandom mode should produce $totalIds unique ULIDs under concurrent access") + } + + /** Unit test for thread safety: Mixed mode operations **Validates: Requirements 2.5, 4.1** */ + @Test + fun `multiple generators can operate concurrently without interference`() { + val generator1 = ULIDGenerator(monotonicMode = true) + val generator2 = ULIDGenerator(monotonicMode = false) + val generator3 = ULIDGenerator(useSecureRandom = true) + + val allIds = ConcurrentHashMap.newKeySet() + val threadCount = 15 + val idsPerThread = 100 + val executor = Executors.newFixedThreadPool(threadCount) + val latch = CountDownLatch(threadCount) + + // Use different generators from different threads + repeat(threadCount) { threadIndex -> + executor.submit { + try { + val generator = + when (threadIndex % 3) { + 0 -> generator1 + 1 -> generator2 + else -> generator3 + } + repeat(idsPerThread) { + val ulid = generator.nextString() + allIds.add(ulid) + } + } finally { + latch.countDown() + } + } + } + + latch.await() + executor.shutdown() + + // Verify all IDs are unique across all generators + val expectedTotal = threadCount * idsPerThread + assertEquals(expectedTotal, allIds.size, "All ULIDs from multiple generators should be unique") + } + + /** Helper function to decode timestamp from ULID timestamp component. Decodes the first 10 characters of a ULID to extract the timestamp. */ + private fun decodeTimestamp(timestampChars: String): Long { + require(timestampChars.length == 10) { "Timestamp component must be 10 characters" } + + val encoding = "0123456789ABCDEFGHJKMNPQRSTVWXYZ" + var timestamp = 0L + + for (char in timestampChars) { + val value = encoding.indexOf(char.uppercaseChar()) + require(value >= 0) { "Invalid character in timestamp: $char" } + timestamp = (timestamp shl 5) or value.toLong() + } + + return timestamp + } +} diff --git a/shared/src/test/kotlin/io/github/truenine/composeserver/holders/ResourceHolderTest.kt b/shared/src/test/kotlin/io/github/truenine/composeserver/holders/ResourceHolderTest.kt index 84f009fe4..d89a097ac 100644 --- a/shared/src/test/kotlin/io/github/truenine/composeserver/holders/ResourceHolderTest.kt +++ b/shared/src/test/kotlin/io/github/truenine/composeserver/holders/ResourceHolderTest.kt @@ -1,9 +1,7 @@ package io.github.truenine.composeserver.holders import jakarta.annotation.Resource -import kotlin.test.Test -import kotlin.test.assertNotNull -import kotlin.test.assertTrue +import kotlin.test.* import org.springframework.boot.test.context.SpringBootTest import org.springframework.core.io.ResourceLoader diff --git a/shared/src/test/kotlin/io/github/truenine/composeserver/holders/config/ResourceHolderConfigurationTest.kt b/shared/src/test/kotlin/io/github/truenine/composeserver/holders/config/ResourceHolderConfigurationTest.kt index bcac5479e..264bd5e90 100644 --- a/shared/src/test/kotlin/io/github/truenine/composeserver/holders/config/ResourceHolderConfigurationTest.kt +++ b/shared/src/test/kotlin/io/github/truenine/composeserver/holders/config/ResourceHolderConfigurationTest.kt @@ -1,9 +1,7 @@ package io.github.truenine.composeserver.holders.config -import kotlin.test.assertEquals -import kotlin.test.assertFalse +import kotlin.test.* import kotlin.test.assertNull -import kotlin.test.assertTrue import org.junit.jupiter.api.Nested import org.junit.jupiter.api.Test import org.junit.jupiter.api.assertThrows diff --git a/shared/src/test/kotlin/io/github/truenine/composeserver/holders/config/ResourceSourceTest.kt b/shared/src/test/kotlin/io/github/truenine/composeserver/holders/config/ResourceSourceTest.kt index ceffeda7a..deefe2149 100644 --- a/shared/src/test/kotlin/io/github/truenine/composeserver/holders/config/ResourceSourceTest.kt +++ b/shared/src/test/kotlin/io/github/truenine/composeserver/holders/config/ResourceSourceTest.kt @@ -3,10 +3,7 @@ package io.github.truenine.composeserver.holders.config import io.github.truenine.composeserver.holders.exception.InvalidResourceSourceException import io.mockk.every import io.mockk.mockk -import kotlin.test.assertEquals -import kotlin.test.assertFalse -import kotlin.test.assertNull -import kotlin.test.assertTrue +import kotlin.test.* import org.junit.jupiter.api.Test import org.junit.jupiter.api.assertThrows import org.springframework.core.io.ByteArrayResource diff --git a/shared/src/test/kotlin/io/github/truenine/composeserver/holders/fallback/ResourceFallbackHandlerTest.kt b/shared/src/test/kotlin/io/github/truenine/composeserver/holders/fallback/ResourceFallbackHandlerTest.kt index 42eb2da75..971de5890 100644 --- a/shared/src/test/kotlin/io/github/truenine/composeserver/holders/fallback/ResourceFallbackHandlerTest.kt +++ b/shared/src/test/kotlin/io/github/truenine/composeserver/holders/fallback/ResourceFallbackHandlerTest.kt @@ -1,15 +1,9 @@ package io.github.truenine.composeserver.holders.fallback -import io.github.truenine.composeserver.holders.config.FallbackConfiguration -import io.github.truenine.composeserver.holders.config.ResourceSource -import io.github.truenine.composeserver.holders.config.ResourceType -import io.mockk.every -import io.mockk.mockk -import io.mockk.verify -import kotlin.test.assertEquals -import kotlin.test.assertFalse +import io.github.truenine.composeserver.holders.config.* +import io.mockk.* +import kotlin.test.* import kotlin.test.assertNotNull -import kotlin.test.assertTrue import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Nested import org.junit.jupiter.api.Test diff --git a/shared/src/test/kotlin/io/github/truenine/composeserver/holders/monitoring/ResourceHolderMetricsTest.kt b/shared/src/test/kotlin/io/github/truenine/composeserver/holders/monitoring/ResourceHolderMetricsTest.kt index b308a43c8..39eeef770 100644 --- a/shared/src/test/kotlin/io/github/truenine/composeserver/holders/monitoring/ResourceHolderMetricsTest.kt +++ b/shared/src/test/kotlin/io/github/truenine/composeserver/holders/monitoring/ResourceHolderMetricsTest.kt @@ -1,9 +1,7 @@ package io.github.truenine.composeserver.holders.monitoring -import kotlin.test.assertEquals -import kotlin.test.assertFalse +import kotlin.test.* import kotlin.test.assertNotNull -import kotlin.test.assertTrue import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Nested import org.junit.jupiter.api.Test diff --git a/shared/src/test/kotlin/io/github/truenine/composeserver/holders/optimization/PerformanceOptimizerTest.kt b/shared/src/test/kotlin/io/github/truenine/composeserver/holders/optimization/PerformanceOptimizerTest.kt index 2451e10bf..9eeb845ec 100644 --- a/shared/src/test/kotlin/io/github/truenine/composeserver/holders/optimization/PerformanceOptimizerTest.kt +++ b/shared/src/test/kotlin/io/github/truenine/composeserver/holders/optimization/PerformanceOptimizerTest.kt @@ -1,10 +1,7 @@ package io.github.truenine.composeserver.holders.optimization -import kotlin.test.assertEquals -import kotlin.test.assertFalse -import kotlin.test.assertNotEquals +import kotlin.test.* import kotlin.test.assertNotNull -import kotlin.test.assertTrue import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Nested diff --git a/shared/src/test/kotlin/io/github/truenine/composeserver/holders/resolver/ResourceCacheTest.kt b/shared/src/test/kotlin/io/github/truenine/composeserver/holders/resolver/ResourceCacheTest.kt index d8cf39099..fd112a6d9 100644 --- a/shared/src/test/kotlin/io/github/truenine/composeserver/holders/resolver/ResourceCacheTest.kt +++ b/shared/src/test/kotlin/io/github/truenine/composeserver/holders/resolver/ResourceCacheTest.kt @@ -1,11 +1,7 @@ package io.github.truenine.composeserver.holders.resolver import io.mockk.mockk -import kotlin.test.assertEquals -import kotlin.test.assertNotEquals -import kotlin.test.assertNotNull -import kotlin.test.assertNull -import kotlin.test.assertTrue +import kotlin.test.* import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.springframework.core.io.ByteArrayResource diff --git a/shared/src/test/kotlin/io/github/truenine/composeserver/holders/resolver/ResourceResolverTest.kt b/shared/src/test/kotlin/io/github/truenine/composeserver/holders/resolver/ResourceResolverTest.kt index c74aa0ca1..5b67547b9 100644 --- a/shared/src/test/kotlin/io/github/truenine/composeserver/holders/resolver/ResourceResolverTest.kt +++ b/shared/src/test/kotlin/io/github/truenine/composeserver/holders/resolver/ResourceResolverTest.kt @@ -1,22 +1,14 @@ package io.github.truenine.composeserver.holders.resolver -import io.github.truenine.composeserver.holders.config.FallbackConfiguration -import io.github.truenine.composeserver.holders.config.ResourceSource -import io.github.truenine.composeserver.holders.config.ResourceType +import io.github.truenine.composeserver.holders.config.* import io.github.truenine.composeserver.holders.exception.InvalidResourcePatternException -import io.mockk.every -import io.mockk.mockk -import io.mockk.verify -import kotlin.test.assertEquals -import kotlin.test.assertFalse +import io.mockk.* +import kotlin.test.* import kotlin.test.assertNotNull -import kotlin.test.assertTrue import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.junit.jupiter.api.assertThrows -import org.springframework.core.io.ByteArrayResource -import org.springframework.core.io.Resource -import org.springframework.core.io.ResourceLoader +import org.springframework.core.io.* import org.springframework.core.io.support.PathMatchingResourcePatternResolver class ResourceResolverTest { diff --git a/shared/src/test/kotlin/io/github/truenine/composeserver/holders/validation/ResourceValidatorTest.kt b/shared/src/test/kotlin/io/github/truenine/composeserver/holders/validation/ResourceValidatorTest.kt index dedeee9f0..e7018c679 100644 --- a/shared/src/test/kotlin/io/github/truenine/composeserver/holders/validation/ResourceValidatorTest.kt +++ b/shared/src/test/kotlin/io/github/truenine/composeserver/holders/validation/ResourceValidatorTest.kt @@ -4,13 +4,9 @@ import io.github.truenine.composeserver.holders.config.ResourceSource import io.github.truenine.composeserver.holders.config.ResourceType import io.github.truenine.composeserver.holders.exception.InvalidResourcePatternException import io.github.truenine.composeserver.holders.exception.InvalidResourceSourceException -import kotlin.test.assertEquals -import kotlin.test.assertFalse -import kotlin.test.assertTrue -import kotlin.test.fail -import org.junit.jupiter.api.Nested +import kotlin.test.* +import org.junit.jupiter.api.* import org.junit.jupiter.api.Test -import org.junit.jupiter.api.assertThrows class ResourceValidatorTest { diff --git a/sms/sms-tencent/build.gradle.kts b/sms/sms-tencent/build.gradle.kts index b6988ccff..499c7beae 100644 --- a/sms/sms-tencent/build.gradle.kts +++ b/sms/sms-tencent/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("buildlogic.kotlinspring-conventions") + id("buildlogic.kotlin-spring-boot-conventions") id("buildlogic.spotless-conventions") } diff --git a/sms/sms-tencent/src/test/kotlin/io/github/truenine/composeserver/sms/tencent/TencentSmsTest.kt b/sms/sms-tencent/src/test/kotlin/io/github/truenine/composeserver/sms/tencent/TencentSmsTest.kt index 8cb114a9b..2bf8c946d 100644 --- a/sms/sms-tencent/src/test/kotlin/io/github/truenine/composeserver/sms/tencent/TencentSmsTest.kt +++ b/sms/sms-tencent/src/test/kotlin/io/github/truenine/composeserver/sms/tencent/TencentSmsTest.kt @@ -6,12 +6,7 @@ import com.tencentcloudapi.common.profile.Language import com.tencentcloudapi.sms.v20210111.SmsClient import com.tencentcloudapi.sms.v20210111.models.SendSmsRequest import com.tencentcloudapi.sms.v20210111.models.SendSmsResponse -import kotlin.test.Ignore -import kotlin.test.Test -import kotlin.test.assertContains -import kotlin.test.assertNotEquals -import kotlin.test.assertNotNull -import kotlin.test.assertTrue +import kotlin.test.* class TencentSmsTest { diff --git a/surveillance/surveillance-hikvision/build.gradle.kts b/surveillance/surveillance-hikvision/build.gradle.kts index 8f074ec37..ba4f86ebc 100644 --- a/surveillance/surveillance-hikvision/build.gradle.kts +++ b/surveillance/surveillance-hikvision/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("buildlogic.kotlinspring-conventions") + id("buildlogic.kotlin-spring-boot-conventions") id("buildlogic.spotless-conventions") } diff --git a/surveillance/surveillance-shared/build.gradle.kts b/surveillance/surveillance-shared/build.gradle.kts index 7fb469043..ddba0ac9e 100644 --- a/surveillance/surveillance-shared/build.gradle.kts +++ b/surveillance/surveillance-shared/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("buildlogic.kotlinspring-conventions") + id("buildlogic.kotlin-spring-boot-conventions") id("buildlogic.spotless-conventions") } diff --git a/testtoolkit/AGENTS.md b/testtoolkit/AGENTS.md deleted file mode 100644 index ad0e7ba89..000000000 --- a/testtoolkit/AGENTS.md +++ /dev/null @@ -1,145 +0,0 @@ -# Test Toolkit - -Test toolkit providing automatic configuration and utility functions during testing. - -## Features - -### Auto Configuration - -- **Disable Condition Evaluation Report**: Automatically disable Spring Boot's condition evaluation report to reduce test log noise -- **Disable Banner**: Automatically disable Spring Boot startup banner to simplify test output -- **Enable Virtual Threads**: Enable JDK virtual threads by default to improve test performance -- **ANSI Color Output**: Support multiple color output modes (never/detect/always) to enhance log readability -- **Property Injection**: Support custom test property injection -- **Early Configuration**: Use ApplicationListener for configuration in early application startup stages - -### Utility Functions - -- **Logging Utilities**: Provide Kotlin-style logging functions -- **Spring MVC Utilities**: Provide MVC-related utility functions during testing -- **Testcontainers Support**: Integrate Testcontainers testing tools - -## Usage - -### 1. Add Dependencies - -Add to your module's `build.gradle.kts`: - -```kotlin -dependencies { - testImplementation(project(":testtoolkit")) -} -``` - -### 2. Auto Configuration - -TestToolkit uses Spring Boot's auto-configuration mechanism, no manual configuration required. - -#### Default Configuration - -```yaml -# application-test.yml -compose: - testtoolkit: - enabled: true # Enable test toolkit - disable-condition-evaluation-report: true # Disable condition evaluation report - enable-virtual-threads: true # Enable virtual threads - ansi-output-mode: always # ANSI color output mode -``` - -#### Custom Configuration - -```yaml -# application-test.yml -compose: - testtoolkit: - enabled: true - disable-condition-evaluation-report: false - enable-virtual-threads: true - ansi-output-mode: detect # never, detect, always - additional-properties: - custom.property.1: "value1" - custom.property.2: "value2" -``` - -### 3. Test Class Example - -```kotlin -@SpringBootTest -class MyServiceTest { - - @Autowired - private lateinit var myService: MyService - - @Test - fun `test service functionality`() { - log.trace("testing service functionality") - - val result = myService.doSomething() - - assertTrue(result.isSuccess, "service call should succeed") - - log.debug("service test completed") - } -} -``` - -### 4. Disable Auto Configuration - -To disable auto configuration in specific tests: - -```kotlin -@SpringBootTest -@TestPropertySource(properties = ["compose.testtoolkit.enabled=false"]) -class MySpecialTest { - // Test code -} -``` - -## Configuration Properties - -| Property Name | Type | Default | Description | -|-----------------------------------------------------------|---------------------|--------|--------------------------------------------| -| `compose.testtoolkit.enabled` | Boolean | true | Whether to enable test toolkit | -| `compose.testtoolkit.disable-condition-evaluation-report` | Boolean | true | Whether to disable condition evaluation report | -| `compose.testtoolkit.enable-virtual-threads` | Boolean | true | Whether to enable virtual threads | -| `compose.testtoolkit.ansi-output-mode` | AnsiOutputMode | always | ANSI color output mode (never/detect/always) | -| `compose.testtoolkit.additional-properties` | Map | {} | Additional test properties | - -## Provided Beans - -- **TestConfigurationBean**: Main configuration bean -- **TestEnvironmentPostProcessor**: Test environment post-processor - -## Utility Functions - -### Logging Functions - -```kotlin -// Get logger instance -val log = this.log - -// Print variable values directly -log.info(::variableName) -``` - -### Type Aliases - -```kotlin -typealias SysLogger = org.slf4j.Logger -typealias RDBRollback = Rollback -typealias TempDirMapping = TempDir -``` - -## Best Practices - -1. **Test Method Naming**: Use Chinese naming for test methods to describe test scenarios -2. **Logging**: Log at the beginning and end of test methods for debugging -3. **Property Configuration**: Place test-related configurations in `application-test.yml` -4. **Environment Isolation**: Use profiles to distinguish different test environments - -## Notes - -- Auto configuration only takes effect in test environments -- Color output requires terminal ANSI color support -- Disabling condition evaluation report may affect debugging, enable as needed \ No newline at end of file diff --git a/testtoolkit/CLAUDE.md b/testtoolkit/CLAUDE.md deleted file mode 100644 index ad0e7ba89..000000000 --- a/testtoolkit/CLAUDE.md +++ /dev/null @@ -1,145 +0,0 @@ -# Test Toolkit - -Test toolkit providing automatic configuration and utility functions during testing. - -## Features - -### Auto Configuration - -- **Disable Condition Evaluation Report**: Automatically disable Spring Boot's condition evaluation report to reduce test log noise -- **Disable Banner**: Automatically disable Spring Boot startup banner to simplify test output -- **Enable Virtual Threads**: Enable JDK virtual threads by default to improve test performance -- **ANSI Color Output**: Support multiple color output modes (never/detect/always) to enhance log readability -- **Property Injection**: Support custom test property injection -- **Early Configuration**: Use ApplicationListener for configuration in early application startup stages - -### Utility Functions - -- **Logging Utilities**: Provide Kotlin-style logging functions -- **Spring MVC Utilities**: Provide MVC-related utility functions during testing -- **Testcontainers Support**: Integrate Testcontainers testing tools - -## Usage - -### 1. Add Dependencies - -Add to your module's `build.gradle.kts`: - -```kotlin -dependencies { - testImplementation(project(":testtoolkit")) -} -``` - -### 2. Auto Configuration - -TestToolkit uses Spring Boot's auto-configuration mechanism, no manual configuration required. - -#### Default Configuration - -```yaml -# application-test.yml -compose: - testtoolkit: - enabled: true # Enable test toolkit - disable-condition-evaluation-report: true # Disable condition evaluation report - enable-virtual-threads: true # Enable virtual threads - ansi-output-mode: always # ANSI color output mode -``` - -#### Custom Configuration - -```yaml -# application-test.yml -compose: - testtoolkit: - enabled: true - disable-condition-evaluation-report: false - enable-virtual-threads: true - ansi-output-mode: detect # never, detect, always - additional-properties: - custom.property.1: "value1" - custom.property.2: "value2" -``` - -### 3. Test Class Example - -```kotlin -@SpringBootTest -class MyServiceTest { - - @Autowired - private lateinit var myService: MyService - - @Test - fun `test service functionality`() { - log.trace("testing service functionality") - - val result = myService.doSomething() - - assertTrue(result.isSuccess, "service call should succeed") - - log.debug("service test completed") - } -} -``` - -### 4. Disable Auto Configuration - -To disable auto configuration in specific tests: - -```kotlin -@SpringBootTest -@TestPropertySource(properties = ["compose.testtoolkit.enabled=false"]) -class MySpecialTest { - // Test code -} -``` - -## Configuration Properties - -| Property Name | Type | Default | Description | -|-----------------------------------------------------------|---------------------|--------|--------------------------------------------| -| `compose.testtoolkit.enabled` | Boolean | true | Whether to enable test toolkit | -| `compose.testtoolkit.disable-condition-evaluation-report` | Boolean | true | Whether to disable condition evaluation report | -| `compose.testtoolkit.enable-virtual-threads` | Boolean | true | Whether to enable virtual threads | -| `compose.testtoolkit.ansi-output-mode` | AnsiOutputMode | always | ANSI color output mode (never/detect/always) | -| `compose.testtoolkit.additional-properties` | Map | {} | Additional test properties | - -## Provided Beans - -- **TestConfigurationBean**: Main configuration bean -- **TestEnvironmentPostProcessor**: Test environment post-processor - -## Utility Functions - -### Logging Functions - -```kotlin -// Get logger instance -val log = this.log - -// Print variable values directly -log.info(::variableName) -``` - -### Type Aliases - -```kotlin -typealias SysLogger = org.slf4j.Logger -typealias RDBRollback = Rollback -typealias TempDirMapping = TempDir -``` - -## Best Practices - -1. **Test Method Naming**: Use Chinese naming for test methods to describe test scenarios -2. **Logging**: Log at the beginning and end of test methods for debugging -3. **Property Configuration**: Place test-related configurations in `application-test.yml` -4. **Environment Isolation**: Use profiles to distinguish different test environments - -## Notes - -- Auto configuration only takes effect in test environments -- Color output requires terminal ANSI color support -- Disabling condition evaluation report may affect debugging, enable as needed \ No newline at end of file diff --git a/testtoolkit/testtoolkit-shared/build.gradle.kts b/testtoolkit/testtoolkit-shared/build.gradle.kts index 2a8514025..6b84b39e0 100644 --- a/testtoolkit/testtoolkit-shared/build.gradle.kts +++ b/testtoolkit/testtoolkit-shared/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("buildlogic.kotlinspring-conventions") + id("buildlogic.kotlin-spring-boot-conventions") id("buildlogic.spotless-conventions") } diff --git a/testtoolkit/testtoolkit-shared/src/main/kotlin/io/github/truenine/composeserver/testtoolkit/KotlinTestExtensions.kt b/testtoolkit/testtoolkit-shared/src/main/kotlin/io/github/truenine/composeserver/testtoolkit/KotlinTestExtensions.kt index 540f4c193..09ceceec8 100644 --- a/testtoolkit/testtoolkit-shared/src/main/kotlin/io/github/truenine/composeserver/testtoolkit/KotlinTestExtensions.kt +++ b/testtoolkit/testtoolkit-shared/src/main/kotlin/io/github/truenine/composeserver/testtoolkit/KotlinTestExtensions.kt @@ -1,8 +1,6 @@ package io.github.truenine.composeserver.testtoolkit -import kotlin.test.assertEquals -import kotlin.test.assertNotEquals -import kotlin.test.assertTrue +import kotlin.test.* fun assertNotEmpty(message: String? = "collection is empty", actual: () -> List) { assertNotEquals(0, actual().size, message) diff --git a/testtoolkit/testtoolkit-shared/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/AliasTest.kt b/testtoolkit/testtoolkit-shared/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/AliasTest.kt index 1bb87d28a..c4fc965e6 100644 --- a/testtoolkit/testtoolkit-shared/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/AliasTest.kt +++ b/testtoolkit/testtoolkit-shared/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/AliasTest.kt @@ -1,10 +1,7 @@ package io.github.truenine.composeserver.testtoolkit import java.nio.file.Path -import kotlin.test.Test -import kotlin.test.assertEquals -import kotlin.test.assertNotNull -import kotlin.test.assertTrue +import kotlin.test.* import org.junit.jupiter.api.io.TempDir import org.slf4j.LoggerFactory import org.springframework.test.annotation.Rollback diff --git a/testtoolkit/testtoolkit-shared/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/LoggerExtensionsTest.kt b/testtoolkit/testtoolkit-shared/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/LoggerExtensionsTest.kt index be38e3e09..f023c0d89 100644 --- a/testtoolkit/testtoolkit-shared/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/LoggerExtensionsTest.kt +++ b/testtoolkit/testtoolkit-shared/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/LoggerExtensionsTest.kt @@ -1,8 +1,6 @@ package io.github.truenine.composeserver.testtoolkit -import kotlin.test.Test -import kotlin.test.assertEquals -import kotlin.test.assertNotNull +import kotlin.test.* import org.slf4j.LoggerFactory /** diff --git a/testtoolkit/testtoolkit-shared/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/SpringMvcExtensionsTest.kt b/testtoolkit/testtoolkit-shared/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/SpringMvcExtensionsTest.kt index 42b4a4100..8c3a3b6ca 100644 --- a/testtoolkit/testtoolkit-shared/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/SpringMvcExtensionsTest.kt +++ b/testtoolkit/testtoolkit-shared/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/SpringMvcExtensionsTest.kt @@ -1,8 +1,6 @@ package io.github.truenine.composeserver.testtoolkit -import kotlin.test.Test -import kotlin.test.assertContentEquals -import kotlin.test.assertEquals +import kotlin.test.* import org.springframework.mock.web.MockMultipartFile /** diff --git a/testtoolkit/testtoolkit-shared/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/utils/TestRetryUtilsTest.kt b/testtoolkit/testtoolkit-shared/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/utils/TestRetryUtilsTest.kt index b6e59036b..2e8c046ac 100644 --- a/testtoolkit/testtoolkit-shared/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/utils/TestRetryUtilsTest.kt +++ b/testtoolkit/testtoolkit-shared/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/utils/TestRetryUtilsTest.kt @@ -2,10 +2,7 @@ package io.github.truenine.composeserver.testtoolkit.utils import java.time.Duration import java.util.concurrent.atomic.AtomicInteger -import kotlin.test.Test -import kotlin.test.assertEquals -import kotlin.test.assertFailsWith -import kotlin.test.assertTrue +import kotlin.test.* /** * TestRetryUtils test suite. diff --git a/testtoolkit/testtoolkit-springmvc/build.gradle.kts b/testtoolkit/testtoolkit-springmvc/build.gradle.kts index 570256976..79cc28f43 100644 --- a/testtoolkit/testtoolkit-springmvc/build.gradle.kts +++ b/testtoolkit/testtoolkit-springmvc/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("buildlogic.kotlinspring-conventions") + id("buildlogic.kotlin-spring-boot-conventions") id("buildlogic.spotless-conventions") } diff --git a/testtoolkit/testtoolkit-testcontainers/build.gradle.kts b/testtoolkit/testtoolkit-testcontainers/build.gradle.kts index 1c4a6e5a1..b512ee8a2 100644 --- a/testtoolkit/testtoolkit-testcontainers/build.gradle.kts +++ b/testtoolkit/testtoolkit-testcontainers/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("buildlogic.kotlinspring-conventions") + id("buildlogic.kotlin-spring-boot-conventions") id("buildlogic.spotless-conventions") } diff --git a/testtoolkit/testtoolkit-testcontainers/src/main/kotlin/io/github/truenine/composeserver/testtoolkit/testcontainers/ITestContainerBase.kt b/testtoolkit/testtoolkit-testcontainers/src/main/kotlin/io/github/truenine/composeserver/testtoolkit/testcontainers/ITestContainerBase.kt index b3fef8cd4..197c8711c 100644 --- a/testtoolkit/testtoolkit-testcontainers/src/main/kotlin/io/github/truenine/composeserver/testtoolkit/testcontainers/ITestContainerBase.kt +++ b/testtoolkit/testtoolkit-testcontainers/src/main/kotlin/io/github/truenine/composeserver/testtoolkit/testcontainers/ITestContainerBase.kt @@ -1,8 +1,6 @@ package io.github.truenine.composeserver.testtoolkit.testcontainers -import org.testcontainers.containers.GenericContainer -import org.testcontainers.containers.MySQLContainer -import org.testcontainers.containers.PostgreSQLContainer +import org.testcontainers.containers.* /** * Base interface for test containers. diff --git a/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/TestcontainersVerificationTest.kt b/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/TestcontainersVerificationTest.kt index 855c34770..a6c46d616 100644 --- a/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/TestcontainersVerificationTest.kt +++ b/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/TestcontainersVerificationTest.kt @@ -1,26 +1,17 @@ package io.github.truenine.composeserver.testtoolkit -import io.github.truenine.composeserver.testtoolkit.utils.TestRetryUtils -import io.github.truenine.composeserver.testtoolkit.utils.execAndCheckOutput -import io.github.truenine.composeserver.testtoolkit.utils.fileExists -import io.github.truenine.composeserver.testtoolkit.utils.readFile -import io.github.truenine.composeserver.testtoolkit.utils.startAndWaitForReady -import io.github.truenine.composeserver.testtoolkit.utils.waitForFile +import io.github.truenine.composeserver.testtoolkit.utils.* import java.time.Duration import java.time.LocalDateTime import java.time.format.DateTimeFormatter import kotlin.io.path.createTempFile import kotlin.test.assertEquals import kotlin.test.assertTrue -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.async -import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.* import kotlinx.coroutines.selects.select import org.junit.jupiter.api.Test import org.junit.jupiter.api.assertTimeout -import org.testcontainers.containers.GenericContainer -import org.testcontainers.containers.MySQLContainer -import org.testcontainers.containers.PostgreSQLContainer +import org.testcontainers.containers.* import org.testcontainers.containers.output.Slf4jLogConsumer import org.testcontainers.utility.MountableFile diff --git a/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/autoconfig/TestConfigurationBeanTest.kt b/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/autoconfig/TestConfigurationBeanTest.kt index 345625ce7..73b700c00 100644 --- a/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/autoconfig/TestConfigurationBeanTest.kt +++ b/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/autoconfig/TestConfigurationBeanTest.kt @@ -1,20 +1,11 @@ package io.github.truenine.composeserver.testtoolkit.autoconfig -import io.github.truenine.composeserver.testtoolkit.properties.AnsiOutputMode -import io.github.truenine.composeserver.testtoolkit.properties.TestConfigurationProperties -import io.github.truenine.composeserver.testtoolkit.properties.TestcontainersProperties -import io.mockk.every -import io.mockk.mockk -import io.mockk.verify -import kotlin.test.assertEquals -import kotlin.test.assertFalse -import kotlin.test.assertNotNull -import kotlin.test.assertTrue +import io.github.truenine.composeserver.testtoolkit.properties.* +import io.mockk.* +import kotlin.test.* import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test -import org.springframework.core.env.ConfigurableEnvironment -import org.springframework.core.env.MapPropertySource -import org.springframework.core.env.MutablePropertySources +import org.springframework.core.env.* class TestConfigurationBeanTest { diff --git a/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/autoconfig/TestEnvironmentApplicationListenerTest.kt b/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/autoconfig/TestEnvironmentApplicationListenerTest.kt index e6a90ba30..a62781619 100644 --- a/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/autoconfig/TestEnvironmentApplicationListenerTest.kt +++ b/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/autoconfig/TestEnvironmentApplicationListenerTest.kt @@ -1,9 +1,7 @@ package io.github.truenine.composeserver.testtoolkit.autoconfig import io.github.truenine.composeserver.testtoolkit.log -import io.mockk.every -import io.mockk.mockk -import io.mockk.verify +import io.mockk.* import kotlin.test.assertEquals import kotlin.test.assertNotNull import kotlin.test.assertTrue @@ -11,9 +9,7 @@ import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Nested import org.junit.jupiter.api.Test import org.springframework.boot.context.event.ApplicationEnvironmentPreparedEvent -import org.springframework.core.env.ConfigurableEnvironment -import org.springframework.core.env.MapPropertySource -import org.springframework.core.env.MutablePropertySources +import org.springframework.core.env.* class TestEnvironmentApplicationListenerTest { diff --git a/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/autoconfig/TestcontainersPropertiesTest.kt b/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/autoconfig/TestcontainersPropertiesTest.kt index 424ebb952..ac193dc47 100644 --- a/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/autoconfig/TestcontainersPropertiesTest.kt +++ b/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/autoconfig/TestcontainersPropertiesTest.kt @@ -1,10 +1,6 @@ package io.github.truenine.composeserver.testtoolkit.autoconfig -import io.github.truenine.composeserver.testtoolkit.properties.MinioConfig -import io.github.truenine.composeserver.testtoolkit.properties.MysqlConfig -import io.github.truenine.composeserver.testtoolkit.properties.PostgresConfig -import io.github.truenine.composeserver.testtoolkit.properties.RedisConfig -import io.github.truenine.composeserver.testtoolkit.properties.TestcontainersProperties +import io.github.truenine.composeserver.testtoolkit.properties.* import kotlin.test.assertEquals import org.junit.jupiter.api.Test diff --git a/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/testcontainers/ContainersIntegrationTest.kt b/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/testcontainers/ContainersIntegrationTest.kt index fc861dc9f..6f31e3105 100644 --- a/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/testcontainers/ContainersIntegrationTest.kt +++ b/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/testcontainers/ContainersIntegrationTest.kt @@ -1,13 +1,9 @@ package io.github.truenine.composeserver.testtoolkit.testcontainers import io.github.truenine.composeserver.testtoolkit.log -import io.minio.BucketExistsArgs -import io.minio.MakeBucketArgs -import io.minio.MinioClient +import io.minio.* import jakarta.annotation.Resource -import kotlin.test.assertEquals -import kotlin.test.assertNotNull -import kotlin.test.assertTrue +import kotlin.test.* import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.springframework.boot.test.context.SpringBootTest diff --git a/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/testcontainers/ExtensionFunctionsTest.kt b/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/testcontainers/ExtensionFunctionsTest.kt index c79158725..f9640f09b 100644 --- a/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/testcontainers/ExtensionFunctionsTest.kt +++ b/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/testcontainers/ExtensionFunctionsTest.kt @@ -1,9 +1,7 @@ package io.github.truenine.composeserver.testtoolkit.testcontainers import jakarta.annotation.Resource -import kotlin.test.assertEquals -import kotlin.test.assertNotNull -import kotlin.test.assertTrue +import kotlin.test.* import org.junit.jupiter.api.Nested import org.junit.jupiter.api.Test import org.springframework.boot.test.context.SpringBootTest diff --git a/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/testcontainers/ICacheRedisContainerTest.kt b/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/testcontainers/ICacheRedisContainerTest.kt index 3b35acce8..e44cde288 100644 --- a/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/testcontainers/ICacheRedisContainerTest.kt +++ b/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/testcontainers/ICacheRedisContainerTest.kt @@ -2,10 +2,7 @@ package io.github.truenine.composeserver.testtoolkit.testcontainers import jakarta.annotation.Resource import java.time.Duration -import kotlin.test.assertEquals -import kotlin.test.assertFalse -import kotlin.test.assertNotNull -import kotlin.test.assertTrue +import kotlin.test.* import org.junit.jupiter.api.Test import org.springframework.boot.autoconfigure.EnableAutoConfiguration import org.springframework.boot.test.context.SpringBootTest diff --git a/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/testcontainers/IDatabaseMysqlContainerTest.kt b/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/testcontainers/IDatabaseMysqlContainerTest.kt index 098b2e27a..1f952bf8c 100644 --- a/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/testcontainers/IDatabaseMysqlContainerTest.kt +++ b/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/testcontainers/IDatabaseMysqlContainerTest.kt @@ -3,10 +3,7 @@ package io.github.truenine.composeserver.testtoolkit.testcontainers import jakarta.annotation.Resource import java.sql.DriverManager import java.sql.SQLException -import kotlin.test.assertEquals -import kotlin.test.assertFailsWith -import kotlin.test.assertNotNull -import kotlin.test.assertTrue +import kotlin.test.* import org.junit.jupiter.api.Test import org.springframework.boot.test.context.SpringBootTest import org.springframework.core.env.Environment diff --git a/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/testcontainers/IDatabasePostgresqlContainerTest.kt b/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/testcontainers/IDatabasePostgresqlContainerTest.kt index d6291e89e..f9e758704 100644 --- a/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/testcontainers/IDatabasePostgresqlContainerTest.kt +++ b/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/testcontainers/IDatabasePostgresqlContainerTest.kt @@ -3,10 +3,7 @@ package io.github.truenine.composeserver.testtoolkit.testcontainers import jakarta.annotation.Resource import java.sql.DriverManager import java.sql.SQLException -import kotlin.test.assertEquals -import kotlin.test.assertFailsWith -import kotlin.test.assertNotNull -import kotlin.test.assertTrue +import kotlin.test.* import org.junit.jupiter.api.Test import org.springframework.boot.test.context.SpringBootTest import org.springframework.core.env.Environment diff --git a/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/testcontainers/IOssMinioContainerTest.kt b/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/testcontainers/IOssMinioContainerTest.kt index b69e94be2..b753248ac 100644 --- a/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/testcontainers/IOssMinioContainerTest.kt +++ b/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/testcontainers/IOssMinioContainerTest.kt @@ -5,10 +5,7 @@ import jakarta.annotation.Resource import java.net.InetSocketAddress import java.net.Socket import java.util.function.Supplier -import kotlin.test.assertEquals -import kotlin.test.assertNotEquals -import kotlin.test.assertNotNull -import kotlin.test.assertTrue +import kotlin.test.* import org.junit.jupiter.api.Nested import org.junit.jupiter.api.Test import org.junit.jupiter.params.ParameterizedTest diff --git a/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/testcontainers/TestcontainersConfigurationHolderTest.kt b/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/testcontainers/TestcontainersConfigurationHolderTest.kt index cc07dce8b..2900494a6 100644 --- a/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/testcontainers/TestcontainersConfigurationHolderTest.kt +++ b/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/testcontainers/TestcontainersConfigurationHolderTest.kt @@ -3,9 +3,7 @@ package io.github.truenine.composeserver.testtoolkit.testcontainers import io.github.truenine.composeserver.testtoolkit.properties.TestcontainersProperties import io.mockk.every import io.mockk.mockk -import kotlin.test.assertEquals -import kotlin.test.assertNotNull -import kotlin.test.assertTrue +import kotlin.test.* import org.junit.jupiter.api.Nested import org.junit.jupiter.api.Test import org.springframework.context.ApplicationContext diff --git a/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/utils/ContainerCommandExecutorTest.kt b/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/utils/ContainerCommandExecutorTest.kt index 0775bd16c..34f1570d1 100644 --- a/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/utils/ContainerCommandExecutorTest.kt +++ b/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/utils/ContainerCommandExecutorTest.kt @@ -2,12 +2,7 @@ package io.github.truenine.composeserver.testtoolkit.utils import io.github.truenine.composeserver.testtoolkit.log import java.time.Duration -import kotlin.test.Test -import kotlin.test.assertEquals -import kotlin.test.assertFailsWith -import kotlin.test.assertFalse -import kotlin.test.assertNotNull -import kotlin.test.assertTrue +import kotlin.test.* import org.testcontainers.containers.GenericContainer import org.testcontainers.utility.DockerImageName diff --git a/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/utils/ContainerExtensionsTest.kt b/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/utils/ContainerExtensionsTest.kt index d3013f853..f0640fd71 100644 --- a/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/utils/ContainerExtensionsTest.kt +++ b/testtoolkit/testtoolkit-testcontainers/src/test/kotlin/io/github/truenine/composeserver/testtoolkit/utils/ContainerExtensionsTest.kt @@ -2,10 +2,7 @@ package io.github.truenine.composeserver.testtoolkit.utils import io.github.truenine.composeserver.testtoolkit.log import java.time.Duration -import kotlin.test.Test -import kotlin.test.assertEquals -import kotlin.test.assertNotNull -import kotlin.test.assertTrue +import kotlin.test.* import org.testcontainers.containers.GenericContainer import org.testcontainers.utility.DockerImageName diff --git a/version-catalog/build.gradle.kts b/version-catalog/build.gradle.kts index b8e082fbc..94041a789 100644 --- a/version-catalog/build.gradle.kts +++ b/version-catalog/build.gradle.kts @@ -6,7 +6,7 @@ plugins { alias(libs.plugins.com.github.ben.manes.versions) `version-catalog` java - id("buildlogic.publish-conventions") + id("buildlogic.maven-publish-conventions") } repositories {