/*
* 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.mapping;
import static org.assertj.core.api.Assertions.*;
import static org.springframework.cassandra.core.cql.CqlIdentifier.*;
import java.io.Serializable;
import java.util.Arrays;
import java.util.List;
import org.junit.Test;
import org.springframework.cassandra.core.PrimaryKeyType;
import org.springframework.cassandra.core.cql.CqlIdentifier;
/**
* Unit tests for {@link BasicCassandraMappingContext}.
*
* @author Matthew T. Adams
* @author Mark Paluch
*/
public class ForceQuotedPropertiesSimpleUnitTests {
public static final String EXPLICIT_PRIMARY_KEY_NAME = "ThePrimaryKey";
public static final String EXPLICIT_COLUMN_NAME = "AnotherColumn";
public static final String EXPLICIT_KEY_0 = "TheFirstKeyField";
public static final String EXPLICIT_KEY_1 = "TheSecondKeyField";
CassandraMappingContext context = new BasicCassandraMappingContext();
@Test
public void testImplicit() {
CassandraPersistentEntity<?> entity = context.getRequiredPersistentEntity(Implicit.class);
CassandraPersistentProperty primaryKey = entity.getRequiredPersistentProperty("primaryKey");
CassandraPersistentProperty aString = entity.getRequiredPersistentProperty("aString");
assertThat(primaryKey.getColumnName().toCql()).isEqualTo("\"primaryKey\"");
assertThat(aString.getColumnName().toCql()).isEqualTo("\"aString\"");
}
@Table
public static class Implicit {
@PrimaryKey(forceQuote = true) String primaryKey;
@Column(forceQuote = true) String aString;
}
@Test
public void testDefault() {
CassandraPersistentEntity<?> entity = context.getRequiredPersistentEntity(Default.class);
CassandraPersistentProperty primaryKey = entity.getRequiredPersistentProperty("primaryKey");
CassandraPersistentProperty aString = entity.getRequiredPersistentProperty("aString");
assertThat(primaryKey.getColumnName().toCql()).isEqualTo("primarykey");
assertThat(aString.getColumnName().toCql()).isEqualTo("astring");
}
@Table
public static class Default {
@PrimaryKey String primaryKey;
@Column String aString;
}
@Test
public void testExplicit() {
CassandraPersistentEntity<?> entity = context.getRequiredPersistentEntity(Explicit.class);
CassandraPersistentProperty primaryKey = entity.getRequiredPersistentProperty("primaryKey");
CassandraPersistentProperty aString = entity.getRequiredPersistentProperty("aString");
assertThat(primaryKey.getColumnName().toCql()).isEqualTo("\"" + EXPLICIT_PRIMARY_KEY_NAME + "\"");
assertThat(aString.getColumnName().toCql()).isEqualTo("\"" + EXPLICIT_COLUMN_NAME + "\"");
}
@Table
public static class Explicit {
@PrimaryKey(value = EXPLICIT_PRIMARY_KEY_NAME, forceQuote = true) String primaryKey;
@Column(value = EXPLICIT_COLUMN_NAME, forceQuote = true) String aString;
}
@Test
public void testImplicitComposite() {
CassandraPersistentEntity<?> key = context.getRequiredPersistentEntity(ImplicitKey.class);
CassandraPersistentProperty stringZero = key.getRequiredPersistentProperty("stringZero");
CassandraPersistentProperty stringOne = key.getRequiredPersistentProperty("stringOne");
assertThat(stringZero.getColumnName().toCql()).isEqualTo("\"stringZero\"");
assertThat(stringOne.getColumnName().toCql()).isEqualTo("\"stringOne\"");
List<CqlIdentifier> names = Arrays.asList(quotedCqlId("stringZero"), quotedCqlId("stringOne"));
CassandraPersistentEntity<?> entity = context.getRequiredPersistentEntity(ImplicitComposite.class);
assertThat(entity.getRequiredPersistentProperty("primaryKey").getColumnNames()).isEqualTo(names);
}
@PrimaryKeyClass
public static class ImplicitKey implements Serializable {
private static final long serialVersionUID = -1956747638065267667L;
@PrimaryKeyColumn(ordinal = 0, forceQuote = true, type = PrimaryKeyType.PARTITIONED) String stringZero;
@PrimaryKeyColumn(ordinal = 1, forceQuote = true) String stringOne;
}
@Table
public static class ImplicitComposite {
@PrimaryKey(forceQuote = true) ImplicitKey primaryKey;
@Column(forceQuote = true) String aString;
}
@Test
public void testDefaultComposite() {
CassandraPersistentEntity<?> key = context.getRequiredPersistentEntity(DefaultKey.class);
CassandraPersistentProperty stringZero = key.getRequiredPersistentProperty("stringZero");
CassandraPersistentProperty stringOne = key.getRequiredPersistentProperty("stringOne");
assertThat(stringZero.getColumnName()).isEqualTo(CqlIdentifier.cqlId("stringZero"));
assertThat(stringOne.getColumnName()).isEqualTo(CqlIdentifier.cqlId("stringOne"));
assertThat(stringZero.getColumnName().toCql()).isEqualTo("stringzero");
assertThat(stringOne.getColumnName().toCql()).isEqualTo("stringone");
List<CqlIdentifier> names = Arrays.asList(cqlId("stringZero"), cqlId("stringOne"));
CassandraPersistentEntity<?> entity = context.getRequiredPersistentEntity(DefaultComposite.class);
assertThat(entity.getRequiredPersistentProperty("primaryKey").getColumnNames()).isEqualTo(names);
}
@PrimaryKeyClass
public static class DefaultKey implements Serializable {
private static final long serialVersionUID = -1956747638065267667L;
@PrimaryKeyColumn(ordinal = 0, type = PrimaryKeyType.PARTITIONED) String stringZero;
@PrimaryKeyColumn(ordinal = 1) String stringOne;
}
@Table
public static class DefaultComposite {
@PrimaryKey DefaultKey primaryKey;
@Column String aString;
}
@Test
public void testExplicitComposite() {
CassandraPersistentEntity<?> key = context.getRequiredPersistentEntity(ExplicitKey.class);
CassandraPersistentProperty stringZero = key.getRequiredPersistentProperty("stringZero");
CassandraPersistentProperty stringOne = key.getRequiredPersistentProperty("stringOne");
assertThat(stringZero.getColumnName()) //
.isEqualTo(CqlIdentifier.cqlId("TheFirstKeyField", true)) //
.isNotEqualTo(CqlIdentifier.cqlId("TheFirstKeyField"));
assertThat(stringZero.getColumnName().toCql()).isEqualTo("\"" + EXPLICIT_KEY_0 + "\"");
assertThat(stringOne.getColumnName().toCql()).isEqualTo("\"" + EXPLICIT_KEY_1 + "\"");
List<CqlIdentifier> names = Arrays.asList(quotedCqlId(EXPLICIT_KEY_0), quotedCqlId(EXPLICIT_KEY_1));
CassandraPersistentEntity<?> entity = context.getRequiredPersistentEntity(ExplicitComposite.class);
assertThat(entity.getRequiredPersistentProperty("primaryKey").getColumnNames()).isEqualTo(names);
}
@PrimaryKeyClass
public static class ExplicitKey implements Serializable {
private static final long serialVersionUID = -1956747638065267667L;
@PrimaryKeyColumn(ordinal = 0, name = EXPLICIT_KEY_0, forceQuote = true,
type = PrimaryKeyType.PARTITIONED) String stringZero;
@PrimaryKeyColumn(ordinal = 1, name = EXPLICIT_KEY_1, forceQuote = true) String stringOne;
}
@Table
public static class ExplicitComposite {
@PrimaryKey(forceQuote = true) ExplicitKey primaryKey;
@Column(forceQuote = true) String aString;
}
}