init: 클린 기반 auth 서버 설계

This commit is contained in:
DongHyeonka
2026-07-24 14:30:18 +09:00
parent 471db0203d
commit 8a1ac1e769
3642 changed files with 275893 additions and 1 deletions
@@ -0,0 +1,417 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
<title>Test results - com.project.auth.infrastructure.persistence.user.UserJpaRepositoryTest</title>
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
<script src="../js/report.js" type="text/javascript"></script>
</head>
<body>
<div id="content">
<div class="breadcrumbs">
<a class="breadcrumb" href="../index.html">all</a> &gt;
<span class="breadcrumb">com.project.auth.infrastructure.persistence.user.UserJpaRepositoryTest</span>
</div>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="successGroup" href="#">Gradle Test Run :infrastructure:test</a>
</li>
</ul>
<div class="tab">
<h2>Gradle Test Run :infrastructure:test</h2>
<h1>UserJpaRepositoryTest</h1>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="" href="#">summary</a>
</li>
<li>
<a class="" href="#">standard output</a>
</li>
</ul>
<div class="tab">
<h2>summary</h2>
<div>
<div class="summary">
<table>
<tr>
<td>
<div class="summaryGroup">
<table>
<tr>
<td>
<div class="infoBox">
<div class="counter">3</div>
<p>tests</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>failures</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>skipped</p>
</div>
</td>
<td>
<div class="infoBox duration">
<div class="counter">11.782s</div>
<p>duration</p>
</div>
</td>
</tr>
</table>
</div>
</td>
<td>
<div class="infoBox success successRate">
<div class="percent">100%</div>
<p>successful</p>
</div>
</td>
</tr>
</table>
</div>
<table class="test-results">
<thead>
<tr>
<th>Child</th>
<th hidden="">Name</th>
<th>Tests</th>
<th>Failures</th>
<th>Skipped</th>
<th>Duration</th>
<th>Success rate</th>
</tr>
</thead>
<tr>
<td class="success">
<a href="savePersistsKeycloakUserAndReloadsFromDatabase().html">savePersistsKeycloakUserAndReloadsFromDatabase()</a>
</td>
<td class="path" hidden="">savePersistsKeycloakUserAndReloadsFromDatabase()</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0.790s</td>
<td class="success">100%</td>
</tr>
<tr>
<td class="success">
<a href="saveRejectsDuplicateEmailOnFlush().html">saveRejectsDuplicateEmailOnFlush()</a>
</td>
<td class="path" hidden="">saveRejectsDuplicateEmailOnFlush()</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0.860s</td>
<td class="success">100%</td>
</tr>
<tr>
<td class="success">
<a href="saveRejectsDuplicateProviderSubjectOnFlush().html">saveRejectsDuplicateProviderSubjectOnFlush()</a>
</td>
<td class="path" hidden="">saveRejectsDuplicateProviderSubjectOnFlush()</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0.024s</td>
<td class="success">100%</td>
</tr>
</table>
</div>
</div>
<div class="tab">
<h2>standard output</h2>
<span class="code">
<pre id="root-0-test-stdout-com.project.auth.infrastructure.persistence.user.UserJpaRepositoryTest">15:25:43.172 [Test worker] INFO org.testcontainers.images.PullPolicy -- Image pull policy will be performed by: DefaultPullPolicy()
15:25:43.185 [Test worker] INFO org.testcontainers.utility.ImageNameSubstitutor -- Image name substitution will be performed by: DefaultImageNameSubstitutor (composite of 'ConfigurationFileImageNameSubstitutor' and 'PrefixingImageNameSubstitutor')
15:25:43.200 [Test worker] INFO org.testcontainers.DockerClientFactory -- Testcontainers version: 2.0.3
15:25:43.659 [Test worker] INFO org.testcontainers.dockerclient.DockerClientProviderStrategy -- Loaded org.testcontainers.dockerclient.UnixSocketClientProviderStrategy from ~/.testcontainers.properties, will try it first
15:25:44.185 [Test worker] INFO org.testcontainers.dockerclient.DockerClientProviderStrategy -- Found Docker environment with local Unix socket (unix:///var/run/docker.sock)
15:25:44.187 [Test worker] INFO org.testcontainers.DockerClientFactory -- Docker host IP address is localhost
15:25:44.207 [Test worker] INFO org.testcontainers.DockerClientFactory -- Connected to docker:
Server Version: 29.4.2
API Version: 1.54
Operating System: Ubuntu 24.04.4 LTS
Total Memory: 31671 MB
15:25:44.323 [Test worker] INFO tc.testcontainers/ryuk:0.13.0 -- Creating container for image: testcontainers/ryuk:0.13.0
15:25:44.556 [Test worker] INFO tc.testcontainers/ryuk:0.13.0 -- Container testcontainers/ryuk:0.13.0 is starting: f4a1b80c92efedded8f8490bc8b2b72c966aa72e47173b9e3549678e6e93b264
15:25:44.907 [Test worker] INFO tc.testcontainers/ryuk:0.13.0 -- Container testcontainers/ryuk:0.13.0 started in PT0.584400461S
15:25:44.913 [Test worker] INFO org.testcontainers.utility.RyukResourceReaper -- Ryuk started - will monitor and terminate Testcontainers containers on JVM exit
15:25:44.913 [Test worker] INFO org.testcontainers.DockerClientFactory -- Checking the system...
15:25:44.913 [Test worker] INFO org.testcontainers.DockerClientFactory -- ✔︎ Docker server version should be at least 1.6.0
15:25:44.914 [Test worker] INFO tc.postgres:16-alpine -- Creating container for image: postgres:16-alpine
15:25:45.044 [Test worker] INFO tc.postgres:16-alpine -- Container postgres:16-alpine is starting: d80d78ac464fe96638d0a2d9c5c80ecee028627924cb361626ead41bae272c25
15:25:46.585 [Test worker] INFO tc.postgres:16-alpine -- Container postgres:16-alpine started in PT1.671196137S
15:25:46.586 [Test worker] INFO tc.postgres:16-alpine -- Container is started (JDBC URL: jdbc:postgresql://localhost:32777/test?loggerLevel=OFF)
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v4.0.3)
2026-05-12T15:25:47.051+09:00 INFO 3159134 --- [ Test worker] c.p.a.i.p.user.UserJpaRepositoryTest : Starting UserJpaRepositoryTest using Java 21.0.10 with PID 3159134 (started by donghyeon in /home/donghyeon/dev/Project-Auth-Server/infrastructure)
2026-05-12T15:25:47.052+09:00 INFO 3159134 --- [ Test worker] c.p.a.i.p.user.UserJpaRepositoryTest : No active profile set, falling back to 1 default profile: &quot;default&quot;
2026-05-12T15:25:47.053+09:00 DEBUG 3159134 --- [ Test worker] o.s.boot.SpringApplication : Loading source class com.project.auth.infrastructure.persistence.user.UserJpaRepositoryTest$TestApplication,class com.project.auth.infrastructure.persistence.user.UserJpaRepositoryTest$TestFlywayConfiguration
2026-05-12T15:25:47.335+09:00 INFO 3159134 --- [ Test worker] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2026-05-12T15:25:47.386+09:00 INFO 3159134 --- [ Test worker] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 39 ms. Found 1 JPA repository interface.
2026-05-12T15:25:48.253+09:00 INFO 3159134 --- [ Test worker] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2026-05-12T15:25:48.506+09:00 INFO 3159134 --- [ Test worker] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@55f20d7e
2026-05-12T15:25:48.509+09:00 INFO 3159134 --- [ Test worker] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2026-05-12T15:25:48.572+09:00 INFO 3159134 --- [ Test worker] org.flywaydb.core.FlywayExecutor : Database: jdbc:postgresql://localhost:32777/test?loggerLevel=OFF (PostgreSQL 16.13)
2026-05-12T15:25:48.638+09:00 INFO 3159134 --- [ Test worker] o.f.core.internal.database.base.Schema : Creating schema &quot;auth&quot; ...
2026-05-12T15:25:48.651+09:00 INFO 3159134 --- [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table &quot;auth&quot;.&quot;flyway_schema_history&quot; ...
2026-05-12T15:25:48.743+09:00 INFO 3159134 --- [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema &quot;auth&quot;: null
2026-05-12T15:25:48.762+09:00 INFO 3159134 --- [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema &quot;auth&quot; to version &quot;1 - create users table&quot;
2026-05-12T15:25:48.775+09:00 WARN 3159134 --- [ Test worker] o.f.c.i.s.DefaultSqlScriptExecutor : DB: schema &quot;auth&quot; already exists, skipping (SQL State: 42P06 - Error Code: 0)
2026-05-12T15:25:48.817+09:00 INFO 3159134 --- [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema &quot;auth&quot; to version &quot;2 - add oauth login columns&quot;
2026-05-12T15:25:48.839+09:00 INFO 3159134 --- [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema &quot;auth&quot; to version &quot;3 - add user provider field constraints&quot;
2026-05-12T15:25:48.855+09:00 INFO 3159134 --- [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema &quot;auth&quot; to version &quot;4 - add keycloak provider&quot;
2026-05-12T15:25:48.877+09:00 INFO 3159134 --- [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema &quot;auth&quot; to version &quot;5 - keycloak only provider&quot;
2026-05-12T15:25:48.902+09:00 INFO 3159134 --- [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 5 migrations to schema &quot;auth&quot;, now at version v5 (execution time 00:00.075s)
2026-05-12T15:25:49.151+09:00 INFO 3159134 --- [ Test worker] org.hibernate.orm.jpa : HHH008540: Processing PersistenceUnitInfo [name: default]
2026-05-12T15:25:49.255+09:00 INFO 3159134 --- [ Test worker] org.hibernate.orm.core : HHH000001: Hibernate ORM core version 7.2.4.Final
2026-05-12T15:25:50.061+09:00 INFO 3159134 --- [ Test worker] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer
2026-05-12T15:25:50.233+09:00 INFO 3159134 --- [ Test worker] org.hibernate.orm.connections.pooling : HHH10001005: Database info:
Database JDBC URL [jdbc:postgresql://localhost:32777/test?loggerLevel=OFF]
Database driver: PostgreSQL JDBC Driver
Database dialect: PostgreSQLDialect
Database version: 16.13
Default catalog/schema: test/public
Autocommit mode: undefined/unknown
Isolation level: READ_COMMITTED [default READ_COMMITTED]
JDBC fetch size: none
Pool: DataSourceConnectionProvider
Minimum pool size: undefined/unknown
Maximum pool size: undefined/unknown
2026-05-12T15:25:51.846+09:00 INFO 3159134 --- [ Test worker] org.hibernate.orm.core : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)
2026-05-12T15:25:51.912+09:00 INFO 3159134 --- [ Test worker] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2026-05-12T15:25:52.038+09:00 INFO 3159134 --- [ Test worker] o.s.d.j.r.query.QueryEnhancerFactories : Hibernate is in classpath; If applicable, HQL parser will be used.
2026-05-12T15:25:52.393+09:00 DEBUG 3159134 --- [ Test worker] .s.b.a.l.ConditionEvaluationReportLogger :
============================
CONDITIONS EVALUATION REPORT
============================
Positive matches:
-----------------
DataSourceAutoConfiguration matched:
- @ConditionalOnClass found required classes 'javax.sql.DataSource', 'org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType' (OnClassCondition)
- @ConditionalOnMissingBean (types: io.r2dbc.spi.ConnectionFactory; SearchStrategy: all) did not find any beans (OnBeanCondition)
DataSourceAutoConfiguration.PooledDataSourceConfiguration matched:
- AnyNestedCondition 1 matched 1 did not; NestedCondition on DataSourceAutoConfiguration.PooledDataSourceCondition.PooledDataSourceAvailable PooledDataSource found supported DataSource; NestedCondition on DataSourceAutoConfiguration.PooledDataSourceCondition.ExplicitType @ConditionalOnProperty (spring.datasource.type) did not find property 'spring.datasource.type' (DataSourceAutoConfiguration.PooledDataSourceCondition)
- @ConditionalOnMissingBean (types: javax.sql.DataSource,javax.sql.XADataSource; SearchStrategy: all) did not find any beans (OnBeanCondition)
DataSourceAutoConfiguration.PooledDataSourceConfiguration#jdbcConnectionDetails matched:
- @ConditionalOnMissingBean (types: org.springframework.boot.jdbc.autoconfigure.JdbcConnectionDetails; SearchStrategy: all) did not find any beans (OnBeanCondition)
DataSourceConfiguration.Hikari matched:
- @ConditionalOnClass found required class 'com.zaxxer.hikari.HikariDataSource' (OnClassCondition)
- @ConditionalOnProperty (spring.datasource.type=com.zaxxer.hikari.HikariDataSource) matched (OnPropertyCondition)
- @ConditionalOnMissingBean (types: javax.sql.DataSource; SearchStrategy: all) did not find any beans (OnBeanCondition)
DataSourceInitializationAutoConfiguration matched:
- @ConditionalOnClass found required class 'org.springframework.jdbc.datasource.init.DatabasePopulator' (OnClassCondition)
- SQL InitializationDatabase Initialization default value is EMBEDDED (OnSqlInitializationCondition)
- @ConditionalOnSingleCandidate (types: javax.sql.DataSource; SearchStrategy: all) found a single bean 'dataSource'; @ConditionalOnMissingBean (types: org.springframework.boot.sql.autoconfigure.init.ApplicationScriptDatabaseInitializer; SearchStrategy: all) did not find any beans (OnBeanCondition)
DataSourcePoolMetadataProvidersConfiguration.HikariPoolDataSourceMetadataProviderConfiguration matched:
- @ConditionalOnClass found required class 'com.zaxxer.hikari.HikariDataSource' (OnClassCondition)
DataSourceTransactionManagerAutoConfiguration matched:
- @ConditionalOnClass found required classes 'javax.sql.DataSource', 'org.springframework.jdbc.core.JdbcTemplate', 'org.springframework.transaction.TransactionManager' (OnClassCondition)
DataSourceTransactionManagerAutoConfiguration.JdbcTransactionManagerConfiguration matched:
- @ConditionalOnSingleCandidate (types: javax.sql.DataSource; SearchStrategy: all) found a single bean 'dataSource' (OnBeanCondition)
HibernateJpaAutoConfiguration matched:
- @ConditionalOnClass found required classes 'org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean', 'jakarta.persistence.EntityManager', 'org.hibernate.engine.spi.SessionImplementor' (OnClassCondition)
HibernateJpaConfiguration matched:
- @ConditionalOnSingleCandidate (types: javax.sql.DataSource; SearchStrategy: all) found a single bean 'dataSource' (OnBeanCondition)
JdbcClientAutoConfiguration matched:
- @ConditionalOnSingleCandidate (types: org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; SearchStrategy: all) found a single bean 'namedParameterJdbcTemplate'; @ConditionalOnMissingBean (types: org.springframework.jdbc.core.simple.JdbcClient; SearchStrategy: all) did not find any beans (OnBeanCondition)
JdbcTemplateAutoConfiguration matched:
- @ConditionalOnClass found required classes 'javax.sql.DataSource', 'org.springframework.jdbc.core.JdbcTemplate' (OnClassCondition)
- @ConditionalOnSingleCandidate (types: javax.sql.DataSource; SearchStrategy: all) found a single bean 'dataSource' (OnBeanCondition)
JdbcTemplateConfiguration matched:
- @ConditionalOnMissingBean (types: org.springframework.jdbc.core.JdbcOperations; SearchStrategy: all) did not find any beans (OnBeanCondition)
JpaBaseConfiguration#entityManagerFactory matched:
- @ConditionalOnMissingBean (types: org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean,jakarta.persistence.EntityManagerFactory; SearchStrategy: all) did not find any beans (OnBeanCondition)
JpaBaseConfiguration#entityManagerFactoryBuilder matched:
- @ConditionalOnMissingBean (types: org.springframework.boot.jpa.EntityManagerFactoryBuilder; SearchStrategy: all) did not find any beans (OnBeanCondition)
JpaBaseConfiguration#jpaVendorAdapter matched:
- @ConditionalOnMissingBean (types: org.springframework.orm.jpa.JpaVendorAdapter; SearchStrategy: all) did not find any beans (OnBeanCondition)
JpaBaseConfiguration#transactionManager matched:
- @ConditionalOnMissingBean (types: org.springframework.transaction.TransactionManager; SearchStrategy: all) did not find any beans (OnBeanCondition)
JpaBaseConfiguration.PersistenceManagedTypesConfiguration matched:
- @ConditionalOnMissingBean (types: org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean,jakarta.persistence.EntityManagerFactory; SearchStrategy: all) did not find any beans (OnBeanCondition)
JpaBaseConfiguration.PersistenceManagedTypesConfiguration#persistenceManagedTypes matched:
- @ConditionalOnMissingBean (types: org.springframework.orm.jpa.persistenceunit.PersistenceManagedTypes; SearchStrategy: all) did not find any beans (OnBeanCondition)
NamedParameterJdbcTemplateConfiguration matched:
- @ConditionalOnSingleCandidate (types: org.springframework.jdbc.core.JdbcTemplate; SearchStrategy: all) found a single bean 'jdbcTemplate'; @ConditionalOnMissingBean (types: org.springframework.jdbc.core.namedparam.NamedParameterJdbcOperations; SearchStrategy: all) did not find any beans (OnBeanCondition)
TestEntityManagerAutoConfiguration matched:
- @ConditionalOnClass found required class 'jakarta.persistence.EntityManagerFactory' (OnClassCondition)
TestEntityManagerAutoConfiguration#testEntityManager matched:
- @ConditionalOnMissingBean (types: org.springframework.boot.jpa.test.autoconfigure.TestEntityManager; SearchStrategy: all) did not find any beans (OnBeanCondition)
TransactionAutoConfiguration matched:
- @ConditionalOnClass found required class 'org.springframework.transaction.PlatformTransactionManager' (OnClassCondition)
TransactionAutoConfiguration.EnableTransactionManagementConfiguration matched:
- @ConditionalOnBean (types: org.springframework.transaction.TransactionManager; SearchStrategy: all) found bean 'transactionManager'; @ConditionalOnMissingBean (types: org.springframework.transaction.annotation.AbstractTransactionManagementConfiguration; SearchStrategy: all) did not find any beans (OnBeanCondition)
TransactionAutoConfiguration.EnableTransactionManagementConfiguration.CglibAutoProxyConfiguration matched:
- @ConditionalOnBooleanProperty (spring.aop.proxy-target-class=true) matched (OnPropertyCondition)
TransactionAutoConfiguration.TransactionTemplateConfiguration matched:
- @ConditionalOnSingleCandidate (types: org.springframework.transaction.PlatformTransactionManager; SearchStrategy: all) found a single bean 'transactionManager' (OnBeanCondition)
TransactionAutoConfiguration.TransactionTemplateConfiguration#transactionTemplate matched:
- @ConditionalOnMissingBean (types: org.springframework.transaction.support.TransactionOperations; SearchStrategy: all) did not find any beans (OnBeanCondition)
Negative matches:
-----------------
DataJpaRepositoriesAutoConfiguration:
Did not match:
- @ConditionalOnMissingBean (types: org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean,org.springframework.data.jpa.repository.config.JpaRepositoryConfigExtension; SearchStrategy: all) found beans of type 'org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean' &amp;userJpaRepository and found beans of type 'org.springframework.data.jpa.repository.config.JpaRepositoryConfigExtension' org.springframework.data.jpa.repository.config.JpaRepositoryConfigExtension#0 (OnBeanCondition)
Matched:
- @ConditionalOnClass found required class 'org.springframework.data.jpa.repository.JpaRepository' (OnClassCondition)
- @ConditionalOnBooleanProperty (spring.data.jpa.repositories.enabled=true) matched (OnPropertyCondition)
DataSourceAutoConfiguration.EmbeddedDatabaseConfiguration:
Did not match:
- EmbeddedDataSource spring.datasource.url is set (DataSourceAutoConfiguration.EmbeddedDatabaseCondition)
DataSourceCheckpointRestoreConfiguration:
Did not match:
- @ConditionalOnClass did not find required class 'org.crac.Resource' (OnClassCondition)
DataSourceConfiguration.Dbcp2:
Did not match:
- @ConditionalOnClass did not find required class 'org.apache.commons.dbcp2.BasicDataSource' (OnClassCondition)
DataSourceConfiguration.Generic:
Did not match:
- @ConditionalOnProperty (spring.datasource.type) did not find property 'spring.datasource.type' (OnPropertyCondition)
DataSourceConfiguration.OracleUcp:
Did not match:
- @ConditionalOnClass did not find required classes 'oracle.ucp.jdbc.PoolDataSourceImpl', 'oracle.jdbc.OracleConnection' (OnClassCondition)
DataSourceConfiguration.Tomcat:
Did not match:
- @ConditionalOnClass did not find required class 'org.apache.tomcat.jdbc.pool.DataSource' (OnClassCondition)
DataSourceJmxConfiguration:
Did not match:
- @ConditionalOnBooleanProperty (spring.jmx.enabled=true) found different value in property 'spring.jmx.enabled' (OnPropertyCondition)
DataSourcePoolMetadataProvidersConfiguration.CommonsDbcp2PoolDataSourceMetadataProviderConfiguration:
Did not match:
- @ConditionalOnClass did not find required class 'org.apache.commons.dbcp2.BasicDataSource' (OnClassCondition)
DataSourcePoolMetadataProvidersConfiguration.OracleUcpPoolDataSourceMetadataProviderConfiguration:
Did not match:
- @ConditionalOnClass did not find required classes 'oracle.ucp.jdbc.PoolDataSource', 'oracle.jdbc.OracleConnection' (OnClassCondition)
DataSourcePoolMetadataProvidersConfiguration.TomcatDataSourcePoolMetadataProviderConfiguration:
Did not match:
- @ConditionalOnClass did not find required class 'org.apache.tomcat.jdbc.pool.DataSource' (OnClassCondition)
DataSourceTransactionManagerAutoConfiguration.JdbcTransactionManagerConfiguration#transactionManager:
Did not match:
- @ConditionalOnMissingBean (types: org.springframework.transaction.TransactionManager; SearchStrategy: all) found beans of type 'org.springframework.transaction.TransactionManager' transactionManager (OnBeanCondition)
JpaBaseConfiguration.JpaWebConfiguration:
Did not match:
- @ConditionalOnClass did not find required class 'org.springframework.web.servlet.config.annotation.WebMvcConfigurer' (OnClassCondition)
TestDatabaseAutoConfiguration#dataSource:
Did not match:
- @ConditionalOnProperty (spring.test.database.replace=AUTO_CONFIGURED) found different value in property 'spring.test.database.replace' (OnPropertyCondition)
TestDatabaseAutoConfiguration#embeddedDataSourceBeanFactoryPostProcessor:
Did not match:
- @ConditionalOnProperty (spring.test.database.replace=ANY) found different value in property 'spring.test.database.replace' (OnPropertyCondition)
TestDatabaseAutoConfiguration#nonTestEmbeddedDataSourceBeanFactoryPostProcessor:
Did not match:
- @ConditionalOnProperty (spring.test.database.replace=NON_TEST) found different value in property 'spring.test.database.replace' (OnPropertyCondition)
TransactionAutoConfiguration#transactionalOperator:
Did not match:
- @ConditionalOnSingleCandidate (types: org.springframework.transaction.ReactiveTransactionManager; SearchStrategy: all) did not find any beans (OnBeanCondition)
TransactionAutoConfiguration.AspectJTransactionManagementConfiguration:
Did not match:
- @ConditionalOnBean (types: org.springframework.transaction.aspectj.AbstractTransactionAspect; SearchStrategy: all) did not find any beans of type org.springframework.transaction.aspectj.AbstractTransactionAspect (OnBeanCondition)
TransactionAutoConfiguration.EnableTransactionManagementConfiguration.JdkDynamicAutoProxyConfiguration:
Did not match:
- @ConditionalOnBooleanProperty (spring.aop.proxy-target-class=false) did not find property 'spring.aop.proxy-target-class' (OnPropertyCondition)
Exclusions:
-----------
None
Unconditional classes:
----------------------
org.springframework.boot.jdbc.test.autoconfigure.TestDatabaseAutoConfiguration
2026-05-12T15:25:52.402+09:00 INFO 3159134 --- [ Test worker] c.p.a.i.p.user.UserJpaRepositoryTest : Started UserJpaRepositoryTest in 5.765 seconds (process running for 11.36)
2026-05-12T15:25:54.113+09:00 WARN 3159134 --- [ Test worker] o.j.j.e.d.AbstractExtensionContext : Type implements CloseableResource but not AutoCloseable: org.testcontainers.junit.jupiter.TestcontainersExtension$StoreAdapter
</pre>
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-com.project.auth.infrastructure.persistence.user.UserJpaRepositoryTest">Copy</button>
</span>
</div>
</div>
</div>
</div>
<div id="footer">
<p>
<div>
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
</label>
</div>Generated by
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:25:54PM</p>
</div>
</div>
</body>
</html>
@@ -0,0 +1,112 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
<title>Test results - savePersistsKeycloakUserAndReloadsFromDatabase()</title>
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
<script src="../js/report.js" type="text/javascript"></script>
</head>
<body>
<div id="content">
<div class="breadcrumbs">
<a class="breadcrumb" href="../index.html">all</a> &gt;
<a class="breadcrumb" href="index.html">com.project.auth.infrastructure.persistence.user.UserJpaRepositoryTest</a> &gt;
<span class="breadcrumb">savePersistsKeycloakUserAndReloadsFromDatabase()</span>
</div>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="successGroup" href="#">Gradle Test Run :infrastructure:test</a>
</li>
</ul>
<div class="tab">
<h2>Gradle Test Run :infrastructure:test</h2>
<h1>savePersistsKeycloakUserAndReloadsFromDatabase()</h1>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="" href="#">summary</a>
</li>
<li>
<a class="" href="#">standard output</a>
</li>
</ul>
<div class="tab">
<h2>summary</h2>
<div>
<div class="summary">
<table>
<tr>
<td>
<div class="summaryGroup">
<table>
<tr>
<td>
<div class="infoBox">
<div class="counter">1</div>
<p>tests</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>failures</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>skipped</p>
</div>
</td>
<td>
<div class="infoBox duration">
<div class="counter">0.790s</div>
<p>duration</p>
</div>
</td>
</tr>
</table>
</div>
</td>
<td>
<div class="infoBox success successRate">
<div class="percent">100%</div>
<p>successful</p>
</div>
</td>
</tr>
</table>
</div>
</div>
</div>
<div class="tab">
<h2>standard output</h2>
<span class="code">
<pre id="root-0-test-stdout-savePersistsKeycloakUserAndReloadsFromDatabase()">2026-05-12T15:25:53.321+09:00 DEBUG 3159134 --- [ Test worker] org.hibernate.SQL : select uje1_0.id,uje1_0.created_at,uje1_0.email,uje1_0.name,uje1_0.provider,uje1_0.provider_subject,uje1_0.updated_at from auth.users uje1_0 where uje1_0.id=?
Hibernate: select uje1_0.id,uje1_0.created_at,uje1_0.email,uje1_0.name,uje1_0.provider,uje1_0.provider_subject,uje1_0.updated_at from auth.users uje1_0 where uje1_0.id=?
2026-05-12T15:25:53.323+09:00 DEBUG 3159134 --- [ Test worker] org.hibernate.SQL : insert into auth.users (created_at,email,name,provider,provider_subject,id) values (?,?,?,?,?,?)
Hibernate: insert into auth.users (created_at,email,name,provider,provider_subject,id) values (?,?,?,?,?,?)
2026-05-12T15:25:54.071+09:00 DEBUG 3159134 --- [ Test worker] org.hibernate.SQL : select uje1_0.id,uje1_0.created_at,uje1_0.email,uje1_0.name,uje1_0.provider,uje1_0.provider_subject,uje1_0.updated_at from auth.users uje1_0 where uje1_0.provider=? and uje1_0.provider_subject=?
Hibernate: select uje1_0.id,uje1_0.created_at,uje1_0.email,uje1_0.name,uje1_0.provider,uje1_0.provider_subject,uje1_0.updated_at from auth.users uje1_0 where uje1_0.provider=? and uje1_0.provider_subject=?
</pre>
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-savePersistsKeycloakUserAndReloadsFromDatabase()">Copy</button>
</span>
</div>
</div>
</div>
</div>
<div id="footer">
<p>
<div>
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
</label>
</div>Generated by
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:25:54PM</p>
</div>
</div>
</body>
</html>
@@ -0,0 +1,132 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
<title>Test results - saveRejectsDuplicateEmailOnFlush()</title>
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
<script src="../js/report.js" type="text/javascript"></script>
</head>
<body>
<div id="content">
<div class="breadcrumbs">
<a class="breadcrumb" href="../index.html">all</a> &gt;
<a class="breadcrumb" href="index.html">com.project.auth.infrastructure.persistence.user.UserJpaRepositoryTest</a> &gt;
<span class="breadcrumb">saveRejectsDuplicateEmailOnFlush()</span>
</div>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="successGroup" href="#">Gradle Test Run :infrastructure:test</a>
</li>
</ul>
<div class="tab">
<h2>Gradle Test Run :infrastructure:test</h2>
<h1>saveRejectsDuplicateEmailOnFlush()</h1>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="" href="#">summary</a>
</li>
<li>
<a class="" href="#">standard output</a>
</li>
<li>
<a class="" href="#">error output</a>
</li>
</ul>
<div class="tab">
<h2>summary</h2>
<div>
<div class="summary">
<table>
<tr>
<td>
<div class="summaryGroup">
<table>
<tr>
<td>
<div class="infoBox">
<div class="counter">1</div>
<p>tests</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>failures</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>skipped</p>
</div>
</td>
<td>
<div class="infoBox duration">
<div class="counter">0.860s</div>
<p>duration</p>
</div>
</td>
</tr>
</table>
</div>
</td>
<td>
<div class="infoBox success successRate">
<div class="percent">100%</div>
<p>successful</p>
</div>
</td>
</tr>
</table>
</div>
</div>
</div>
<div class="tab">
<h2>standard output</h2>
<span class="code">
<pre id="root-0-test-stdout-saveRejectsDuplicateEmailOnFlush()">2026-05-12T15:25:52.978+09:00 DEBUG 3159134 --- [ Test worker] org.hibernate.SQL : select uje1_0.id,uje1_0.created_at,uje1_0.email,uje1_0.name,uje1_0.provider,uje1_0.provider_subject,uje1_0.updated_at from auth.users uje1_0 where uje1_0.id=?
Hibernate: select uje1_0.id,uje1_0.created_at,uje1_0.email,uje1_0.name,uje1_0.provider,uje1_0.provider_subject,uje1_0.updated_at from auth.users uje1_0 where uje1_0.id=?
2026-05-12T15:25:53.078+09:00 DEBUG 3159134 --- [ Test worker] org.hibernate.SQL : insert into auth.users (created_at,email,name,provider,provider_subject,id) values (?,?,?,?,?,?)
Hibernate: insert into auth.users (created_at,email,name,provider,provider_subject,id) values (?,?,?,?,?,?)
2026-05-12T15:25:53.094+09:00 DEBUG 3159134 --- [ Test worker] org.hibernate.SQL : select uje1_0.id,uje1_0.created_at,uje1_0.email,uje1_0.name,uje1_0.provider,uje1_0.provider_subject,uje1_0.updated_at from auth.users uje1_0 where uje1_0.id=?
Hibernate: select uje1_0.id,uje1_0.created_at,uje1_0.email,uje1_0.name,uje1_0.provider,uje1_0.provider_subject,uje1_0.updated_at from auth.users uje1_0 where uje1_0.id=?
2026-05-12T15:25:53.181+09:00 DEBUG 3159134 --- [ Test worker] org.hibernate.SQL : insert into auth.users (created_at,email,name,provider,provider_subject,id) values (?,?,?,?,?,?)
Hibernate: insert into auth.users (created_at,email,name,provider,provider_subject,id) values (?,?,?,?,?,?)
2026-05-12T15:25:53.192+09:00 WARN 3159134 --- [ Test worker] org.hibernate.orm.jdbc.error : HHH000247: ErrorCode: 0, SQLState: 23505
2026-05-12T15:25:53.192+09:00 WARN 3159134 --- [ Test worker] org.hibernate.orm.jdbc.error : ERROR: duplicate key value violates unique constraint &quot;uq_users__email&quot;
Detail: Key (email)=(duplicate@example.com) already exists.
</pre>
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-saveRejectsDuplicateEmailOnFlush()">Copy</button>
</span>
</div>
<div class="tab">
<h2>error output</h2>
<span class="code">
<pre id="root-0-test-stderr-saveRejectsDuplicateEmailOnFlush()">Mockito is currently self-attaching to enable the inline-mock-maker. This will no longer work in future releases of the JDK. Please add Mockito as an agent to your build as described in Mockito's documentation: https://javadoc.io/doc/org.mockito/mockito-core/latest/org.mockito/org/mockito/Mockito.html#0.3
WARNING: A Java agent has been loaded dynamically (/home/donghyeon/.gradle/caches/modules-2/files-2.1/net.bytebuddy/byte-buddy-agent/1.17.8/f09415827a71be7ed621c7bd02550678f28bc81c/byte-buddy-agent-1.17.8.jar)
WARNING: If a serviceability tool is in use, please run with -XX:+EnableDynamicAgentLoading to hide this warning
WARNING: If a serviceability tool is not in use, please run with -Djdk.instrument.traceUsage for more information
WARNING: Dynamic loading of agents will be disallowed by default in a future release
</pre>
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stderr-saveRejectsDuplicateEmailOnFlush()">Copy</button>
</span>
</div>
</div>
</div>
</div>
<div id="footer">
<p>
<div>
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
</label>
</div>Generated by
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:25:54PM</p>
</div>
</div>
</body>
</html>
@@ -0,0 +1,117 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
<title>Test results - saveRejectsDuplicateProviderSubjectOnFlush()</title>
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
<script src="../js/report.js" type="text/javascript"></script>
</head>
<body>
<div id="content">
<div class="breadcrumbs">
<a class="breadcrumb" href="../index.html">all</a> &gt;
<a class="breadcrumb" href="index.html">com.project.auth.infrastructure.persistence.user.UserJpaRepositoryTest</a> &gt;
<span class="breadcrumb">saveRejectsDuplicateProviderSubjectOnFlush()</span>
</div>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="successGroup" href="#">Gradle Test Run :infrastructure:test</a>
</li>
</ul>
<div class="tab">
<h2>Gradle Test Run :infrastructure:test</h2>
<h1>saveRejectsDuplicateProviderSubjectOnFlush()</h1>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="" href="#">summary</a>
</li>
<li>
<a class="" href="#">standard output</a>
</li>
</ul>
<div class="tab">
<h2>summary</h2>
<div>
<div class="summary">
<table>
<tr>
<td>
<div class="summaryGroup">
<table>
<tr>
<td>
<div class="infoBox">
<div class="counter">1</div>
<p>tests</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>failures</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>skipped</p>
</div>
</td>
<td>
<div class="infoBox duration">
<div class="counter">0.024s</div>
<p>duration</p>
</div>
</td>
</tr>
</table>
</div>
</td>
<td>
<div class="infoBox success successRate">
<div class="percent">100%</div>
<p>successful</p>
</div>
</td>
</tr>
</table>
</div>
</div>
</div>
<div class="tab">
<h2>standard output</h2>
<span class="code">
<pre id="root-0-test-stdout-saveRejectsDuplicateProviderSubjectOnFlush()">2026-05-12T15:25:53.291+09:00 DEBUG 3159134 --- [ Test worker] org.hibernate.SQL : select uje1_0.id,uje1_0.created_at,uje1_0.email,uje1_0.name,uje1_0.provider,uje1_0.provider_subject,uje1_0.updated_at from auth.users uje1_0 where uje1_0.id=?
Hibernate: select uje1_0.id,uje1_0.created_at,uje1_0.email,uje1_0.name,uje1_0.provider,uje1_0.provider_subject,uje1_0.updated_at from auth.users uje1_0 where uje1_0.id=?
2026-05-12T15:25:53.294+09:00 DEBUG 3159134 --- [ Test worker] org.hibernate.SQL : insert into auth.users (created_at,email,name,provider,provider_subject,id) values (?,?,?,?,?,?)
Hibernate: insert into auth.users (created_at,email,name,provider,provider_subject,id) values (?,?,?,?,?,?)
2026-05-12T15:25:53.297+09:00 DEBUG 3159134 --- [ Test worker] org.hibernate.SQL : select uje1_0.id,uje1_0.created_at,uje1_0.email,uje1_0.name,uje1_0.provider,uje1_0.provider_subject,uje1_0.updated_at from auth.users uje1_0 where uje1_0.id=?
Hibernate: select uje1_0.id,uje1_0.created_at,uje1_0.email,uje1_0.name,uje1_0.provider,uje1_0.provider_subject,uje1_0.updated_at from auth.users uje1_0 where uje1_0.id=?
2026-05-12T15:25:53.300+09:00 DEBUG 3159134 --- [ Test worker] org.hibernate.SQL : insert into auth.users (created_at,email,name,provider,provider_subject,id) values (?,?,?,?,?,?)
Hibernate: insert into auth.users (created_at,email,name,provider,provider_subject,id) values (?,?,?,?,?,?)
2026-05-12T15:25:53.302+09:00 WARN 3159134 --- [ Test worker] org.hibernate.orm.jdbc.error : HHH000247: ErrorCode: 0, SQLState: 23505
2026-05-12T15:25:53.302+09:00 WARN 3159134 --- [ Test worker] org.hibernate.orm.jdbc.error : ERROR: duplicate key value violates unique constraint &quot;uq_users__provider_provider_subject&quot;
Detail: Key (provider, provider_subject)=(KEYCLOAK, keycloak-subject-1) already exists.
</pre>
<button class="clipboard-copy-btn" aria-label="Copy to clipboard" data-copy-element-id="root-0-test-stdout-saveRejectsDuplicateProviderSubjectOnFlush()">Copy</button>
</span>
</div>
</div>
</div>
</div>
<div id="footer">
<p>
<div>
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
</label>
</div>Generated by
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:25:54PM</p>
</div>
</div>
</body>
</html>
@@ -0,0 +1,117 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
<title>Test results - com.project.auth.infrastructure.persistence.user.mapper.UserPersistenceMapperTest</title>
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
<script src="../js/report.js" type="text/javascript"></script>
</head>
<body>
<div id="content">
<div class="breadcrumbs">
<a class="breadcrumb" href="../index.html">all</a> &gt;
<span class="breadcrumb">com.project.auth.infrastructure.persistence.user.mapper.UserPersistenceMapperTest</span>
</div>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="successGroup" href="#">Gradle Test Run :infrastructure:test</a>
</li>
</ul>
<div class="tab">
<h2>Gradle Test Run :infrastructure:test</h2>
<h1>UserPersistenceMapperTest</h1>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="" href="#">summary</a>
</li>
</ul>
<div class="tab">
<h2>summary</h2>
<div>
<div class="summary">
<table>
<tr>
<td>
<div class="summaryGroup">
<table>
<tr>
<td>
<div class="infoBox">
<div class="counter">1</div>
<p>tests</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>failures</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>skipped</p>
</div>
</td>
<td>
<div class="infoBox duration">
<div class="counter">0.005s</div>
<p>duration</p>
</div>
</td>
</tr>
</table>
</div>
</td>
<td>
<div class="infoBox success successRate">
<div class="percent">100%</div>
<p>successful</p>
</div>
</td>
</tr>
</table>
</div>
<table class="test-results">
<thead>
<tr>
<th>Child</th>
<th hidden="">Name</th>
<th>Tests</th>
<th>Failures</th>
<th>Skipped</th>
<th>Duration</th>
<th>Success rate</th>
</tr>
</thead>
<tr>
<td class="success">toDomain_translates_invalid_persisted_user_state_to_infrastructure_exception()</td>
<td class="path" hidden="">toDomain_translates_invalid_persisted_user_state_to_infrastructure_exception()</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0.004s</td>
<td class="success">100%</td>
</tr>
</table>
</div>
</div>
</div>
</div>
</div>
<div id="footer">
<p>
<div>
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
</label>
</div>Generated by
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:25:54PM</p>
</div>
</div>
</body>
</html>
@@ -0,0 +1,175 @@
body {
margin: 0;
padding: 0;
font-family: sans-serif;
font-size: 12pt;
}
body, a, a:visited {
color: #303030;
}
#content {
padding: 30px 50px;
}
#content h1 {
font-size: 160%;
margin-bottom: 10px;
}
#footer {
margin-top: 100px;
font-size: 80%;
white-space: nowrap;
}
#footer, #footer a {
color: #a0a0a0;
}
#line-wrapping-toggle {
vertical-align: middle;
}
#label-for-line-wrapping-toggle {
vertical-align: middle;
}
ul {
margin-left: 0;
}
h1, h2, h3 {
white-space: nowrap;
}
h2 {
font-size: 120%;
}
.tab-container .tab-container {
margin-left: 8px;
}
ul.tabLinks {
padding: 0;
margin-bottom: 0;
overflow: auto;
min-width: 800px;
width: auto;
border-bottom: solid 1px #aaa;
}
ul.tabLinks li {
float: left;
height: 100%;
list-style: none;
padding: 5px 10px;
border-radius: 7px 7px 0 0;
border: solid 1px transparent;
border-bottom: none;
margin-right: 6px;
background-color: #f0f0f0;
cursor: pointer;
}
ul.tabLinks li.deselected > a {
color: #6d6d6d;
}
ul.tabLinks li:hover {
background-color: #fafafa;
}
ul.tabLinks li.selected {
background-color: #c5f0f5;
border-color: #aaa;
}
ul.tabLinks a {
font-size: 120%;
display: block;
outline: none;
text-decoration: none;
margin: 0;
padding: 0;
}
ul.tabLinks li h2 {
margin: 0;
padding: 0;
}
div.tab {
}
div.selected {
display: block;
}
div.deselected {
display: none;
}
div.tab table {
min-width: 350px;
width: auto;
border-collapse: collapse;
}
div.tab th, div.tab table {
border-bottom: solid 1px #d0d0d0;
}
div.tab th {
text-align: left;
white-space: nowrap;
padding-left: 6em;
}
div.tab th:first-child {
padding-left: 0;
}
div.tab td {
white-space: nowrap;
padding-left: 6em;
padding-top: 5px;
padding-bottom: 5px;
}
div.tab td:first-child {
padding-left: 0;
}
div.tab td.numeric, div.tab th.numeric {
text-align: right;
}
span.code {
display: inline-block;
margin-top: 0;
margin-bottom: 1em;
}
span.code pre {
font-size: 11pt;
padding: 10px;
margin: 0;
background-color: #f7f7f7;
border: solid 1px #d0d0d0;
min-width: 700px;
width: auto;
}
span.wrapped pre {
word-wrap: break-word;
white-space: pre-wrap;
word-break: break-all;
}
label.hidden {
display: none;
}
@@ -0,0 +1,154 @@
.summary {
margin-top: 30px;
margin-bottom: 40px;
}
.summary table {
border-collapse: collapse;
}
.summary td {
vertical-align: top;
}
div.tab table.test-results td {
padding-left: 1em;
}
div.tab table.test-results th {
padding-top: 0.5em;
padding-left: 1em;
}
.breadcrumbs, .breadcrumbs a {
color: #606060;
}
.infoBox {
width: 110px;
padding-top: 15px;
padding-bottom: 15px;
text-align: center;
}
.infoBox p {
margin: 0;
}
.counter, .percent {
font-size: 120%;
font-weight: bold;
margin-bottom: 8px;
}
.duration {
width: 125px;
}
.successRate, .summaryGroup {
border: solid 2px #d0d0d0;
-moz-border-radius: 10px;
border-radius: 10px;
}
.successRate {
width: 140px;
margin-left: 35px;
}
.successRate .percent {
font-size: 180%;
}
.success, .success a {
color: #008000;
}
div.success, .successRate.success {
background-color: #bbd9bb;
border-color: #008000;
}
.failures, .failures a {
color: #b60808;
}
.skipped, .skipped a {
color: #c09853;
}
div.failures, .successRate.failures {
background-color: #ecdada;
border-color: #b60808;
}
ul.linkList {
padding-left: 0;
}
ul.linkList li {
list-style: none;
margin-bottom: 5px;
}
div.metadata td:first-child {
padding-left: 5px;
}
div.metadata td {
padding-left: 5px;
}
.metadata tr.odd {
background-color: #f7f7f7;
border: solid 1px #d0d0d0;
}
.metadata tr.even {
border: solid 1px #d0d0d0;
}
.metadata th, .metadata td {
padding: 5px;
text-align: left;
}
.metadata a {
color: blue;
}
.metadata .unrenderable {
color: darkred;
}
.code {
position: relative;
}
.clipboard-copy-btn {
position: absolute;
top: 8px;
right: 8px;
padding: 4px 8px;
font-size: 0.9em;
cursor: pointer;
}
.successGroup::before {
content: "\23FA";
margin-right: 8px;
color: #008000;
display: inline-block;
}
.failureGroup::before {
content: "\2297";
margin-right: 8px;
color: #b60808;
display: inline-block;
}
.skippedGroup::before {
content: "\2296";
margin-right: 8px;
color: #c09853;
display: inline-block;
}
@@ -0,0 +1,127 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
<title>Test results - All Results</title>
<link href="css/base-style.css" rel="stylesheet" type="text/css"/>
<link href="css/style.css" rel="stylesheet" type="text/css"/>
<script src="js/report.js" type="text/javascript"></script>
</head>
<body>
<div id="content">
<h1>All Results</h1>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="successGroup" href="#">Gradle Test Run :infrastructure:test</a>
</li>
</ul>
<div class="tab">
<h2>Gradle Test Run :infrastructure:test</h2>
<h1>Gradle Test Run :infrastructure:test</h1>
<div class="tab-container">
<ul class="tabLinks">
<li>
<a class="" href="#">summary</a>
</li>
</ul>
<div class="tab">
<h2>summary</h2>
<div>
<div class="summary">
<table>
<tr>
<td>
<div class="summaryGroup">
<table>
<tr>
<td>
<div class="infoBox">
<div class="counter">4</div>
<p>tests</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>failures</p>
</div>
</td>
<td>
<div class="infoBox">
<div class="counter">0</div>
<p>skipped</p>
</div>
</td>
<td>
<div class="infoBox duration">
<div class="counter">13.691s</div>
<p>duration</p>
</div>
</td>
</tr>
</table>
</div>
</td>
<td>
<div class="infoBox success successRate">
<div class="percent">100%</div>
<p>successful</p>
</div>
</td>
</tr>
</table>
</div>
<table class="test-results">
<thead>
<tr>
<th>Child</th>
<th>Name</th>
<th>Tests</th>
<th>Failures</th>
<th>Skipped</th>
<th>Duration</th>
<th>Success rate</th>
</tr>
</thead>
<tr>
<td class="success">
<a href="com.project.auth.infrastructure.persistence.user.mapper.UserPersistenceMapperTest/index.html">UserPersistenceMapperTest</a>
</td>
<td class="path">com.project.auth.infrastructure.persistence.user.mapper.UserPersistenceMapperTest</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0.005s</td>
<td class="success">100%</td>
</tr>
<tr>
<td class="success">
<a href="com.project.auth.infrastructure.persistence.user.UserJpaRepositoryTest/index.html">UserJpaRepositoryTest</a>
</td>
<td class="path">com.project.auth.infrastructure.persistence.user.UserJpaRepositoryTest</td>
<td>3</td>
<td>0</td>
<td>0</td>
<td>11.782s</td>
<td class="success">100%</td>
</tr>
</table>
</div>
</div>
</div>
</div>
</div>
<div id="footer">
<p>
<div>
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
</label>
</div>Generated by
<a href="https://www.gradle.org">Gradle 9.3.1</a> at May 12, 2026, 3:25:54PM</p>
</div>
</div>
</body>
</html>
@@ -0,0 +1,228 @@
(function (window, document) {
"use strict";
function changeElementClass(element, classValue) {
if (element.getAttribute("className")) {
element.setAttribute("className", classValue);
} else {
element.setAttribute("class", classValue);
}
}
function getClassAttribute(element) {
if (element.getAttribute("className")) {
return element.getAttribute("className");
} else {
return element.getAttribute("class");
}
}
function addClass(element, classValue) {
changeElementClass(element, getClassAttribute(element) + " " + classValue);
}
function removeClass(element, classValue) {
changeElementClass(element, getClassAttribute(element).replace(classValue, ""));
}
function getCheckBox() {
return document.getElementById("line-wrapping-toggle");
}
function getLabelForCheckBox() {
return document.getElementById("label-for-line-wrapping-toggle");
}
function findCodeBlocks() {
const codeBlocks = [];
const tabContainers = getTabContainers();
for (let i = 0; i < tabContainers.length; i++) {
const spans = tabContainers[i].getElementsByTagName("span");
for (let i = 0; i < spans.length; ++i) {
if (spans[i].className.indexOf("code") >= 0) {
codeBlocks.push(spans[i]);
}
}
}
return codeBlocks;
}
function forAllCodeBlocks(operation) {
const codeBlocks = findCodeBlocks();
for (let i = 0; i < codeBlocks.length; ++i) {
operation(codeBlocks[i], "wrapped");
}
}
function toggleLineWrapping() {
const checkBox = getCheckBox();
if (checkBox.checked) {
forAllCodeBlocks(addClass);
} else {
forAllCodeBlocks(removeClass);
}
}
function initClipboardCopyButton() {
document.querySelectorAll(".clipboard-copy-btn").forEach((button) => {
const copyElementId = button.getAttribute("data-copy-element-id");
const elementWithCodeToSelect = document.getElementById(copyElementId);
button.addEventListener("click", () => {
const text = elementWithCodeToSelect.innerText.trim();
navigator.clipboard
.writeText(text)
.then(() => {
button.textContent = "Copied!";
setTimeout(() => {
button.textContent = "Copy";
}, 1500);
})
.catch((err) => {
alert("Failed to copy to the clipboard: '" + err.message + "'. Check JavaScript console for more details.")
console.warn("Failed to copy to the clipboard", err);
});
});
});
}
function initControls() {
if (findCodeBlocks().length > 0) {
const checkBox = getCheckBox();
const label = getLabelForCheckBox();
checkBox.onclick = toggleLineWrapping;
checkBox.checked = false;
removeClass(label, "hidden");
}
initClipboardCopyButton()
}
class TabManager {
baseId;
tabs;
titles;
headers;
constructor(baseId, tabs, titles, headers) {
this.baseId = baseId;
this.tabs = tabs;
this.titles = titles;
this.headers = headers;
this.init();
}
init() {
for (let i = 0; i < this.headers.length; i++) {
const header = this.headers[i];
header.onclick = () => {
this.select(i);
return false;
};
}
}
select(i) {
this.deselectAll();
changeElementClass(this.tabs[i], "tab selected");
changeElementClass(this.headers[i], "selected");
}
deselectAll() {
for (let i = 0; i < this.tabs.length; i++) {
changeElementClass(this.tabs[i], "tab deselected");
changeElementClass(this.headers[i], "deselected");
}
}
}
function getTabContainers() {
const tabContainers = Array.from(document.getElementsByClassName("tab-container"));
// Used by existing TabbedPageRenderer users, which have not adjusted to use TabsRenderer yet.
const legacyContainer = document.getElementById("tabs");
if (legacyContainer) {
tabContainers.push(legacyContainer);
}
return tabContainers;
}
function initTabs() {
let tabGroups = 0;
function createTab(num, container) {
const tabElems = findTabs(container);
const tabManager = new TabManager("tabs" + num, tabElems, findTitles(tabElems), findHeaders(container));
tabManager.select(0);
}
const tabContainers = getTabContainers();
for (let i = 0; i < tabContainers.length; i++) {
createTab(tabGroups, tabContainers[i]);
tabGroups++;
}
return true;
}
function findTabs(container) {
return findChildElements(container, "DIV", "tab");
}
function findHeaders(container) {
const owner = findChildElements(container, "UL", "tabLinks");
return findChildElements(owner[0], "LI", null);
}
function findTitles(tabs) {
const titles = [];
for (let i = 0; i < tabs.length; i++) {
const tab = tabs[i];
const header = findChildElements(tab, "H2", null)[0];
header.parentNode.removeChild(header);
if (header.innerText) {
titles.push(header.innerText);
} else {
titles.push(header.textContent);
}
}
return titles;
}
function findChildElements(container, name, targetClass) {
const elements = [];
const children = container.childNodes;
for (let i = 0; i < children.length; i++) {
const child = children.item(i);
if (child.nodeType === 1 && child.nodeName === name) {
if (targetClass && child.className.indexOf(targetClass) < 0) {
continue;
}
elements.push(child);
}
}
return elements;
}
// Entry point.
window.onload = function() {
initTabs();
initControls();
};
} (window, window.document));