Skip to content

Commit

Permalink
Integration test added (spring-attic#2165)
Browse files Browse the repository at this point in the history
  • Loading branch information
s13o committed Feb 6, 2020
1 parent ba6fd47 commit 710f66f
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -150,10 +150,11 @@ public static <T> String applySortingPagingQueryOptions(Class<T> entityClass,
return sql;
}
final String subquery = fetchInterleaved ? getChildrenSubquery(persistentEntity, mappingContext) : "";
final String alias = subquery.isEmpty() ? "" : " " + persistentEntity.tableName();
StringBuilder sb = applySort(options.getSort(),
new StringBuilder("SELECT *").append(subquery)
.append(" FROM (").append(sql).append(")")
.append(subquery.isEmpty() ? "" : " " + persistentEntity.tableName()), (o) -> {
.append(" FROM (").append(sql).append(")").append(alias),
(o) -> {
SpannerPersistentProperty property = persistentEntity
.getPersistentProperty(o.getProperty());
return (property != null) ? property.getColumnName() : o.getProperty();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,19 @@

import com.google.cloud.Timestamp;
import com.google.cloud.spanner.Key;
import com.google.cloud.spanner.Statement;
import com.google.cloud.spanner.Struct;
import org.assertj.core.util.Sets;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.mock.mockito.SpyBean;
import org.springframework.cloud.gcp.data.spanner.core.SpannerQueryOptions;
import org.springframework.cloud.gcp.data.spanner.core.SpannerTemplate;
import org.springframework.cloud.gcp.data.spanner.core.mapping.SpannerMappingContext;
import org.springframework.cloud.gcp.data.spanner.core.mapping.SpannerPersistentEntity;
import org.springframework.cloud.gcp.data.spanner.test.AbstractSpannerIntegrationTest;
Expand All @@ -51,6 +56,8 @@
import org.springframework.transaction.annotation.Transactional;

import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;

/**
* Integration tests for Spanner Repository that uses many features.
Expand All @@ -76,6 +83,9 @@ public class SpannerRepositoryIntegrationTests extends AbstractSpannerIntegratio
@Autowired
SpannerMappingContext spannerMappingContext;

@SpyBean
SpannerTemplate spannerTemplate;

@Before
@After
public void cleanUpData() {
Expand Down Expand Up @@ -246,6 +256,32 @@ public void queryMethodsTest() {
assertThat(this.subTradeRepository.count()).isEqualTo(2);
assertThat(this.subTradeComponentRepository.count()).isEqualTo(3);

// test eager-fetch in @Query
Mockito.clearInvocations(spannerTemplate);
final Trade aTrade = someTrade;
assertThat(tradeRepository.fetchByIdEagerly(aTrade.getId()))
.isNotEmpty()
.hasValueSatisfying(t -> assertThat(t.getId()).isEqualTo(aTrade.getId()))
.hasValueSatisfying(t -> assertThat(t.getTraderId()).isEqualTo(aTrade.getTraderId()))
.hasValueSatisfying(t -> assertThat(t.getSymbol()).isEqualTo(aTrade.getSymbol()))
.hasValueSatisfying(t -> assertThat(t.getSubTrades()).hasSize(aTrade.getSubTrades().size()));
Mockito.verify(spannerTemplate, Mockito.times(1))
.executeQuery(any(Statement.class), any());
Mockito.verify(spannerTemplate, Mockito.times(1))
.query(eq(Trade.class), any(Statement.class), any(SpannerQueryOptions.class));

Mockito.clearInvocations(spannerTemplate);
assertThat(tradeRepository.fetchByIdLazy(aTrade.getId()))
.isNotEmpty()
.hasValueSatisfying(t -> assertThat(t.getId()).isEqualTo(aTrade.getId()))
.hasValueSatisfying(t -> assertThat(t.getTraderId()).isEqualTo(aTrade.getTraderId()))
.hasValueSatisfying(t -> assertThat(t.getSymbol()).isEqualTo(aTrade.getSymbol()))
.hasValueSatisfying(t -> assertThat(t.getSubTrades()).hasSize(aTrade.getSubTrades().size()));
Mockito.verify(spannerTemplate, Mockito.times(2))
.executeQuery(any(Statement.class), any());
Mockito.verify(spannerTemplate, Mockito.times(1))
.query(eq(Trade.class), any(Statement.class), any(SpannerQueryOptions.class));

List<SubTradeComponent> subTradeComponents = (List) this.subTradeComponentRepository.findAll();

assertThat(subTradeComponents.get(0).getCommitTimestamp())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package org.springframework.cloud.gcp.data.spanner.test.domain;

import java.util.List;
import java.util.Optional;
import java.util.Set;

import com.google.cloud.spanner.Key;
Expand Down Expand Up @@ -46,6 +47,12 @@ public interface TradeRepository extends SpannerRepository<Trade, Key> {

void deleteBySymbolAndAction(String symbol, String action);

@Query(value = "SELECT * FROM :org.springframework.cloud.gcp.data.spanner.test.domain.Trade: WHERE id = @id", fetchInterleaved = true)
Optional<Trade> fetchByIdEagerly(@Param("id") String id);

@Query(value = "SELECT * FROM :org.springframework.cloud.gcp.data.spanner.test.domain.Trade: WHERE id = @id", fetchInterleaved = false)
Optional<Trade> fetchByIdLazy(@Param("id") String id);

@Query(dmlStatement = true, value = "UPDATE :org.springframework.cloud.gcp.data.spanner.test.domain.Trade:" +
" set action = @action WHERE id = @id")
long updateActionTradeById(@Param("id") String id, @Param("action") String act);
Expand Down

0 comments on commit 710f66f

Please sign in to comment.