/*
* Copyright 2014-2015 Marius Volkhart
*
* 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.
*
* Original at https://gist.github.com/MariusVolkhart/3e2374b5fdbefad17d56
*/
package com.truckmuncher.app.data.sql;
import org.junit.Test;
import static org.assertj.core.api.Assertions.assertThat;
public class WhereClauseTest {
@Test
public void operator_values_are_correct() {
assertThat(WhereClause.Operator.EQUALS).isEqualTo("=");
assertThat(WhereClause.Operator.NOT_EQUALS).isEqualTo("!=");
assertThat(WhereClause.Operator.GREATER_THAN).isEqualTo(">");
assertThat(WhereClause.Operator.LESS_THAN).isEqualTo("<");
assertThat(WhereClause.Operator.GREATER_THAN_EQUALS).isEqualTo(">=");
assertThat(WhereClause.Operator.LESS_THAN_EQUALS).isEqualTo("<=");
assertThat(WhereClause.Operator.LIKE).isEqualTo(" LIKE ");
assertThat(WhereClause.Operator.IS).isEqualTo(" IS ");
assertThat(WhereClause.Operator.IS_NOT).isEqualTo(" IS NOT ");
}
@Test
public void where_boolean_is_true() {
WhereClause whereClause = new WhereClause.Builder()
.where("isDirty", WhereClause.Operator.EQUALS, true)
.build();
assertThat(whereClause.selection).isEqualTo("isDirty=?");
assertThat(whereClause.selectionArgs).containsExactly("1");
}
@Test
public void where_boolean_is_false() {
WhereClause whereClause = new WhereClause.Builder()
.where("isDirty", WhereClause.Operator.EQUALS, false)
.build();
assertThat(whereClause.selection).isEqualTo("isDirty=?");
assertThat(whereClause.selectionArgs).containsExactly("0");
}
@Test
public void where_integer() {
WhereClause whereClause = new WhereClause.Builder()
.where("age", WhereClause.Operator.EQUALS, 23)
.build();
assertThat(whereClause.selection).isEqualTo("age=?");
assertThat(whereClause.selectionArgs).containsExactly("23");
}
@Test
public void where_long() {
WhereClause whereClause = new WhereClause.Builder()
.where("id", WhereClause.Operator.EQUALS, Long.MAX_VALUE)
.build();
assertThat(whereClause.selection).isEqualTo("id=?");
assertThat(whereClause.selectionArgs).containsExactly(Long.toString(Long.MAX_VALUE));
}
@Test
public void where_float() {
WhereClause whereClause = new WhereClause.Builder()
.where("price", WhereClause.Operator.EQUALS, 9.99f)
.build();
assertThat(whereClause.selection).isEqualTo("price=?");
assertThat(whereClause.selectionArgs).containsExactly("9.99");
}
@Test
public void where_double() {
WhereClause whereClause = new WhereClause.Builder()
.where("price", WhereClause.Operator.EQUALS, 9.99)
.build();
assertThat(whereClause.selection).isEqualTo("price=?");
assertThat(whereClause.selectionArgs).containsExactly("9.99");
}
@Test
public void where_string() {
WhereClause whereClause = new WhereClause.Builder()
.where("name", WhereClause.Operator.EQUALS, "John")
.build();
assertThat(whereClause.selection).isEqualTo("name=?");
assertThat(whereClause.selectionArgs).containsExactly("John");
}
@Test
public void and() {
WhereClause whereClause = new WhereClause.Builder()
.where("first_name", WhereClause.Operator.EQUALS, "John")
.and()
.where("last_name", WhereClause.Operator.EQUALS, "Doe")
.build();
assertThat(whereClause.selection).isEqualTo("first_name=? AND last_name=?");
assertThat(whereClause.selectionArgs).containsExactly("John", "Doe");
}
@Test
public void or() {
WhereClause whereClause = new WhereClause.Builder()
.where("first_name", WhereClause.Operator.EQUALS, "John")
.or()
.where("first_name", WhereClause.Operator.EQUALS, "Jane")
.build();
assertThat(whereClause.selection).isEqualTo("first_name=? OR first_name=?");
assertThat(whereClause.selectionArgs).containsExactly("John", "Jane");
}
@Test
public void implicit_and_on_multiple_wheres() {
WhereClause whereClause = new WhereClause.Builder()
.where("first_name", WhereClause.Operator.EQUALS, "John")
.where("last_name", WhereClause.Operator.EQUALS, "Doe")
.build();
assertThat(whereClause.selection).isEqualTo("first_name=? AND last_name=?");
assertThat(whereClause.selectionArgs).containsExactly("John", "Doe");
}
@Test
public void nested_whereClause() {
WhereClause john = new WhereClause.Builder()
.where("first_name", WhereClause.Operator.EQUALS, "John")
.where("last_name", WhereClause.Operator.EQUALS, "Doe")
.build();
WhereClause jane = new WhereClause.Builder()
.where("first_name", WhereClause.Operator.EQUALS, "Jane")
.where("last_name", WhereClause.Operator.EQUALS, "Doe")
.build();
WhereClause whereClause = new WhereClause.Builder()
.where(john)
.or()
.where(jane)
.build();
assertThat(whereClause.selection).isEqualTo("(first_name=? AND last_name=?) OR (first_name=? AND last_name=?)");
assertThat(whereClause.selectionArgs).containsExactly("John", "Doe", "Jane", "Doe");
}
@Test
public void toStringUsesCorrectClassName() {
assertThat(new WhereClause.Builder().build().toString()).startsWith("WhereClause");
}
}