/* * 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.data.cassandra.test.integration.mapping.mapid.proxy; import static org.assertj.core.api.Assertions.*; import static org.springframework.data.cassandra.repository.support.MapIdFactory.*; import org.junit.Before; import org.junit.Test; import org.springframework.cassandra.core.PrimaryKeyType; import org.springframework.cassandra.test.integration.AbstractKeyspaceCreatingIntegrationTest; import org.springframework.data.cassandra.core.CassandraOperations; import org.springframework.data.cassandra.core.CassandraTemplate; import org.springframework.data.cassandra.mapping.Column; import org.springframework.data.cassandra.mapping.PrimaryKeyColumn; import org.springframework.data.cassandra.mapping.Table; import org.springframework.data.cassandra.repository.MapId; import org.springframework.data.cassandra.test.integration.support.SchemaTestUtils; /** * Integration tests for {@link org.springframework.data.cassandra.core.CassandraTemplate} using {@link MapId}. * * @author Matthew T. Adams * @author Mark Paluch */ public class CassandraTemplateMapIdProxyDelegateIntegrationTests extends AbstractKeyspaceCreatingIntegrationTest { CassandraOperations operations; @Before public void before() { operations = new CassandraTemplate(session); SchemaTestUtils.potentiallyCreateTableFor(SinglePkc.class, operations); SchemaTestUtils.potentiallyCreateTableFor(MultiPkc.class, operations); SchemaTestUtils.truncate(SinglePkc.class, operations); SchemaTestUtils.truncate(MultiPkc.class, operations); } @Test public void testSinglePkc() { // insert SinglePkc inserted = new SinglePkc(uuid()); inserted.setValue(uuid()); SinglePkc saved = operations.insert(inserted); assertThat(inserted).isSameAs(saved); // select SinglePkcId id = id(SinglePkcId.class).key(saved.getKey()); SinglePkc selected = operations.selectOneById(id, SinglePkc.class); assertThat(saved).isNotSameAs(selected); assertThat(selected.getKey()).isEqualTo(saved.getKey()); assertThat(selected.getValue()).isEqualTo(saved.getValue()); // update selected.setValue(uuid()); SinglePkc updated = operations.update(selected); assertThat(selected).isSameAs(updated); selected = operations.selectOneById(id, SinglePkc.class); assertThat(updated).isNotSameAs(selected); assertThat(selected.getValue()).isEqualTo(updated.getValue()); // delete operations.delete(selected); assertThat(operations.selectOneById(id, SinglePkc.class)).isNull(); } public interface SinglePkcId { SinglePkcId key(String key); String key(); } @Table public static class SinglePkc { @PrimaryKeyColumn(ordinal = 0, type = PrimaryKeyType.PARTITIONED) String key; @Column String value; public SinglePkc(String key) { setKey(key); } public String getKey() { return key; } public void setKey(String key) { this.key = key; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } } @Test public void testMultiPkc() { // insert MultiPkc inserted = new MultiPkc(uuid(), uuid()); inserted.setValue(uuid()); MultiPkc saved = operations.insert(inserted); assertThat(inserted).isSameAs(saved); // select MultiPkcId id = id(MultiPkcId.class).key0(saved.getKey0()).key1(saved.getKey1()); MultiPkc selected = operations.selectOneById(id, MultiPkc.class); assertThat(saved).isNotSameAs(selected); assertThat(selected.getKey0()).isEqualTo(saved.getKey0()); assertThat(selected.getKey1()).isEqualTo(saved.getKey1()); assertThat(selected.getValue()).isEqualTo(saved.getValue()); // update selected.setValue(uuid()); MultiPkc updated = operations.update(selected); assertThat(selected).isSameAs(updated); selected = operations.selectOneById(id, MultiPkc.class); assertThat(updated).isNotSameAs(selected); assertThat(selected.getValue()).isEqualTo(updated.getValue()); // delete operations.delete(selected); assertThat(operations.selectOneById(id, MultiPkc.class)).isNull(); } public interface MultiPkcId { MultiPkcId key0(String key0); String key0(); MultiPkcId key1(String key1); String key1(); } @Table public static class MultiPkc { @PrimaryKeyColumn(ordinal = 0, type = PrimaryKeyType.PARTITIONED) String key0; @PrimaryKeyColumn(ordinal = 1) String key1; @Column String value; public MultiPkc(String key0, String key1) { setKey0(key0); setKey1(key1); } public String getKey0() { return key0; } public void setKey0(String key0) { this.key0 = key0; } public String getKey1() { return key1; } public void setKey1(String key1) { this.key1 = key1; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } } }