// Path: src/main/java/com/lsoftware/playdoh/exception/FixtureNotFoundException.java
// public class FixtureNotFoundException extends PlaydohException {
// 
//     public FixtureNotFoundException(String fixtureName) {
//         super("Can't find " + fixtureName + " fixture on classpath");
//     }
// }
// 
// Path: src/test/java/com/lsoftware/playdoh/objects/models/ClassWithoutFixture.java
// public class ClassWithoutFixture {
// }
// 
// Path: src/test/java/com/lsoftware/playdoh/objects/models/NestedDummy.java
// public class NestedDummy {
// 
//     private int intValue;
// 
//     private String stringValue;
// 
//     NestedDummy(int intValue, String stringValue) {
//         this.intValue = intValue;
//         this.stringValue = stringValue;
//     }
// 
//     NestedDummy(){}
// 
//     public int getIntValue() {
//         return intValue;
//     }
// 
//     public void setIntValue(int intValue) {
//         this.intValue = intValue;
//     }
// 
//     public String getStringValue() {
//         return stringValue;
//     }
// 
//     public void setStringValue(String stringValue) {
//         this.stringValue = stringValue;
//     }
// 
//     @Override
//     public String toString() {
//         return "NestedDummy{" +
//                 "intValue=" + intValue +
//                 ", stringValue='" + stringValue + '\'' +
//                 '}';
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (!(o instanceof NestedDummy)) return false;
// 
//         NestedDummy that = (NestedDummy) o;
// 
//         if (intValue != that.intValue) return false;
//         return !(stringValue != null ? !stringValue.equals(that.stringValue) : that.stringValue != null);
// 
//     }
// 
//     @Override
//     public int hashCode() {
//         int result = intValue;
//         result = 31 * result + (stringValue != null ? stringValue.hashCode() : 0);
//         return result;
//     }
// }
// 
// Path: src/test/java/com/lsoftware/playdoh/objects/models/User.java
// public class User {
// 
//     private String name;
//     private String email;
//     private int age;
// 
//     public User() {
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public String getEmail() {
//         return email;
//     }
// 
//     public void setEmail(String email) {
//         this.email = email;
//     }
// 
//     public int getAge() {
//         return age;
//     }
// 
//     public void setAge(int age) {
//         this.age = age;
//     }
// 
//     @Override
//     public String toString() {
//         return "User{" +
//                 "name='" + name + '\'' +
//                 ", email='" + email + '\'' +
//                 ", age=" + age +
//                 '}';
//     }
// }
// 
// Path: src/main/java/com/lsoftware/playdoh/util/FileUtils.java
// public class FileUtils {
// 
//     public InputStream readFileFromClasspath(String filename) throws FileNotFoundException {
//         InputStream in = FileUtils.class.getClassLoader().getResourceAsStream(filename);
// 
//         if(in == null) {
//             throw new FileNotFoundException("Can't find file " + filename);
//         }
// 
//         return in;
//     }
// }


import com.lsoftware.playdoh.exception.FixtureNotFoundException;
import com.lsoftware.playdoh.objects.models.ClassWithoutFixture;
import com.lsoftware.playdoh.objects.models.NestedDummy;
import com.lsoftware.playdoh.objects.models.User;
import com.lsoftware.playdoh.util.FileUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Matchers;
import org.mockito.Mockito;
import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.constructor.ConstructorException;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.Map;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.*;
    private void configureFileUtilsMock() throws FileNotFoundException {
        mockFileUtils = mock(FileUtils.class);
        reader.setFileUtils(mockFileUtils);
    }

    private void mockFileUtilsToReturnFileInputStream(String filename) throws FileNotFoundException {
        InputStream inputStream = getClass().getClassLoader().getResourceAsStream(filename);
        assertNotNull(inputStream);

        when(mockFileUtils.readFileFromClasspath(eq(filename))).thenReturn(inputStream);
    }

    @After
    public void tearDown() {
        Mockito.reset(mockFileUtils);
    }

    @Test
    public void testYamlReaderSearchFileWithNameOfClass() throws FileNotFoundException {
        mockFileUtilsToReturnFileInputStream(USERS_YAML_FILE);

        reader.read(User.class);

        verify(mockFileUtils, times(1)).readFileFromClasspath(eq(USERS_YAML_FILE));
    }

    @Test
    public void testYamlReaderSearchFileWithComposedNameAsSnakeCase() throws FileNotFoundException {
        mockFileUtilsToReturnFileInputStream("nested_dummy.yml");

// Path: src/main/java/com/lsoftware/playdoh/exception/FixtureNotFoundException.java
// public class FixtureNotFoundException extends PlaydohException {
// 
//     public FixtureNotFoundException(String fixtureName) {
//         super("Can't find " + fixtureName + " fixture on classpath");
//     }
// }
// 
// Path: src/test/java/com/lsoftware/playdoh/objects/models/ClassWithoutFixture.java
// public class ClassWithoutFixture {
// }
// 
// Path: src/test/java/com/lsoftware/playdoh/objects/models/NestedDummy.java
// public class NestedDummy {
// 
//     private int intValue;
// 
//     private String stringValue;
// 
//     NestedDummy(int intValue, String stringValue) {
//         this.intValue = intValue;
//         this.stringValue = stringValue;
//     }
// 
//     NestedDummy(){}
// 
//     public int getIntValue() {
//         return intValue;
//     }
// 
//     public void setIntValue(int intValue) {
//         this.intValue = intValue;
//     }
// 
//     public String getStringValue() {
//         return stringValue;
//     }
// 
//     public void setStringValue(String stringValue) {
//         this.stringValue = stringValue;
//     }
// 
//     @Override
//     public String toString() {
//         return "NestedDummy{" +
//                 "intValue=" + intValue +
//                 ", stringValue='" + stringValue + '\'' +
//                 '}';
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (!(o instanceof NestedDummy)) return false;
// 
//         NestedDummy that = (NestedDummy) o;
// 
//         if (intValue != that.intValue) return false;
//         return !(stringValue != null ? !stringValue.equals(that.stringValue) : that.stringValue != null);
// 
//     }
// 
//     @Override
//     public int hashCode() {
//         int result = intValue;
//         result = 31 * result + (stringValue != null ? stringValue.hashCode() : 0);
//         return result;
//     }
// }
// 
// Path: src/test/java/com/lsoftware/playdoh/objects/models/User.java
// public class User {
// 
//     private String name;
//     private String email;
//     private int age;
// 
//     public User() {
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public String getEmail() {
//         return email;
//     }
// 
//     public void setEmail(String email) {
//         this.email = email;
//     }
// 
//     public int getAge() {
//         return age;
//     }
// 
//     public void setAge(int age) {
//         this.age = age;
//     }
// 
//     @Override
//     public String toString() {
//         return "User{" +
//                 "name='" + name + '\'' +
//                 ", email='" + email + '\'' +
//                 ", age=" + age +
//                 '}';
//     }
// }
// 
// Path: src/main/java/com/lsoftware/playdoh/util/FileUtils.java
// public class FileUtils {
// 
//     public InputStream readFileFromClasspath(String filename) throws FileNotFoundException {
//         InputStream in = FileUtils.class.getClassLoader().getResourceAsStream(filename);
// 
//         if(in == null) {
//             throw new FileNotFoundException("Can't find file " + filename);
//         }
// 
//         return in;
//     }
// }


// Path: src/test/java/com/lsoftware/playdoh/reader/YamlModelReaderTest.java
import com.lsoftware.playdoh.exception.FixtureNotFoundException;
import com.lsoftware.playdoh.objects.models.ClassWithoutFixture;
import com.lsoftware.playdoh.objects.models.NestedDummy;
import com.lsoftware.playdoh.objects.models.User;
import com.lsoftware.playdoh.util.FileUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Matchers;
import org.mockito.Mockito;
import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.constructor.ConstructorException;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.Map;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.*;

    private void configureFileUtilsMock() throws FileNotFoundException {
        mockFileUtils = mock(FileUtils.class);
        reader.setFileUtils(mockFileUtils);
    }

    private void mockFileUtilsToReturnFileInputStream(String filename) throws FileNotFoundException {
        InputStream inputStream = getClass().getClassLoader().getResourceAsStream(filename);
        assertNotNull(inputStream);

        when(mockFileUtils.readFileFromClasspath(eq(filename))).thenReturn(inputStream);
    }

    @After
    public void tearDown() {
        Mockito.reset(mockFileUtils);
    }

    @Test
    public void testYamlReaderSearchFileWithNameOfClass() throws FileNotFoundException {
        mockFileUtilsToReturnFileInputStream(USERS_YAML_FILE);

        reader.read(User.class);

        verify(mockFileUtils, times(1)).readFileFromClasspath(eq(USERS_YAML_FILE));
    }

    @Test
    public void testYamlReaderSearchFileWithComposedNameAsSnakeCase() throws FileNotFoundException {
        mockFileUtilsToReturnFileInputStream("nested_dummy.yml");

        reader.read(NestedDummy.class);