/*
* Copyright (c) 2016 Couchbase, 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.couchbase.client.java.view;
import com.couchbase.client.java.SerializationHelper;
import com.couchbase.client.java.document.JsonDocument;
import com.couchbase.client.java.document.RawJsonDocument;
import com.couchbase.client.java.document.json.JsonArray;
import org.junit.Test;
import static junit.framework.TestCase.assertTrue;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
/**
* Verifies the functionality of a {@link SpatialViewQuery}.
*
* @author Michael Nitschinger
* @since 2.1.0
*/
public class SpatialViewQueryTest {
@Test
public void shouldSetDefaults() {
SpatialViewQuery query = SpatialViewQuery.from("design", "view");
assertEquals("design", query.getDesign());
assertEquals("view", query.getView());
assertFalse(query.isDevelopment());
assertTrue(query.toString().isEmpty());
}
@Test
public void shouldSetStartRange() {
SpatialViewQuery query = SpatialViewQuery.from("design", "view").startRange(JsonArray.from(5.87, 47.27, 1000));
assertEquals("start_range=[5.87,47.27,1000]", query.toString());
}
@Test
public void shouldSetEndRange() {
SpatialViewQuery query = SpatialViewQuery.from("design", "view").endRange(JsonArray.from(15.04, 55.06, null));
assertEquals("end_range=[15.04,55.06,null]", query.toString());
}
@Test
public void shouldSetRange() {
SpatialViewQuery query = SpatialViewQuery.from("design", "view")
.range(JsonArray.from(null, null, 1000), JsonArray.from(null, null, 2000));
assertEquals("start_range=[null,null,1000]&end_range=[null,null,2000]", query.toString());
}
@Test
public void shouldLimit() {
SpatialViewQuery query = SpatialViewQuery.from("design", "view").limit(10);
assertEquals("limit=10", query.toString());
}
@Test
public void shouldSkip() {
SpatialViewQuery query = SpatialViewQuery.from("design", "view").skip(3);
assertEquals("skip=3", query.toString());
}
@Test
public void shouldSetStale() {
SpatialViewQuery query = SpatialViewQuery.from("design", "view").stale(Stale.FALSE);
assertEquals("stale=false", query.toString());
query = SpatialViewQuery.from("design", "view").stale(Stale.TRUE);
assertEquals("stale=ok", query.toString());
query = SpatialViewQuery.from("design", "view").stale(Stale.UPDATE_AFTER);
assertEquals("stale=update_after", query.toString());
}
@Test
public void shouldSetOnError() {
SpatialViewQuery query = SpatialViewQuery.from("design", "view").onError(OnError.CONTINUE);
assertEquals("on_error=continue", query.toString());
query = SpatialViewQuery.from("design", "view").onError(OnError.STOP);
assertEquals("on_error=stop", query.toString());
}
@Test
public void shouldSetDebug() {
SpatialViewQuery query = SpatialViewQuery.from("design", "view").debug();
assertEquals("debug=true", query.toString());
query = SpatialViewQuery.from("design", "view").debug(false);
assertEquals("debug=false", query.toString());
}
@Test(expected = IllegalArgumentException.class)
public void shouldDisallowNegativeLimit() {
SpatialViewQuery.from("design", "view").limit(-1);
}
@Test(expected = IllegalArgumentException.class)
public void shouldDisallowNegativeSkip() {
SpatialViewQuery.from("design", "view").skip(-1);
}
@Test
public void shouldToggleDevelopment() {
SpatialViewQuery query = SpatialViewQuery.from("design", "view").development(true);
assertTrue(query.isDevelopment());
query = SpatialViewQuery.from("design", "view").development(false);
assertFalse(query.isDevelopment());
}
@Test
public void shouldSupportSerialization() throws Exception {
SpatialViewQuery query = SpatialViewQuery.from("design", "view")
.debug()
.development();
byte[] serialized = SerializationHelper.serializeToBytes(query);
assertNotNull(serialized);
SpatialViewQuery deserialized = SerializationHelper.deserializeFromBytes(serialized, SpatialViewQuery.class);
assertEquals(query, deserialized);
}
@Test
public void shouldIncludeDocs() {
SpatialViewQuery query = SpatialViewQuery.from("design", "view").includeDocs();
assertTrue(query.isIncludeDocs());
assertEquals(JsonDocument.class, query.includeDocsTarget());
query = SpatialViewQuery.from("design", "view").includeDocs(JsonDocument.class);
assertTrue(query.isIncludeDocs());
assertEquals(JsonDocument.class, query.includeDocsTarget());
query = SpatialViewQuery.from("design", "view");
assertFalse(query.isIncludeDocs());
assertNull(query.includeDocsTarget());
query = SpatialViewQuery.from("design", "view").includeDocs(false, RawJsonDocument.class);
assertFalse(query.isIncludeDocs());
assertEquals(RawJsonDocument.class, query.includeDocsTarget());
}
}