/* * Copyright (C) 2012-2015 DataStax Inc. * * 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 com.datastax.driver.mapping; import com.datastax.driver.core.CCMConfig; import com.datastax.driver.core.CCMTestsSupport; import com.datastax.driver.core.TestUtils; import com.datastax.driver.core.utils.CassandraVersion; import com.datastax.driver.mapping.annotations.*; import com.google.common.base.Objects; import org.testng.annotations.Test; import static com.datastax.driver.core.Metadata.quote; import static org.assertj.core.api.Assertions.assertThat; @CCMConfig(createKeyspace = false) @CassandraVersion("2.1.0") public class MapperCaseSensitivityTest extends CCMTestsSupport { static final String KS = "ks_MapperCaseSensitivityTest"; static final String TABLE = "table_MapperCaseSensitivityTest"; static final String TYPE = "udt_MapperCaseSensitivityTest"; UserNoKeyspace user = new UserNoKeyspace("id", new Address("street", "zip")); @Table(keyspace = KS, name = TABLE, caseSensitiveKeyspace = true, caseSensitiveTable = true) static class User { @PartitionKey @Column(name = "userId", caseSensitive = true) private String userId; @Column(name = "Address", caseSensitive = true) private Address address; public User() { } public User(String userId, Address address) { this.userId = userId; this.address = address; } public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || !(o instanceof User)) return false; User user = (User) o; return Objects.equal(userId, user.userId) && Objects.equal(address, user.address); } @Override public int hashCode() { return Objects.hashCode(userId, address); } } @UDT(keyspace = KS, name = TYPE, caseSensitiveKeyspace = true, caseSensitiveType = true) static class Address { @Field(name = "Street", caseSensitive = true) private String street; @Field(name = "zipCode", caseSensitive = true) private String zipCode; public Address() { } public Address(String street, String zipCode) { this.street = street; this.zipCode = zipCode; } public String getStreet() { return street; } public void setStreet(String street) { this.street = street; } public String getZipCode() { return zipCode; } public void setZipCode(String zipCode) { this.zipCode = zipCode; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || !(o instanceof Address)) return false; Address address = (Address) o; return Objects.equal(street, address.street) && Objects.equal(zipCode, address.zipCode); } @Override public int hashCode() { return Objects.hashCode(getStreet(), getZipCode()); } } @Table(name = TABLE, caseSensitiveKeyspace = true, caseSensitiveTable = true) static class UserNoKeyspace extends User { public UserNoKeyspace() { } public UserNoKeyspace(String id, Address address) { super(id, address); } } @Override public void onTestContextInitialized() { execute(String.format(TestUtils.CREATE_KEYSPACE_SIMPLE_FORMAT, quote(KS), 1)); useKeyspace(quote(KS)); execute( "CREATE TYPE " + quote(TYPE) + " (\"Street\" text, \"zipCode\" text)", "CREATE TABLE " + quote(TABLE) + " (\"userId\" text PRIMARY KEY, \"Address\" frozen<" + quote(TYPE) + ">)"); } /** * Validates that case sensitive identifiers for fields, types, columns, tables and keyspaces work with the mapper * when the keyspace name is specified on the mapped class. * * @jira_ticket JAVA-564 * @test_category object_mapper */ @Test(groups = "short") public void should_handle_case_sensitive_identifiers_when_keyspace_specified() throws Exception { MappingManager mappingManager = new MappingManager(session()); Mapper<User> mapper = mappingManager.mapper(User.class); mapper.save(user); assertThat(mapper.get(user.getUserId())).isEqualTo(user); } /** * Validates that case sensitive identifiers for fields, types, columns, tables and keyspaces work with the mapper * when the keyspace name is *not* specified on the mapped class. * * @jira_ticket JAVA-564 * @test_category object_mapper */ @Test(groups = "short") public void should_handle_case_sensitive_identifiers_without_keyspace_specified() throws Exception { MappingManager mappingManager = new MappingManager(session()); Mapper<UserNoKeyspace> mapper = mappingManager.mapper(UserNoKeyspace.class); mapper.save(user); assertThat(mapper.get(user.getUserId())).isEqualTo(user); } }