Example #1
0
        public void GetTestResult_records_error_if_save_returns_null([Frozen] IDataConnection session,
                                                                     IGetsTransaction tranFactory,
                                                                     IPersister persister,
                                                                     [Frozen] ITransaction tran,
                                                                     [Frozen, NoRecursion] SampleEntity entity,
                                                                     [NoAutoProperties] PersistenceTestSpec <SampleEntity> spec)
        {
            var sut = new PersistenceTester <SampleEntity>(spec);

            Mock.Get(spec.SessionProvider).Setup(x => x.GetConnection()).Returns(session);
            Mock.Get(session)
            .Setup(x => x.GetTransactionFactory())
            .Returns(tranFactory);
            Mock.Get(tranFactory)
            .Setup(x => x.GetTransaction())
            .Returns(tran);
            Mock.Get(session).Setup(x => x.GetPersister()).Returns(persister);
            Mock.Get(persister)
            .Setup(x => x.Add(entity, null))
            .Returns(() => null);

            var result = sut.GetTestResult();

            Assert.That(result?.SaveException, Is.InstanceOf <InvalidOperationException>());
        }
Example #2
0
        public void GetTestResult_records_error_if_retrieval_raises_an_exception([Frozen] IDataConnection session,
                                                                                 IGetsTransaction tranFactory,
                                                                                 [Frozen] ITransaction tran,
                                                                                 [Frozen, NoRecursion] SampleEntity entity,
                                                                                 IPersister persister,
                                                                                 IQuery query,
                                                                                 [NoAutoProperties] PersistenceTestSpec <SampleEntity> spec,
                                                                                 object id)
        {
            var sut = new PersistenceTester <SampleEntity>(spec);

            Mock.Get(spec.SessionProvider).Setup(x => x.GetConnection()).Returns(session);
            Mock.Get(session)
            .Setup(x => x.GetTransactionFactory())
            .Returns(tranFactory);
            Mock.Get(tranFactory)
            .Setup(x => x.GetTransaction())
            .Returns(tran);
            Mock.Get(session).Setup(x => x.GetPersister()).Returns(persister);
            Mock.Get(session).Setup(x => x.GetQuery()).Returns(query);
            Mock.Get(persister)
            .Setup(x => x.Add(entity, null))
            .Returns(id);

            Mock.Get(query)
            .Setup(x => x.Get <SampleEntity>(id))
            .Throws <ApplicationException>();

            var result = sut.GetTestResult();

            Assert.That(result?.ComparisonException, Is.InstanceOf <ApplicationException>());
        }
Example #3
0
        public void GetTestResult_saves_the_entity_within_a_transaction([Frozen] IDataConnection session,
                                                                        IGetsTransaction tranFactory,
                                                                        IPersister persister,
                                                                        [Frozen] ITransaction tran,
                                                                        [Frozen, NoRecursion] SampleEntity entity,
                                                                        [NoAutoProperties] PersistenceTestSpec <SampleEntity> spec,
                                                                        object id)
        {
            bool transactionOpen = false;

            var sut = new PersistenceTester <SampleEntity>(spec);

            Mock.Get(spec.SessionProvider).Setup(x => x.GetConnection()).Returns(session);
            Mock.Get(session)
            .Setup(x => x.GetTransactionFactory())
            .Returns(tranFactory);
            Mock.Get(tranFactory)
            .Setup(x => x.GetTransaction())
            .Callback(() => transactionOpen = true)
            .Returns(tran);
            Mock.Get(session).Setup(x => x.GetPersister()).Returns(persister);
            Mock.Get(persister)
            .Setup(x => x.Add(entity, null))
            .Callback(() => Assert.That(transactionOpen, Is.True, "The save operation must occur whilst the transaction is open"))
            .Returns(id);
            Mock.Get(tran)
            .Setup(x => x.Dispose())
            .Callback(() => transactionOpen = false);

            sut.GetTestResult();

            Mock.Get(persister).Verify(x => x.Add(entity, null), Times.Once);
        }
        public void GetTestResult_evicts_the_entity_retrieves_it_and_compares_it([Frozen] ISession session,
                                                                                 [Frozen] ITransaction tran,
                                                                                 [Frozen, NoRecursion] SampleEntity entity,
                                                                                 [NoAutoProperties] PersistenceTestSpec <SampleEntity> spec,
                                                                                 object id)
        {
            var evicted = false;

            var sut = new PersistenceTester <SampleEntity>(spec);

            Mock.Get(spec.SessionProvider).Setup(x => x.GetSession()).Returns(session);
            Mock.Get(session)
            .Setup(x => x.BeginTransaction())
            .Returns(tran);
            Mock.Get(session)
            .Setup(x => x.Save(entity))
            .Returns(id);
            Mock.Get(session)
            .Setup(x => x.Evict(entity))
            .Callback(() => evicted = true);

            var retrievedEntity = new SampleEntity();

            Mock.Get(session)
            .Setup(x => x.Get <SampleEntity>(id))
            .Returns(() => evicted? retrievedEntity : entity);

            sut.GetTestResult();

            Mock.Get(spec.EqualityRule).Verify(x => x.GetEqualityResult(entity, retrievedEntity), Times.Once);
        }
