diff --git a/doc/3/controllers/collection/exists/index.md b/doc/3/controllers/collection/exists/index.md new file mode 100644 index 00000000..7e988d86 --- /dev/null +++ b/doc/3/controllers/collection/exists/index.md @@ -0,0 +1,39 @@ +--- +code: true +type: page +title: exists +description: Checks if a collection exists +--- + +# exists + +Checks if a collection exists. + +--- + +## Arguments + +```java +public CompletableFuture exists( + final String index, + final String collection) +throws NotConnectedException, InternalException + +``` + +--- + +| Arguments | Type | Description | +| ------------------ | -------------------------------------------- | --------------------------------- | +| `index` |
String
| Index | +| `collection` |
String
| Collection | + +--- + +## Return + +Returns a boolean. + +## Usage + +<<< ./snippets/exists.java diff --git a/doc/3/controllers/collection/exists/snippets/exists.java b/doc/3/controllers/collection/exists/snippets/exists.java new file mode 100644 index 00000000..31359784 --- /dev/null +++ b/doc/3/controllers/collection/exists/snippets/exists.java @@ -0,0 +1,4 @@ +Boolean result = kuzzle + .getCollectionController() + .exists("nyc-open-data", "yellow-taxi") + .get(); diff --git a/doc/3/controllers/collection/exists/snippets/exists.test.yml b/doc/3/controllers/collection/exists/snippets/exists.test.yml new file mode 100644 index 00000000..f4f8e8db --- /dev/null +++ b/doc/3/controllers/collection/exists/snippets/exists.test.yml @@ -0,0 +1,10 @@ +name: collection#exists +description: Check if collection exists +hooks: + before: | + curl -XDELETE kuzzle:7512/nyc-open-data + curl -XPOST kuzzle:7512/nyc-open-data/_create + curl -XPUT kuzzle:7512/nyc-open-data/yellow-taxi + after: +template: print-result +expected: "true" \ No newline at end of file diff --git a/doc/3/controllers/collection/index.md b/doc/3/controllers/collection/index.md new file mode 100644 index 00000000..bf3a499d --- /dev/null +++ b/doc/3/controllers/collection/index.md @@ -0,0 +1,8 @@ +--- +code: true +type: branch +title: Collection +description: Collection Controller +--- + +# Collection Controller \ No newline at end of file diff --git a/src/main/java/io/kuzzle/sdk/API/Controllers/CollectionController.java b/src/main/java/io/kuzzle/sdk/API/Controllers/CollectionController.java new file mode 100644 index 00000000..23dada9f --- /dev/null +++ b/src/main/java/io/kuzzle/sdk/API/Controllers/CollectionController.java @@ -0,0 +1,41 @@ +package io.kuzzle.sdk.API.Controllers; + +import io.kuzzle.sdk.CoreClasses.Maps.KuzzleMap; +import io.kuzzle.sdk.Exceptions.InternalException; +import io.kuzzle.sdk.Exceptions.NotConnectedException; +import io.kuzzle.sdk.Kuzzle; + +import java.util.concurrent.CompletableFuture; + +public class CollectionController extends BaseController { + + public CollectionController(final Kuzzle kuzzle) { + super(kuzzle); + } + + /** + * Tells if a collection exists in a given index. + * + * @param index + * @param collection + * @return a CompletableFuture + * @throws NotConnectedException + * @throws InternalException + */ + public CompletableFuture exists( + final String index, + final String collection) throws NotConnectedException, InternalException { + + final KuzzleMap query = new KuzzleMap(); + query + .put("index", index) + .put("collection", collection) + .put("controller", "collection") + .put("action", "exists"); + + return kuzzle + .query(query) + .thenApplyAsync( + (response) -> (Boolean) response.result); + } +} diff --git a/src/main/java/io/kuzzle/sdk/Kuzzle.java b/src/main/java/io/kuzzle/sdk/Kuzzle.java index cd4f6815..012745b8 100644 --- a/src/main/java/io/kuzzle/sdk/Kuzzle.java +++ b/src/main/java/io/kuzzle/sdk/Kuzzle.java @@ -1,6 +1,7 @@ package io.kuzzle.sdk; import io.kuzzle.sdk.API.Controllers.AuthController; +import io.kuzzle.sdk.API.Controllers.CollectionController; import io.kuzzle.sdk.API.Controllers.DocumentController; import io.kuzzle.sdk.API.Controllers.IndexController; import io.kuzzle.sdk.API.Controllers.RealtimeController; @@ -80,6 +81,13 @@ public AuthController getAuthController() { return new AuthController(this); } + /** + * @return The CollectionController + */ + public CollectionController getCollectionController() { + return new CollectionController(this); + } + /** * @return The DocumentController */ diff --git a/src/test/java/io/kuzzle/test/API/Controllers/CollectionTest.java b/src/test/java/io/kuzzle/test/API/Controllers/CollectionTest.java new file mode 100644 index 00000000..0f82e7f0 --- /dev/null +++ b/src/test/java/io/kuzzle/test/API/Controllers/CollectionTest.java @@ -0,0 +1,52 @@ +package io.kuzzle.test.API.Controllers; + +import io.kuzzle.sdk.CoreClasses.Maps.KuzzleMap; +import io.kuzzle.sdk.Exceptions.InternalException; +import io.kuzzle.sdk.Exceptions.NotConnectedException; +import io.kuzzle.sdk.Kuzzle; +import io.kuzzle.sdk.Protocol.AbstractProtocol; +import io.kuzzle.sdk.Protocol.ProtocolState; +import io.kuzzle.sdk.Protocol.WebSocket; +import org.junit.Test; +import org.mockito.ArgumentCaptor; +import org.mockito.Mockito; +import org.mockito.stubbing.Answer; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.spy; + +public class CollectionTest { + + private AbstractProtocol networkProtocol = Mockito.mock(WebSocket.class); + + @Test + public void existsCollectionTest() throws NotConnectedException, InternalException { + + Kuzzle kuzzleMock = spy(new Kuzzle(networkProtocol)); + String index = "nyc-open-data"; + String collection = "yellow-taxi"; + + + ArgumentCaptor arg = ArgumentCaptor.forClass(KuzzleMap.class); + + kuzzleMock.getCollectionController().exists(index, collection); + Mockito.verify(kuzzleMock, Mockito.times(1)).query(arg.capture()); + + assertEquals((arg.getValue()).getString("controller"), "collection"); + assertEquals((arg.getValue()).getString("action"), "exists"); + assertEquals((arg.getValue()).getString("index"), "nyc-open-data"); + assertEquals((arg.getValue()).getString("collection"), "yellow-taxi"); + } + + @Test(expected = NotConnectedException.class) + public void existsCollectionShouldThrowWhenNotConnected() throws NotConnectedException, InternalException { + AbstractProtocol fakeNetworkProtocol = Mockito.mock(WebSocket.class); + Mockito.when(fakeNetworkProtocol.getState()).thenAnswer((Answer) invocation -> ProtocolState.CLOSE); + + Kuzzle kuzzleMock = spy(new Kuzzle(fakeNetworkProtocol)); + String index = "nyc-open-data"; + String collection = "yellow-taxi"; + + kuzzleMock.getCollectionController().exists(index, collection); + } +}