public void UpdateRequest()
        {
            var originalRequest = CreateRequestInRepository(DateTime.Now.Date, "Testdescription", 12.75);
            var persistentId    = originalRequest.PersistentId;

            PersistenceHandler.ClearReceivedCalls();

            var newData = new RequestEntityData
            {
                Date        = new DateTime(2013, 7, 6),
                Description = "New Description",
                Value       = 11.11
            };

            Repository.UpdateRequest(persistentId, newData);

            var queriedRequest = Repository.QueryRequest(persistentId);

            Assert.That(queriedRequest.Description, Is.EqualTo("New Description"));
            Assert.That(queriedRequest.Value, Is.EqualTo(11.11));

            PersistenceHandler.Received(1).SaveChanges(Arg.Is <SavingTask>(t => t.RequestsToUpdate.Count == 1 &&
                                                                           t.CategoriesToUpdate.Count == 0 &&
                                                                           t.EntitiesToDelete.Count == 0 &&
                                                                           t.StandingOrdersToUpdate.Count == 0 &&
                                                                           t.FilePath == DatabaseFile));
        }
        public void CreateCategory()
        {
            var persistentId = Repository.CreateCategory("My Category");

            var createdRequest = Repository.QueryAllCategories().Single(c => c.PersistentId == persistentId);

            Assert.That(createdRequest.PersistentId, Is.EqualTo(persistentId));
            Assert.That(createdRequest.Name, Is.EqualTo("My Category"));

            PersistenceHandler.Received(1).SaveChanges(Arg.Is <SavingTask>(t => t.RequestsToUpdate.Count == 0 &&
                                                                           t.CategoriesToUpdate.Count == 1 &&
                                                                           t.EntitiesToDelete.Count == 0 &&
                                                                           t.StandingOrdersToUpdate.Count == 0 &&
                                                                           t.FilePath == DatabaseFile));
        }
        public void DeleteRequest()
        {
            CreateRequestsInRepository(new[] { new DateTime(2014, 1, 1) }, new[] { 10 });

            var allRequestIdsBeforeDelete   = Repository.QueryRequestsForSingleMonth(2014, 1).Select(r => r.PersistentId).ToArray();
            var requestPersistentIdToDelete = allRequestIdsBeforeDelete.First();

            Repository.DeleteRequest(requestPersistentIdToDelete);

            var persistentIdsAfterDelete = Repository.QueryRequestsForSingleMonth(2014, 1).Select(r => r.PersistentId).ToArray();

            Assert.That(persistentIdsAfterDelete.Length, Is.EqualTo(9));
            CollectionAssert.AreEquivalent(allRequestIdsBeforeDelete.Except(new[] { requestPersistentIdToDelete }), persistentIdsAfterDelete);

            PersistenceHandler.Received(1).SaveChanges(Arg.Is <SavingTask>(t => t.RequestsToUpdate.Count == 0 &&
                                                                           t.CategoriesToUpdate.Count == 0 &&
                                                                           t.EntitiesToDelete.Count == 1 &&
                                                                           t.StandingOrdersToUpdate.Count == 0 &&
                                                                           t.FilePath == DatabaseFile));
        }
        public void DeleteCategory()
        {
            CreateCategoriesInRepository(5);

            var allCategoryIdsBeforeDelete   = Repository.QueryAllCategories().Select(c => c.PersistentId).ToArray();
            var categoryPersistentIdToDelete = allCategoryIdsBeforeDelete.First();

            Repository.DeleteCategory(categoryPersistentIdToDelete);

            var persistentIdsAfterDelete = Repository.QueryAllCategories().Select(c => c.PersistentId).ToArray();

            Assert.That(persistentIdsAfterDelete.Length, Is.EqualTo(9));
            CollectionAssert.AreEquivalent(allCategoryIdsBeforeDelete.Except(new[] { categoryPersistentIdToDelete }), persistentIdsAfterDelete);

            PersistenceHandler.Received(1).SaveChanges(Arg.Is <SavingTask>(t => t.RequestsToUpdate.Count == 0 &&
                                                                           t.CategoriesToUpdate.Count == 0 &&
                                                                           t.EntitiesToDelete.Count == 1 &&
                                                                           t.StandingOrdersToUpdate.Count == 0 &&
                                                                           t.FilePath == DatabaseFile));
        }
        public void UpdateStandingOrdersToCurrentMonth()
        {
            Context.Now.Returns(new DateTime(2015, 8, 6));
            var start = Context.Now.AddMonths(-6);

            Repository.CreateStandingOrder(new StandingOrderEntityData
            {
                Description     = "Description1",
                FirstBookDate   = start,
                MonthPeriodStep = 1,
                ReferenceDay    = 6,
                ReferenceMonth  = start.Month,
                Value           = 55.70
            });
            PersistenceHandler.ClearReceivedCalls();

            var requestIds = Repository.UpdateStandingOrdersToCurrentMonth(2015, 8);

            var requests = Repository.AllRequests.OrderBy(r => r.Date).ToArray();

            Assert.That(requests.Length, Is.EqualTo(7));
            var monthIndex = 0;

            foreach (var request in requests)
            {
                Assert.That(request.Category, Is.Null);
                Assert.That(request.Description, Is.EqualTo("Description1"));
                Assert.That(request.Value, Is.EqualTo(55.70));
                Assert.That(request.Date, Is.EqualTo(new DateTime(2015, 2 + monthIndex, 6)));
                monthIndex++;
            }

            PersistenceHandler.Received(1).SaveChanges(Arg.Is <SavingTask>(t => t.RequestsToUpdate.Count == 7 &&
                                                                           t.CategoriesToUpdate.Count == 0 &&
                                                                           t.EntitiesToDelete.Count == 0 &&
                                                                           t.StandingOrdersToUpdate.Count == 1 &&
                                                                           t.FilePath == DatabaseFile));

            Assert.That(requestIds.Length, Is.EqualTo(7));
            CollectionAssert.AreEquivalent(requestIds, requests.Select(r => r.PersistentId).ToArray());
        }
        public void UpdateCategory()
        {
            var originalCategory = new CategoryEntityImp {
                Name = "Category"
            };
            var persistentId = originalCategory.PersistentId;

            Repository.AddCategory(originalCategory);
            Repository.UpdateCategory(persistentId, "New Category Name");

            var categoryQueried = Repository.QueryCategory(persistentId);

            Assert.That(categoryQueried.PersistentId, Is.EqualTo(persistentId));
            Assert.That(categoryQueried.Name, Is.EqualTo("New Category Name"));

            PersistenceHandler.Received(1).SaveChanges(Arg.Is <SavingTask>(t => t.RequestsToUpdate.Count == 0 &&
                                                                           t.CategoriesToUpdate.Count == 1 &&
                                                                           t.EntitiesToDelete.Count == 0 &&
                                                                           t.StandingOrdersToUpdate.Count == 0 &&
                                                                           t.FilePath == DatabaseFile));
        }
        public void CreateRequest(bool withCategory)
        {
            CreateCategoriesInRepository(3);
            CreateRequestsInRepository(new[] { new DateTime(2014, 1, 1) }, new[] { 10 });

            var categoryEntity = Repository.QueryAllCategories().First();
            var requestData    = new RequestEntityData
            {
                Date                 = new DateTime(2014, 6, 1),
                Description          = "My Description",
                Value                = -11,
                CategoryPersistentId = withCategory ? categoryEntity.PersistentId : null
            };

            PersistenceHandler.ClearReceivedCalls();
            var persistentId = Repository.CreateRequest(requestData);

            var createdRequest = Repository.QueryRequest(persistentId);

            Assert.That(createdRequest.PersistentId, Is.EqualTo(persistentId));
            Assert.That(createdRequest.Description, Is.EqualTo(requestData.Description));
            Assert.That(createdRequest.Value, Is.EqualTo(requestData.Value));

            if (withCategory)
            {
                Assert.That(createdRequest.Category.PersistentId, Is.EqualTo(categoryEntity.PersistentId));
            }
            else
            {
                Assert.That(createdRequest.Category, Is.Null);
            }

            PersistenceHandler.Received(1).SaveChanges(Arg.Is <SavingTask>(t => t.RequestsToUpdate.Count == 1 &&
                                                                           t.CategoriesToUpdate.Count == 0 &&
                                                                           t.EntitiesToDelete.Count == 0 &&
                                                                           t.StandingOrdersToUpdate.Count == 0 &&
                                                                           t.FilePath == DatabaseFile));
        }
        public void DeleteCategoryReferencedByRequestRemovesCategoryFromRequest()
        {
            var category = new CategoryEntityImp {
                Name = "My Category"
            };

            Repository.AddCategory(category);

            var request = CreateRequestInRepository(DateTime.Now, "Test", 12.0);

            request.Category = category;

            PersistenceHandler.ClearReceivedCalls();

            Repository.DeleteCategory(category.PersistentId);
            Assert.That(request.Category, Is.Null);

            PersistenceHandler.Received(1).SaveChanges(Arg.Is <SavingTask>(t => t.RequestsToUpdate.Count == 1 &&
                                                                           t.CategoriesToUpdate.Count == 0 &&
                                                                           t.EntitiesToDelete.Count == 1 &&
                                                                           t.StandingOrdersToUpdate.Count == 0 &&
                                                                           t.FilePath == DatabaseFile));
        }