Example #5
0
        public void GetTestResult_records_error_for_setup_action_if_it_throws([Frozen, NoRecursion] SampleEntity entity,
                                                                              PersistenceTestSpec <SampleEntity> spec)
        {
            spec.Setup = session =>
            {
                throw new InvalidOperationException("Sample exception");
            };
            var sut = new PersistenceTester <SampleEntity>(spec);

            var result = sut.GetTestResult();

            Assert.That(result?.SetupException, Is.InstanceOf <InvalidOperationException>());
            Assert.That(result?.SetupException?.Message, Is.EqualTo("Sample exception"));
        }
Example #6
0
        public void GetTestResult_executes_setup_action_if_it_was_provided([Frozen, NoRecursion] SampleEntity entity,
                                                                           PersistenceTestSpec <SampleEntity> spec)
        {
            bool executed = false;

            spec.Setup = session =>
            {
                executed = true;
            };
            var sut = new PersistenceTester <SampleEntity>(spec);

            sut.GetTestResult();

            Assert.That(executed, Is.True);
        }
Example #7
0
        PersistenceTestResult WithEqualityRule(IGetsEqualityResult <T> equalityRule)
        {
            if (equalityRule == null)
            {
                throw new ArgumentNullException(nameof(equalityRule));
            }

            var spec = new PersistenceTestSpec <T>(SessionProvider, Entity, equalityRule)
            {
                Setup = Setup
            };

            using (var tester = testerFactory(spec))
            {
                return(tester.GetTestResult());
            }
        }
        public void WithEqualityRule_uses_rule_in_spec(IGetsEqualityResult <SampleEntity> equalityRule,
                                                       IGetsSession sessionProvider,
                                                       [NoRecursion] SampleEntity entity,
                                                       ITestsPersistence <SampleEntity> tester)
        {
            Mock.Get(tester).Setup(x => x.GetTestResult()).Returns(() => null);
            PersistenceTestSpec <SampleEntity> specification = null;
            var builder = new PersistenceTestBuilder <SampleEntity>(sessionProvider, entity, null, spec =>
            {
                specification = spec;
                return(tester);
            });
            var sut = AsComparerChooser(builder);

            sut.WithEqualityRule(equalityRule);

            Assert.That(specification?.EqualityRule, Is.SameAs(equalityRule));
        }
        public void WithEqualityRule_can_configure_a_rule(IEqualityComparer <string> comparer,
                                                          IGetsSession sessionProvider,
                                                          [NoRecursion] SampleEntity entity,
                                                          ITestsPersistence <SampleEntity> tester)
        {
            Mock.Get(tester).Setup(x => x.GetTestResult()).Returns(() => null);
            PersistenceTestSpec <SampleEntity> specification = null;
            var builder = new PersistenceTestBuilder <SampleEntity>(sessionProvider, entity, null, spec =>
            {
                specification = spec;
                return(tester);
            });
            var sut = AsComparerChooser(builder);

            sut.WithEqualityRule(b => b.ForProperty(x => x.StringProperty, c => c.UsingComparer(comparer)));
            specification?.EqualityRule?.GetEqualityResult(entity, entity);

            Mock.Get(comparer)
            .Verify(x => x.Equals(entity.StringProperty, entity.StringProperty), Times.Once);
        }
