/* * Copyright 2016-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.springframework.cassandra.core; import static org.assertj.core.api.Assertions.*; import reactor.core.scheduler.Schedulers; import reactor.test.StepVerifier; import java.util.concurrent.atomic.AtomicBoolean; import org.junit.Before; import org.junit.Test; import org.springframework.cassandra.core.session.DefaultBridgedReactiveSession; import org.springframework.cassandra.core.session.DefaultReactiveSessionFactory; import org.springframework.cassandra.core.session.ReactiveSession; import org.springframework.cassandra.test.integration.AbstractKeyspaceCreatingIntegrationTest; import com.datastax.driver.core.querybuilder.QueryBuilder; /** * Integration tests for {@link ReactiveCqlTemplate}. * * @author Mark Paluch */ public class ReactiveCqlTemplateIntegrationTests extends AbstractKeyspaceCreatingIntegrationTest { private static final AtomicBoolean initialized = new AtomicBoolean(); ReactiveSession reactiveSession; ReactiveCqlTemplate template; @Before public void before() { reactiveSession = new DefaultBridgedReactiveSession(getSession(), Schedulers.elastic()); if (initialized.compareAndSet(false, true)) { getSession().execute("CREATE TABLE IF NOT EXISTS user (id text PRIMARY KEY, username text);"); } else { getSession().execute("TRUNCATE user;"); } getSession().execute("INSERT INTO user (id, username) VALUES ('WHITE', 'Walter');"); template = new ReactiveCqlTemplate(new DefaultReactiveSessionFactory(reactiveSession)); } @Test // DATACASS-335 public void executeShouldRemoveRecords() { StepVerifier.create(template.execute("DELETE FROM user WHERE id = 'WHITE'")).expectNext(true).verifyComplete(); assertThat(getSession().execute("SELECT * FROM user").one()).isNull(); } @Test // DATACASS-335 public void queryForObjectShouldReturnFirstColumn() { StepVerifier.create(template.queryForObject("SELECT id FROM user;", String.class)) // .expectNext("WHITE") // .verifyComplete(); } @Test // DATACASS-335 public void queryForObjectShouldReturnMap() { StepVerifier.create(template.queryForMap("SELECT * FROM user;")) // .consumeNextWith(actual -> { assertThat(actual).containsEntry("id", "WHITE").containsEntry("username", "Walter"); }).verifyComplete(); } @Test // DATACASS-335 public void executeStatementShouldRemoveRecords() { StepVerifier .create(template.execute(QueryBuilder.delete() // .from("user") // .where(QueryBuilder.eq("id", "WHITE")))) // .expectNext(true) // .verifyComplete(); assertThat(getSession().execute("SELECT * FROM user").one()).isNull(); } @Test // DATACASS-335 public void queryForObjectStatementShouldReturnFirstColumn() { StepVerifier .create(template.queryForObject(QueryBuilder // .select("id") // .from("user"), String.class)) // .expectNext("WHITE") // .verifyComplete(); } @Test // DATACASS-335 public void queryForObjectStatementShouldReturnMap() { StepVerifier.create(template.queryForMap(QueryBuilder.select().from("user"))) // .consumeNextWith(actual -> { assertThat(actual).containsEntry("id", "WHITE").containsEntry("username", "Walter"); }).verifyComplete(); } @Test // DATACASS-335 public void executeWithArgsShouldRemoveRecords() { StepVerifier.create(template.execute("DELETE FROM user WHERE id = ?", "WHITE")).expectNext(true).verifyComplete(); assertThat(getSession().execute("SELECT * FROM user").one()).isNull(); } @Test // DATACASS-335 public void queryForObjectWithArgsShouldReturnFirstColumn() { StepVerifier.create(template.queryForObject("SELECT id FROM user WHERE id = ?;", String.class, "WHITE")) // .expectNext("WHITE") // .verifyComplete(); } @Test // DATACASS-335 public void queryForObjectWithArgsShouldReturnMap() { StepVerifier.create(template.queryForMap("SELECT * FROM user WHERE id = ?;", "WHITE")) // .consumeNextWith(actual -> { assertThat(actual).containsEntry("id", "WHITE").containsEntry("username", "Walter"); }).verifyComplete(); } }