Skip to content

Commit 7a66d65

Browse files
committed
Polishing.
Simplify tests. See #4029 Original pull request: #4030
1 parent c0d1870 commit 7a66d65

File tree

1 file changed

+41
-28
lines changed

1 file changed

+41
-28
lines changed

spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/aot/QueriesFactoryUnitTests.java

Lines changed: 41 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -15,31 +15,38 @@
1515
*/
1616
package org.springframework.data.jpa.repository.aot;
1717

18-
import static org.assertj.core.api.Assertions.assertThat;
19-
import static org.mockito.ArgumentMatchers.eq;
20-
import static org.mockito.Mockito.when;
18+
import static org.assertj.core.api.Assertions.*;
19+
import static org.assertj.core.api.InstanceOfAssertFactories.*;
20+
import static org.mockito.Mockito.*;
2121

22+
import jakarta.persistence.Entity;
2223
import jakarta.persistence.EntityManagerFactory;
24+
import jakarta.persistence.Id;
25+
26+
import java.lang.reflect.Method;
27+
import java.util.Collection;
28+
import java.util.Collections;
2329

24-
import org.assertj.core.api.InstanceOfAssertFactories;
2530
import org.junit.jupiter.api.BeforeEach;
2631
import org.junit.jupiter.api.Test;
27-
import org.mockito.Mockito;
28-
import org.springframework.core.annotation.MergedAnnotation;
32+
33+
import org.springframework.core.annotation.MergedAnnotations;
34+
import org.springframework.data.jpa.provider.QueryExtractor;
2935
import org.springframework.data.jpa.repository.Query;
30-
import org.springframework.data.jpa.repository.query.JpaEntityMetadata;
3136
import org.springframework.data.jpa.repository.query.JpaQueryMethod;
3237
import org.springframework.data.jpa.repository.query.QueryEnhancerSelector;
33-
import org.springframework.data.jpa.repository.support.JpaEntityInformation;
3438
import org.springframework.data.projection.SpelAwareProxyProjectionFactory;
39+
import org.springframework.data.repository.Repository;
40+
import org.springframework.data.repository.config.AotRepositoryInformation;
3541
import org.springframework.data.repository.config.RepositoryConfigurationSource;
3642
import org.springframework.data.repository.core.RepositoryInformation;
37-
import org.springframework.data.repository.query.ReturnedType;
43+
import org.springframework.data.repository.core.support.AbstractRepositoryMetadata;
3844

3945
/**
4046
* Unit tests for {@link QueriesFactory}.
4147
*
4248
* @author Christoph Strobl
49+
* @author Mark Paluch
4350
*/
4451
class QueriesFactoryUnitTests {
4552

@@ -48,36 +55,42 @@ class QueriesFactoryUnitTests {
4855
@BeforeEach
4956
void setUp() {
5057

51-
RepositoryConfigurationSource configSource = Mockito.mock(RepositoryConfigurationSource.class);
52-
EntityManagerFactory entityManagerFactory = Mockito.mock(EntityManagerFactory.class);
58+
RepositoryConfigurationSource configSource = mock(RepositoryConfigurationSource.class);
59+
EntityManagerFactory entityManagerFactory = mock(EntityManagerFactory.class);
5360

5461
factory = new QueriesFactory(configSource, entityManagerFactory, this.getClass().getClassLoader());
5562
}
5663

5764
@Test // GH-4029
58-
@SuppressWarnings({ "rawtypes", "unchecked" })
59-
void stringQueryShouldResolveEntityNameFromJakartaAnnotationIfPresent() {
60-
61-
RepositoryInformation repositoryInformation = Mockito.mock(RepositoryInformation.class);
62-
JpaEntityMetadata<?> entityMetadata = Mockito.mock(JpaEntityInformation.class);
63-
when(entityMetadata.getEntityName()).thenReturn("CustomNamed");
65+
void stringQueryShouldResolveEntityNameFromJakartaAnnotationIfPresent() throws NoSuchMethodException {
6466

65-
MergedAnnotation<Query> queryAnnotation = Mockito.mock(MergedAnnotation.class);
66-
when(queryAnnotation.isPresent()).thenReturn(true);
67-
when(queryAnnotation.getString(eq("value"))).thenReturn("select t from #{#entityName} t");
68-
when(queryAnnotation.getBoolean(eq("nativeQuery"))).thenReturn(false);
69-
when(queryAnnotation.getString("countQuery")).thenReturn("select count(t) from #{#entityName} t");
67+
RepositoryInformation repositoryInformation = new AotRepositoryInformation(
68+
AbstractRepositoryMetadata.getMetadata(MyRepository.class), MyRepository.class, Collections.emptyList());
7069

71-
JpaQueryMethod queryMethod = Mockito.mock(JpaQueryMethod.class);
72-
when(queryMethod.getEntityInformation()).thenReturn((JpaEntityMetadata) entityMetadata);
70+
Method method = MyRepository.class.getMethod("someFind");
71+
JpaQueryMethod queryMethod = new JpaQueryMethod(method, repositoryInformation,
72+
new SpelAwareProxyProjectionFactory(), mock(QueryExtractor.class));
7373

7474
AotQueries generatedQueries = factory.createQueries(repositoryInformation,
75-
ReturnedType.of(Object.class, Object.class, new SpelAwareProxyProjectionFactory()),
76-
QueryEnhancerSelector.DEFAULT_SELECTOR, queryAnnotation, queryMethod);
75+
queryMethod.getResultProcessor().getReturnedType(), QueryEnhancerSelector.DEFAULT_SELECTOR,
76+
MergedAnnotations.from(method).get(Query.class), queryMethod);
7777

78-
assertThat(generatedQueries.result()).asInstanceOf(InstanceOfAssertFactories.type(StringAotQuery.class))
78+
assertThat(generatedQueries.result()).asInstanceOf(type(StringAotQuery.class))
7979
.extracting(StringAotQuery::getQueryString).isEqualTo("select t from CustomNamed t");
80-
assertThat(generatedQueries.count()).asInstanceOf(InstanceOfAssertFactories.type(StringAotQuery.class))
80+
assertThat(generatedQueries.count()).asInstanceOf(type(StringAotQuery.class))
8181
.extracting(StringAotQuery::getQueryString).isEqualTo("select count(t) from CustomNamed t");
8282
}
83+
84+
interface MyRepository extends Repository<MyEntity, Long> {
85+
86+
@Query("select t from #{#entityName} t")
87+
Collection<MyEntity> someFind();
88+
}
89+
90+
@Entity(name = "CustomNamed")
91+
static class MyEntity {
92+
93+
@Id Long id;
94+
95+
}
8396
}

0 commit comments

Comments
 (0)