Example #10
0
        public void GetTestResult_evicts_the_entity_retrieves_it_and_compares_it([Frozen] IDataConnection session,
                                                                                 IGetsTransaction tranFactory,
                                                                                 [Frozen] ITransaction tran,
                                                                                 IPersister persister,
                                                                                 IQuery query,
                                                                                 [Frozen, NoRecursion] SampleEntity entity,
                                                                                 [NoAutoProperties] PersistenceTestSpec <SampleEntity> spec,
                                                                                 object id)
        {
            var evicted = false;

            var sut = new PersistenceTester <SampleEntity>(spec);

            Mock.Get(spec.SessionProvider).Setup(x => x.GetConnection()).Returns(session);
            Mock.Get(session)
            .Setup(x => x.GetTransactionFactory())
            .Returns(tranFactory);
            Mock.Get(tranFactory)
            .Setup(x => x.GetTransaction())
            .Returns(tran);
            Mock.Get(session).Setup(x => x.GetPersister()).Returns(persister);
            Mock.Get(session).Setup(x => x.GetQuery()).Returns(query);
            Mock.Get(persister)
            .Setup(x => x.Add(entity, null))
            .Returns(id);
            Mock.Get(session)
            .Setup(x => x.EvictFromCache(entity))
            .Callback(() => evicted = true);

            var retrievedEntity = new SampleEntity();

            Mock.Get(query)
            .Setup(x => x.Get <SampleEntity>(id))
            .Returns(() => evicted? retrievedEntity : entity);

            sut.GetTestResult();

            Mock.Get(spec.EqualityRule).Verify(x => x.GetEqualityResult(entity, retrievedEntity), Times.Once);
        }
        public void WithEqualityComparer_uses_comparer_in_spec(IEqualityComparer <SampleEntity> comparer,
                                                               IGetsSession sessionProvider,
                                                               [NoRecursion] SampleEntity entity,
                                                               ITestsPersistence <SampleEntity> tester)
        {
            Mock.Get(tester).Setup(x => x.GetTestResult()).Returns(() => null);
            PersistenceTestSpec <SampleEntity> specification = null;
            var builder = new PersistenceTestBuilder <SampleEntity>(sessionProvider, entity, null, spec =>
            {
                specification = spec;
                return(tester);
            });
            var sut = AsComparerChooser(builder);

            // Select the comparer and then execute the rule from the spec
            // so that the comparer should be executed with it
            sut.WithEqualityComparer(comparer);
            specification?.EqualityRule?.GetEqualityResult(entity, entity);

            Mock.Get(comparer)
            .Verify(x => x.Equals(entity, entity), Times.Once);
        }
        public void GetTestResult_records_error_if_retrieval_raises_an_exception([Frozen] ISession session,
                                                                                 [Frozen] ITransaction tran,
                                                                                 [Frozen, NoRecursion] SampleEntity entity,
                                                                                 [NoAutoProperties] PersistenceTestSpec <SampleEntity> spec,
                                                                                 object id)
        {
            var sut = new PersistenceTester <SampleEntity>(spec);

            Mock.Get(spec.SessionProvider).Setup(x => x.GetSession()).Returns(session);
            Mock.Get(session)
            .Setup(x => x.BeginTransaction())
            .Returns(tran);
            Mock.Get(session)
            .Setup(x => x.Save(entity))
            .Returns(id);

            Mock.Get(session)
            .Setup(x => x.Get <SampleEntity>(id))
            .Throws <ApplicationException>();

            var result = sut.GetTestResult();

            Assert.That(result?.ComparisonException, Is.InstanceOf <ApplicationException>());
        }
Example #13
0
        public void GetTestResult_does_not_record_error_for_setup_action_if_it_was_not_provided([Frozen, NoRecursion] SampleEntity entity,
                                                                                                [NoAutoProperties] PersistenceTestSpec <SampleEntity> spec)
        {
            var sut = new PersistenceTester <SampleEntity>(spec);

            var result = sut.GetTestResult();

            Assert.That(result?.SetupException, Is.Null);
        }