// Path: main-kata/src/main/java/kata/domain/PersonList.java
// public class PersonList
//         extends PersonListAbstract
// {
// 	public PersonList()
// 	{
// 		super();
// 	}
// 
// 	public PersonList(int initialSize)
// 	{
// 		super(initialSize);
// 	}
// 
// 	public PersonList(Collection c)
// 	{
// 		super(c);
// 	}
// 
// 	public PersonList(Operation operation)
// 	{
// 		super(operation);
// 	}
// }
// 
// Path: mini-kata/src/main/java/kata/domain/PetList.java
// public class PetList extends PetListAbstract
// {
//     public PetList()
//     {
//         super();
//     }
// 
//     public PetList(int initialSize)
//     {
//         super(initialSize);
//     }
// 
//     public PetList(Collection c)
//     {
//         super(c);
//     }
// 
//     public PetList(Operation operation)
//     {
//         super(operation);
//     }
// 
//     /**
//      * For each element in the list, print out petName() + " plays".
//      */
//     public void play()
//     {
//         throw new UnsupportedOperationException("Implement this as a part of kata.testExercise4Test.makePetsPlay");
//     }
// }
// 
// Path: mini-kata/src/main/java/kata/domain/PetType.java
// public class PetType extends PetTypeAbstract
// {
//     public static final int CAT_ID = 1;
//     public static final int DOG_ID = 2;
//     public static final int SNAKE_ID = 3;
//     public static final int BIRD_ID = 4;
//     public static final int TURTLE_ID = 5;
//     public static final int HAMSTER_ID = 6;
// 
//     public PetType()
//     {
//         super();
//         // You must not modify this constructor. Mithra calls this internally.
//         // You can call this constructor. You can also add new constructors.
//     }
// }


import com.gs.fw.common.mithra.MithraManagerProvider;
import com.gs.fw.finder.Navigation;
import kata.domain.PersonList;
import kata.domain.PetFinder;
import kata.domain.PetList;
import kata.domain.PetType;
import org.eclipse.collections.impl.factory.Lists;
import org.eclipse.collections.impl.factory.Sets;
import org.eclipse.collections.impl.test.Verify;
import org.junit.Assert;
import org.junit.Test;
    {
        PersonList dogLovers = null;
        Verify.assertSize(2, dogLovers);
    }

    /**
     * The relationship is one {@link kata.domain.Person} to many {@link kata.domain.Pet}s, many {@link kata.domain.Pet}s to one {@link PetType}.
     * Since there are three relationships the minimum database hits are 3.
     * Use appropriate method on {@link kata.domain.PersonFinder} and Reladomo's {@code deepFetch} property.
     *
     * @see PersonList#deepFetch(Navigation)
     */
    @Test
    public void getAllObjectsInMinDatabaseHits()
    {
        int minDatabaseHits = 3;
        PersonList people = null;

        Verify.assertSize(8, people);

        int databaseHitsAfterPeopleFetch = MithraManagerProvider.getMithraManager().getDatabaseRetrieveCount();

        for (int i = 0; i < people.size(); i++)
        {
            PetList pets = people.getPersonAt(i).getPets();
            int databaseHitsAfterPetFetch = MithraManagerProvider.getMithraManager().getDatabaseRetrieveCount();
            Assert.assertEquals(databaseHitsAfterPeopleFetch, databaseHitsAfterPetFetch);

            for (int j = 0; j < pets.size(); j++)
            {
// Path: main-kata/src/main/java/kata/domain/PersonList.java
// public class PersonList
//         extends PersonListAbstract
// {
// 	public PersonList()
// 	{
// 		super();
// 	}
// 
// 	public PersonList(int initialSize)
// 	{
// 		super(initialSize);
// 	}
// 
// 	public PersonList(Collection c)
// 	{
// 		super(c);
// 	}
// 
// 	public PersonList(Operation operation)
// 	{
// 		super(operation);
// 	}
// }
// 
// Path: mini-kata/src/main/java/kata/domain/PetList.java
// public class PetList extends PetListAbstract
// {
//     public PetList()
//     {
//         super();
//     }
// 
//     public PetList(int initialSize)
//     {
//         super(initialSize);
//     }
// 
//     public PetList(Collection c)
//     {
//         super(c);
//     }
// 
//     public PetList(Operation operation)
//     {
//         super(operation);
//     }
// 
//     /**
//      * For each element in the list, print out petName() + " plays".
//      */
//     public void play()
//     {
//         throw new UnsupportedOperationException("Implement this as a part of kata.testExercise4Test.makePetsPlay");
//     }
// }
// 
// Path: mini-kata/src/main/java/kata/domain/PetType.java
// public class PetType extends PetTypeAbstract
// {
//     public static final int CAT_ID = 1;
//     public static final int DOG_ID = 2;
//     public static final int SNAKE_ID = 3;
//     public static final int BIRD_ID = 4;
//     public static final int TURTLE_ID = 5;
//     public static final int HAMSTER_ID = 6;
// 
//     public PetType()
//     {
//         super();
//         // You must not modify this constructor. Mithra calls this internally.
//         // You can call this constructor. You can also add new constructors.
//     }
// }


// Path: mini-kata/src/test/java/kata/test/Exercise2Test.java
import com.gs.fw.common.mithra.MithraManagerProvider;
import com.gs.fw.finder.Navigation;
import kata.domain.PersonList;
import kata.domain.PetFinder;
import kata.domain.PetList;
import kata.domain.PetType;
import org.eclipse.collections.impl.factory.Lists;
import org.eclipse.collections.impl.factory.Sets;
import org.eclipse.collections.impl.test.Verify;
import org.junit.Assert;
import org.junit.Test;

    {
        PersonList dogLovers = null;
        Verify.assertSize(2, dogLovers);
    }

    /**
     * The relationship is one {@link kata.domain.Person} to many {@link kata.domain.Pet}s, many {@link kata.domain.Pet}s to one {@link PetType}.
     * Since there are three relationships the minimum database hits are 3.
     * Use appropriate method on {@link kata.domain.PersonFinder} and Reladomo's {@code deepFetch} property.
     *
     * @see PersonList#deepFetch(Navigation)
     */
    @Test
    public void getAllObjectsInMinDatabaseHits()
    {
        int minDatabaseHits = 3;
        PersonList people = null;

        Verify.assertSize(8, people);

        int databaseHitsAfterPeopleFetch = MithraManagerProvider.getMithraManager().getDatabaseRetrieveCount();

        for (int i = 0; i < people.size(); i++)
        {
            PetList pets = people.getPersonAt(i).getPets();
            int databaseHitsAfterPetFetch = MithraManagerProvider.getMithraManager().getDatabaseRetrieveCount();
            Assert.assertEquals(databaseHitsAfterPeopleFetch, databaseHitsAfterPetFetch);

            for (int j = 0; j < pets.size(); j++)
            {
                PetType petType = pets.getPetAt(j).getPetType();