From c188b6836684b9765180d8b83314a8d52d0fc44a Mon Sep 17 00:00:00 2001 From: "ahmet.ata" Date: Fri, 4 Jun 2021 11:32:49 +0300 Subject: [PATCH 1/2] jdempotent-couchbase-starter test: Add unit tests --- .../pom.xml | 11 ++ .../CouchbaseIdempotentRepositoryTest.java | 140 ++++++++++++++++++ Jdempotent-spring-boot-redis-starter/pom.xml | 5 + 3 files changed, 156 insertions(+) create mode 100644 Jdempotent-spring-boot-couchbase-starter/src/test/java/com.trendyol.jtempotent.couchbase/CouchbaseIdempotentRepositoryTest.java diff --git a/Jdempotent-spring-boot-couchbase-starter/pom.xml b/Jdempotent-spring-boot-couchbase-starter/pom.xml index dcdb663..15eacc2 100644 --- a/Jdempotent-spring-boot-couchbase-starter/pom.xml +++ b/Jdempotent-spring-boot-couchbase-starter/pom.xml @@ -92,6 +92,17 @@ 4.13.1 test + + org.junit.vintage + junit-vintage-engine + 5.7.0 + + + org.mockito + mockito-inline + 3.8.0 + test + org.springframework.boot spring-boot-starter-test diff --git a/Jdempotent-spring-boot-couchbase-starter/src/test/java/com.trendyol.jtempotent.couchbase/CouchbaseIdempotentRepositoryTest.java b/Jdempotent-spring-boot-couchbase-starter/src/test/java/com.trendyol.jtempotent.couchbase/CouchbaseIdempotentRepositoryTest.java new file mode 100644 index 0000000..9bbfc6b --- /dev/null +++ b/Jdempotent-spring-boot-couchbase-starter/src/test/java/com.trendyol.jtempotent.couchbase/CouchbaseIdempotentRepositoryTest.java @@ -0,0 +1,140 @@ +import com.couchbase.client.java.Collection; +import com.couchbase.client.java.kv.ExistsResult; +import com.couchbase.client.java.kv.GetResult; +import com.couchbase.client.java.kv.UpsertOptions; +import com.trendyol.jdempotent.core.model.IdempotencyKey; +import com.trendyol.jdempotent.core.model.IdempotentRequestResponseWrapper; +import com.trendyol.jdempotent.core.model.IdempotentRequestWrapper; +import com.trendyol.jdempotent.core.model.IdempotentResponseWrapper; +import com.trendyol.jdempotent.couchbase.CouchbaseConfig; +import com.trendyol.jdempotent.couchbase.CouchbaseIdempotentRepository; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.time.Duration; +import java.util.concurrent.TimeUnit; + +import static org.junit.Assert.assertFalse; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +public class CouchbaseIdempotentRepositoryTest { + @InjectMocks + private CouchbaseIdempotentRepository couchbaseIdempotentRepository; + + @Mock + private CouchbaseConfig couchbaseConfig; + + @Mock + private Collection collection; + + @Captor + private ArgumentCaptor captor; + + @Captor + private ArgumentCaptor upsertOptionCaptor; + + @BeforeEach + public void setUp() { + couchbaseIdempotentRepository = new CouchbaseIdempotentRepository(couchbaseConfig, + collection); + } + + @Test + public void given_an_available_object_when_couchbase_contains_then_return_true() { + //Given + IdempotencyKey idempotencyKey = new IdempotencyKey("key"); + ExistsResult existsResult = mock(ExistsResult.class); + when(existsResult.exists()).thenReturn(true); + when(collection.exists(idempotencyKey.getKeyValue())).thenReturn(existsResult); + + //When + Boolean isContain = couchbaseIdempotentRepository.contains(idempotencyKey); + + //Then + verify(collection, times(1)).exists(idempotencyKey.getKeyValue()); + assertTrue(isContain); + } + + @Test + public void given_an_available_object_when_couchbase_contains_then_return_false() { + //Given + IdempotencyKey idempotencyKey = new IdempotencyKey("key"); + ExistsResult existsResult = mock(ExistsResult.class); + when(existsResult.exists()).thenReturn(false); + when(collection.exists(idempotencyKey.getKeyValue())).thenReturn(existsResult); + + //When + Boolean isContain = couchbaseIdempotentRepository.contains(idempotencyKey); + + //Then + verify(collection, times(1)).exists(idempotencyKey.getKeyValue()); + assertFalse(isContain); + } + + @Test + public void given_an_available_object_when_couchbase_get_response_then_return_expected_idempotent_response_wrapper() { + //Given + IdempotencyKey idempotencyKey = new IdempotencyKey("key"); + IdempotentRequestResponseWrapper wrapper = new IdempotentRequestResponseWrapper(); + GetResult getResult = mock(GetResult.class); + when(getResult.contentAs(IdempotentRequestResponseWrapper.class)).thenReturn(wrapper); + when(collection.get(idempotencyKey.getKeyValue())).thenReturn(getResult); + + //When + IdempotentResponseWrapper result = couchbaseIdempotentRepository.getResponse(idempotencyKey); + + //Then + verify(collection, times(1)).get(idempotencyKey.getKeyValue()); + assertEquals(result, wrapper.getResponse()); + } + + @Test + public void given_an_available_object_when_couchbase_store_then_collection_insert_once_time() { + //Given + IdempotencyKey idempotencyKey = new IdempotencyKey("key"); + IdempotentRequestWrapper wrapper = new IdempotentRequestWrapper(); + IdempotentRequestResponseWrapper responseWrapper = new IdempotentRequestResponseWrapper(wrapper); + + //When + couchbaseIdempotentRepository.store(idempotencyKey, wrapper); + + //Then + verify(collection, times(1)).insert(eq(idempotencyKey.getKeyValue()), captor.capture()); + IdempotentRequestResponseWrapper idempotentRequestResponseWrapper = captor.getValue(); + assertEquals(idempotentRequestResponseWrapper.getResponse(), responseWrapper.getResponse()); + } + + @Test + public void given_an_available_object_when_couchbase_store_with_ttl_and_time_unit_is_days_then_collection_insert_once_time() { + //Given + IdempotencyKey idempotencyKey = new IdempotencyKey("key"); + IdempotentRequestWrapper wrapper = new IdempotentRequestWrapper(); + Long ttl = 1L; + TimeUnit timeUnit = TimeUnit.DAYS; + Duration duration = Duration.ofDays(1L); + IdempotentRequestResponseWrapper responseWrapper = new IdempotentRequestResponseWrapper(wrapper); + /*var mockUpsertOption = Mockito.mockStatic(UpsertOptions.class); + when(((UpsertOptions)mockUpsertOption)).thenReturn((UpsertOptions) mockUpsertOption);*/ + + //When + couchbaseIdempotentRepository.store(idempotencyKey, wrapper, ttl, timeUnit); + + //Then + verify(collection, times(1)).upsert(eq(idempotencyKey.getKeyValue()), + captor.capture(), + upsertOptionCaptor.capture()); + IdempotentRequestResponseWrapper idempotentRequestResponseWrapper = captor.getValue(); + assertEquals(idempotentRequestResponseWrapper.getResponse(), responseWrapper.getResponse()); + //verify((UpsertOptions)mockUpsertOption, times(1)).expiry(duration); + } +} \ No newline at end of file diff --git a/Jdempotent-spring-boot-redis-starter/pom.xml b/Jdempotent-spring-boot-redis-starter/pom.xml index af5649a..08cf7fb 100644 --- a/Jdempotent-spring-boot-redis-starter/pom.xml +++ b/Jdempotent-spring-boot-redis-starter/pom.xml @@ -80,6 +80,11 @@ 4.13.1 test + + org.junit.vintage + junit-vintage-engine + 5.7.0 + org.springframework.boot spring-boot-starter-test From 0dfda7814fe492fe1064872a42ab1664716420bf Mon Sep 17 00:00:00 2001 From: "ahmet.ata" Date: Fri, 4 Jun 2021 11:39:21 +0300 Subject: [PATCH 2/2] Add test-classes --- .../CouchbaseIdempotentRepositoryTest.class | Bin 0 -> 6454 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Jdempotent-spring-boot-couchbase-starter/target/test-classes/CouchbaseIdempotentRepositoryTest.class diff --git a/Jdempotent-spring-boot-couchbase-starter/target/test-classes/CouchbaseIdempotentRepositoryTest.class b/Jdempotent-spring-boot-couchbase-starter/target/test-classes/CouchbaseIdempotentRepositoryTest.class new file mode 100644 index 0000000000000000000000000000000000000000..18898d1f9396f1358775d4438e459c3a8b27e3dd GIT binary patch literal 6454 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 literal 0 HcmV?d00001