public void inserts_should_be_allowed()
            {
                // Arrange
                deleteTestFiles();
                var configBuilder = new FileRepositoryConfigBuilder(".")
                    .WithFileExtension(TestFileExtension)
                    .WithFileDelimitor(",")
                    .WithFieldQualifier("\"");
                var config = configBuilder.Build();
                var blog = new Blog
                {
                    Title = "Future Time Saver Log",
                    Author = "Gary Brunton",
                    CreatedDate = DateTime.Now
                };

                using (var repo = config.BuildRepository())
                {
                    repo.Insert(blog);
                }

                // Act
                configBuilder = new FileRepositoryConfigBuilder(".")
                    .WithFileExtension(TestFileExtension)
                    .WithFileDelimitor(",")
                    .WithFieldQualifier("\"");
                using (var repo = configBuilder.Build().BuildRepository())
                {
                    repo.Insert(blog);
                }

                // Assert
                IEnumerable<Blog> blogsFromFile;
                configBuilder = new FileRepositoryConfigBuilder(".")
                    .WithFileExtension(TestFileExtension)
                    .WithFileDelimitor(",")
                    .WithFieldQualifier("\"");
                using (var repo = configBuilder.Build().BuildRepository())
                {
                    blogsFromFile = repo.GetAll<Blog>();
                }

                Assert.AreEqual(2, blog.Id);
                Assert.AreEqual(2, blogsFromFile.Count());
                Assert.IsTrue(blogsFromFile.Any(x => x.Id == 1));
                Assert.IsTrue(blogsFromFile.Any(x => x.Id == 2));
            }
            public void the_matching_property_values_should_be_formated_per_the_convention()
            {
                // Arrange
                deleteTestFiles();

                var config = new FileRepositoryConfigBuilder(".")
                    .WithFileExtension(TestFileExtension)
                    .WithFileDelimitor(",")
                    .WithFieldQualifier("\"")
                    .WithOutputConventions(new DateTimeToyyyyMMdd())
                    .Build();
                var blog = new Blog
                {
                    Title = "Future Time Saver Log",
                    Author = "Gary Brunton",
                    CreatedDate = DateTime.Now
                };

                // Act
                using (var repo = config.BuildRepository())
                {
                    repo.Insert(blog);
                }

                File.Copy("Blog" + TestFileExtension, "BlogWithStringOnlyProperties" + TestFileExtension);

                IEnumerable<BlogWithStringOnlyProperties> blogs;
                using (var repo = config.BuildRepository())
                {
                    blogs = repo.GetAll<BlogWithStringOnlyProperties>();
                }

                // Assert
                var fromFile = blogs.Single();
                Assert.AreEqual(blog.Id, fromFile.Id);
                Assert.AreEqual(blog.Title, fromFile.Title);
                Assert.AreEqual(blog.Author, fromFile.Author);
                Assert.AreEqual(blog.CreatedDate.ToString("yyyyMMdd"), fromFile.CreatedDate);
                Assert.AreEqual(blog.ModifiedDate, fromFile.ModifiedDate);
            }
            public void the_entity_can_be_saved_and_retreived_from_the_repository()
            {
                // Arrange
                deleteTestFiles();

                var config = new FileRepositoryConfigBuilder(".")
                    .WithFileExtension(TestFileExtension)
                    .WithFileDelimitor(",")
                    .WithFieldQualifier("\"")
                    .Build();
                var blog = new Blog
                    {
                        Title = "Future Time Saver Log",
                        Author = "Gary Brunton",
                        CreatedDate = DateTime.Now
                    };

                // Act
                using (var repo = config.BuildRepository())
                {
                    repo.Insert(blog);
                }

                IEnumerable<Blog> blogs;
                using (var repo = config.BuildRepository())
                {
                    blogs = repo.GetAll<Blog>();
                }

                // Assert
                var fromFile = blogs.Single();
                Assert.AreEqual(blog.Id, fromFile.Id);
                Assert.AreEqual(blog.Title, fromFile.Title);
                Assert.AreEqual(blog.Author, fromFile.Author);
                Assert.AreEqual(blog.CreatedDate.ToString("MM/dd/yyyy"), fromFile.CreatedDate.ToString("MM/dd/yyyy"));
                Assert.AreEqual(blog.ModifiedDate, fromFile.ModifiedDate);
            }
            public void the_data_can_be_persisted_and_retrieved()
            {
                // Arrange
                deleteTestFiles();

                var config = new FileRepositoryConfigBuilder(".")
                    .WithFileExtension(TestFileExtension)
                    .WithFileDelimitor(",")
                    .WithFieldQualifier("\"")
                    .WithPersistedDataPath(PersistedDatapath)
                    .WithIndexes(new BlogsByAuthorIndex())
                    .Build();
                var blog = new Blog
                {
                    Title = "Future Time Saver Log",
                    Author = "Gary Brunton",
                    CreatedDate = DateTime.Now
                };

                var blogWithStringOnlyProperties = new BlogWithStringOnlyProperties
                {
                    Author = "Simon",
                    CreatedDate = "1/1/2010",
                    Id = 100,
                    ModifiedDate = "2/1/2010",
                    Title = "This is a test"
                };

                // Act
                using (var repo = config.BuildRepository())
                {
                    repo.Insert(blog);
                    repo.Insert(blogWithStringOnlyProperties);
                }

                deleteTestFiles();

                IEnumerable<Blog> blogs;
                IEnumerable<BlogWithStringOnlyProperties> blogsWithStringOnlyProperties;
                using (var repo = config.BuildRepository())
                {
                    blogs = repo.GetAll<Blog>();
                    blogsWithStringOnlyProperties = repo.GetAll<BlogWithStringOnlyProperties>();
                }

                // Assert
                var fromFile = blogs.Single();
                Assert.AreEqual(blog.Id, fromFile.Id);
                Assert.AreEqual(blog.Title, fromFile.Title);
                Assert.AreEqual(blog.Author, fromFile.Author);
                Assert.AreEqual(blog.CreatedDate.ToString("MM/dd/yyyy"), fromFile.CreatedDate.ToString("MM/dd/yyyy"));
                Assert.AreEqual(blog.ModifiedDate, fromFile.ModifiedDate);

                var fromFile2 = blogsWithStringOnlyProperties.Single();
                Assert.AreEqual(blogWithStringOnlyProperties.Id, fromFile2.Id);
                Assert.AreEqual(blogWithStringOnlyProperties.Title, fromFile2.Title);
                Assert.AreEqual(blogWithStringOnlyProperties.Author, fromFile2.Author);
                Assert.AreEqual(blogWithStringOnlyProperties.CreatedDate, fromFile2.CreatedDate);
                Assert.AreEqual(blogWithStringOnlyProperties.ModifiedDate, fromFile2.ModifiedDate);
            }
            public void the_data_can_be_persisted_and_more_data_can_be_inserted_correctly()
            {
                // Arrange
                deleteTestFiles();

                var config = new FileRepositoryConfigBuilder(".")
                    .WithFileExtension(TestFileExtension)
                    .WithFileDelimitor(",")
                    .WithFieldQualifier("\"")
                    .WithPersistedDataPath(PersistedDatapath)
                    .WithIndexes(new BlogsByAuthorIndex())
                    .Build();
                var blog = new Blog
                {
                    Title = "Future Time Saver Log",
                    Author = "Gary Brunton",
                    CreatedDate = DateTime.Now
                };

                using (var repo = config.BuildRepository())
                {
                    repo.Insert(blog);
                }

                // Act
                config = new FileRepositoryConfigBuilder(".")
                    .WithFileExtension(TestFileExtension)
                    .WithFileDelimitor(",")
                    .WithFieldQualifier("\"")
                    .WithPersistedDataPath(PersistedDatapath)
                    .WithIndexes(new BlogsByAuthorIndex())
                    .Build();

                IEnumerable<Blog> blogs;
                using (var repo = config.BuildRepository())
                {
                    repo.Insert(blog);
                    blogs = repo.GetAll<Blog>();
                }

                // Assert
                Assert.AreEqual(2, blogs.Count());

                deleteTestFiles();

                using (var repo = config.BuildRepository())
                {
                    blogs = repo.GetAll<Blog>();
                }

                Assert.AreEqual(2, blogs.Count());
            }
            public void the_data_can_be_persisted_and_a_UniqueIndex_can_be_retrieved()
            {
                // Arrange
                deleteTestFiles();

                var config = new FileRepositoryConfigBuilder(".")
                    .WithFileExtension(TestFileExtension)
                    .WithFileDelimitor(",")
                    .WithFieldQualifier("\"")
                    .WithPersistedDataPath(PersistedDatapath)
                    .WithIndexes(new BlogByIdIndex())
                    .Build();
                var blog = new Blog
                {
                    Title = "Future Time Saver Log",
                    Author = "Gary Brunton",
                    CreatedDate = DateTime.Now
                };

                // Act
                using (var repo = config.BuildRepository())
                {
                    repo.Insert(blog);
                }

                deleteTestFiles();

                Blog blogFromIndex;
                using (var repo = config.BuildRepository())
                {
                    blogFromIndex = repo.GetIndex<BlogByIdIndex>().Get(blog.Id);
                }

                // Assert
                Assert.AreEqual(blog.Id, blogFromIndex.Id);
                Assert.AreEqual(blog.Title, blogFromIndex.Title);
                Assert.AreEqual(blog.Author, blogFromIndex.Author);
                Assert.AreEqual(blog.CreatedDate.ToString("MM/dd/yyyy"), blogFromIndex.CreatedDate.ToString("MM/dd/yyyy"));
                Assert.AreEqual(blog.ModifiedDate, blogFromIndex.ModifiedDate);
            }
            public void empty_strings_can_be_persisted_and_retrieved_as_empty_strings()
            {
                // Arrange
                deleteTestFiles();

                var config = new FileRepositoryConfigBuilder(".")
                    .WithFileExtension(TestFileExtension)
                    .WithFileDelimitor(",")
                    .WithFieldQualifier("\"")
                    .WithPersistedDataPath(PersistedDatapath)
                    .WithIndexes(new BlogsByAuthorIndex())
                    .Build();
                var blog = new Blog
                {
                    Title = null,
                    Author = "",
                    CreatedDate = DateTime.Now
                };

                using (var repo = config.BuildRepository())
                {
                    repo.Insert(blog);
                }

                deleteTestFiles();

                // Act
                Blog blogFromPersistantStore;
                using (var repo = config.BuildRepository())
                {
                    blogFromPersistantStore = repo.GetAll<Blog>().Single();
                }

                // Assert
                Assert.AreEqual(blog.Id, blogFromPersistantStore.Id);
                Assert.AreEqual(blog.Title, blogFromPersistantStore.Title);
                Assert.AreEqual(blog.Author, blogFromPersistantStore.Author);
                Assert.AreEqual(blog.CreatedDate.ToString("MM/dd/yyyy"), blogFromPersistantStore.CreatedDate.ToString("MM/dd/yyyy"));
                Assert.AreEqual(blog.ModifiedDate, blogFromPersistantStore.ModifiedDate);

                Assert.IsTrue(blogFromPersistantStore.Title == null);
                Assert.IsTrue(blogFromPersistantStore.Author == "");
            }