/*
 *  Copyright (c) 2004-2021, University of Oslo
 *  All rights reserved.
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions are met:
 *  Redistributions of source code must retain the above copyright notice, this
 *  list of conditions and the following disclaimer.
 *
 *  Redistributions in binary form must reproduce the above copyright notice,
 *  this list of conditions and the following disclaimer in the documentation
 *  and/or other materials provided with the distribution.
 *  Neither the name of the HISP project nor the names of its contributors may
 *  be used to endorse or promote products derived from this software without
 *  specific prior written permission.
 *
 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 *  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 *  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
 *  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 *  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 *  ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

package org.hisp.dhis.android.testapp.trackedentity.search;

import org.hisp.dhis.android.core.trackedentity.TrackedEntityInstance;
import org.hisp.dhis.android.core.trackedentity.search.TrackedEntityInstanceQueryRepositoryScope;
import org.hisp.dhis.android.core.utils.integration.mock.BaseMockIntegrationTestFullDispatcher;
import org.hisp.dhis.android.core.utils.runner.D2JunitRunner;
import org.junit.Test;
import org.junit.runner.RunWith;

import java.util.List;

import static com.google.common.truth.Truth.assertThat;

@RunWith(D2JunitRunner.class)
public class TrackedEntityInstanceQueryCollectionRepositoryMockIntegrationShould
        extends BaseMockIntegrationTestFullDispatcher {

    @Test
    public void find_by_program() {
        List<TrackedEntityInstance> trackedEntityInstances =
                d2.trackedEntityModule().trackedEntityInstanceQuery()
                        .byProgram().eq("lxAQ7Zs9VYR")
                        .blockingGet();

        assertThat(trackedEntityInstances.size()).isEqualTo(2);
    }

    @Test
    public void find_uids_by_program() {
        List<String> trackedEntityInstanceUids =
                d2.trackedEntityModule().trackedEntityInstanceQuery()
                        .byProgram().eq("lxAQ7Zs9VYR")
                        .blockingGetUids();

        assertThat(trackedEntityInstanceUids.size()).isEqualTo(2);
    }

    @Test
    public void get_scope() {
        TrackedEntityInstanceQueryRepositoryScope scope =
                d2.trackedEntityModule().trackedEntityInstanceQuery().getScope();

        assertThat(scope.attribute()).isNotNull();
    }
}

@@ -1630,24 +1630,82 @@
 ty.search;%0A%0A
+import org.hisp.dhis.android.core.arch.helpers.DateUtils;%0A
 import org.h
@@ -1763,16 +1763,16 @@
 stance;%0A
-
 import o
@@ -2072,24 +2072,80 @@
 r.RunWith;%0A%0A
+import java.text.ParseException;%0Aimport java.util.Date;%0A
 import java.
@@ -2991,24 +2991,24 @@
 GetUids();%0A%0A
-
         asse
@@ -3061,32 +3061,1185 @@
 alTo(2);%0A    %7D%0A%0A
+    @Test%0A    public void find_by_enrollment_date() throws ParseException %7B%0A        Date refDate = DateUtils.DATE_FORMAT.parse(%222017-01-20T00:00:00.000%22);%0A%0A        List%3CTrackedEntityInstance%3E trackedEntityInstances =%0A                d2.trackedEntityModule().trackedEntityInstanceQuery()%0A                        .byProgram().eq(%22lxAQ7Zs9VYR%22)%0A                        .byProgramDate().afterOrEqual(refDate)%0A                        .byProgramDate().beforeOrEqual(refDate)%0A                        .blockingGet();%0A%0A        assertThat(trackedEntityInstances.size()).isEqualTo(1);%0A    %7D%0A%0A    @Test%0A    public void find_by_event_date() throws ParseException %7B%0A        Date refDate = DateUtils.DATE_FORMAT.parse(%222017-01-20T00:00:00.000%22);%0A%0A        List%3CTrackedEntityInstance%3E trackedEntityInstances =%0A                d2.trackedEntityModule().trackedEntityInstanceQuery()%0A                        .byProgram().eq(%22lxAQ7Zs9VYR%22)%0A                        .byEventDate().afterOrEqual(refDate)%0A                        .byEventDate().beforeOrEqual(refDate)%0A                        .blockingGet();%0A%0A        assertThat(trackedEntityInstances.size()).isEqualTo(1);%0A    %7D%0A%0A
     @Test%0A    pu

Add failing test