Package org.mongolink.domain.criteria

Source Code of org.mongolink.domain.criteria.TestsCriteria

/*
* MongoLink, Object Document Mapper for Java and MongoDB
*
* Copyright (c) 2012, Arpinum or third-party contributors as
* indicated by the @author tags
*
* MongoLink is free software: you can redistribute it and/or modify
* it under the terms of the Lesser GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* MongoLink is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* Lesser GNU General Public License for more details.
*
* You should have received a copy of the Lesser GNU General Public License
* along with MongoLink.  If not, see <http://www.gnu.org/licenses/>.
*
*/

package org.mongolink.domain.criteria;

import com.google.common.collect.Lists;
import com.mongodb.*;
import org.joda.time.DateTime;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.mongolink.domain.query.CursorParameter;
import org.mongolink.domain.query.QueryExecutor;

import java.util.*;

import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.*;

public class TestsCriteria {

    @Test
    public void canTestEquality() {
        final Criteria criteria = new Criteria(mock(QueryExecutor.class));
        criteria.add(Restrictions.equals("id", "test"));

        DBObject query = criteria.createQuery();

        assertThat(query, notNullValue());
        assertThat(query.get("id"), is((Object) "test"));
    }

    @Test
    public void canTestMultipleEquality() {
        final Criteria criteria = new Criteria(mock(QueryExecutor.class));
        criteria.add(Restrictions.equals("id", "test"));
        criteria.add(Restrictions.equals("toto", "tata"));

        DBObject query = criteria.createQuery();

        assertThat(query, notNullValue());
        assertThat(query.get("id"), is((Object) "test"));
        assertThat(query.get("toto"), is((Object) "tata"));
    }

    @Test
    public void canTestBetween() {
        final Criteria criteria = new Criteria(mock(QueryExecutor.class));
        criteria.add(Restrictions.between("date", 1, 2));

        DBObject query = criteria.createQuery();

        DBObject restriction = (DBObject) query.get("date");
        assertThat(restriction, notNullValue());
        assertThat(restriction.get("$gte"), is((Object) 1));
        assertThat(restriction.get("$lt"), is((Object) 2));
    }

    @Test
    public void canUseConverterInEq() {
        final Criteria criteria = new Criteria(mock(QueryExecutor.class));
        final DateTime date = new DateTime();
        criteria.add(Restrictions.equals("date", date));

        DBObject query = criteria.createQuery();

        assertThat(query, notNullValue());
        assertThat(query.get("date"), is((Object) date.getMillis()));
    }

    @Test
    public void canUseConverterInBetween() {
        final Criteria criteria = new Criteria(mock(QueryExecutor.class));
        final DateTime date = new DateTime();
        criteria.add(Restrictions.between("date", date, date));

        DBObject query = criteria.createQuery();

        DBObject restriction = (DBObject) query.get("date");
        assertThat(restriction, notNullValue());
        assertThat(restriction.get("$gte"), is((Object) date.getMillis()));
        assertThat(restriction.get("$lt"), is((Object) date.getMillis()));
    }

    @Test
    public void canGiveLimitAndSkip() {
        final QueryExecutor executor = mock(QueryExecutor.class);
        final Criteria criteria = new Criteria(executor);
        criteria.limit(10);
        criteria.skip(3);

        criteria.list();

        final ArgumentCaptor<CursorParameter> captor = ArgumentCaptor.forClass(CursorParameter.class);
        verify(executor).execute(any(DBObject.class), captor.capture());
        final CursorParameter cursorParameter = captor.getValue();
        assertThat(cursorParameter.getLimit(), is(10));
        assertThat(cursorParameter.getSkip(), is(3));
    }

    @Test
    public void canSort() {
        final QueryExecutor executor = mock(QueryExecutor.class);
        final Criteria criteria = new Criteria(executor);
        criteria.sort("field", Order.ASCENDING);

        criteria.list();

        final ArgumentCaptor<CursorParameter> captor = ArgumentCaptor.forClass(CursorParameter.class);
        verify(executor).execute(any(DBObject.class), captor.capture());
        final CursorParameter cursorParameter = captor.getValue();
        final BasicDBObject sortQuery = cursorParameter.getSort();
        assertTrue(sortQuery.containsKey((Object) "field"));
        assertTrue(sortQuery.get("field").equals(1));
    }

    @Test
    public void TestInequality() {
        final Criteria criteria = new Criteria(mock(QueryExecutor.class));
        criteria.add(Restrictions.notEquals("text", "value"));

        DBObject query = criteria.createQuery();

        DBObject restriction = (DBObject) query.get("text");
        assertThat(restriction, notNullValue());
        assertThat(restriction.get("$ne"), is((Object) "value"));
    }

    @Test
    public void canTestGreaterThanOrEqualTo() {
        final Criteria criteria = new Criteria(mock(QueryExecutor.class));
        criteria.add(Restrictions.greaterThanOrEqualTo("date", 1));

        DBObject query = criteria.createQuery();

        DBObject restriction = (DBObject) query.get("date");
        assertThat(restriction, notNullValue());
        assertThat(restriction.get("$gte"), is((Object) 1));
    }

    @Test
    public void canTestEqualityWithRegex() {
        final Criteria criteria = new Criteria(mock(QueryExecutor.class));
        criteria.add(Restrictions.equalsToRegex("date", "regex"));

        DBObject query = criteria.createQuery();

        DBObject restriction = (DBObject) query.get("date");
        assertThat(restriction, notNullValue());
        assertThat(restriction.get("$regex"), is((Object) "regex"));
    }

    @Test
    public void canUseInOperator() {
        final Criteria criteria = new Criteria(mock(QueryExecutor.class));
        List<Object> tokens = Lists.newArrayList();
        tokens.add("blue");
        tokens.add("");
        criteria.add(Restrictions.in("colors", tokens));

        DBObject query = criteria.createQuery();

        DBObject restriction = (DBObject) query.get("colors");
        assertThat(restriction, notNullValue());
        final BasicDBList objects = new BasicDBList();
        objects.add("blue");
        objects.add("");
        assertThat(restriction.get("$in"), is((Object) objects));
    }

    @Test
    public void canUseInOperatorWithUUID() {
        final Criteria criteria = new Criteria(mock(QueryExecutor.class));
        List<Object> tokens = Lists.newArrayList();
        final UUID uuid = UUID.randomUUID();
        tokens.add(uuid);
        criteria.add(Restrictions.in("colors", tokens));

        DBObject query = criteria.createQuery();

        DBObject restriction = (DBObject) query.get("colors");
        assertThat(restriction, notNullValue());
        final BasicDBList objects = new BasicDBList();
        objects.add(uuid);
        assertThat(restriction.get("$in"), is((Object) objects));
    }
}
TOP

Related Classes of org.mongolink.domain.criteria.TestsCriteria

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.