public void TestChange()
        {
            var mapperDictionary = new MapperDictionary();
            var mapper = new Mock<IStoredProcedureMapper<FakeObject>>();
            var command = new Mock<IDbCommand>();
            var fakeObject = new FakeObject();
            var fakeConnection = new Mock<IDbConnection>();

            mapper.Setup(m => m.GetUpdateCommand(fakeObject)).Returns(command.Object);
            mapperDictionary.Add(typeof(FakeObject), mapper.Object.GetType());

            var context = new StoredProcedureMappingContext(fakeConnection.Object, mapperDictionary);
            context.Change(fakeObject);
        }
        public void TestFindCollection()
        {
            var mapperDictionary = new MapperDictionary();
            var fakeSearchCriteria = new Mock<IPersistenceCollectionSearcher<FakeObject>>();
            var mapper = new Mock<IStoredProcedureMapper<FakeObject>>();
            var fakeCollection = new Queue<FakeObject>();
            var fakeObject1 = new FakeObject();
            var fakeObject2 = new FakeObject();
            var fakeConnection = new Mock<IDbConnection>();

            fakeCollection.Enqueue(fakeObject1);
            fakeCollection.Enqueue(fakeObject2);

            var fakeReader = new Mock<IDataReader>();
            fakeReader.Setup(r => r.Read())
                .Returns(new Queue<bool>(new[] { true, true, false }).Dequeue);

            var fakeCommand = new Mock<IDbCommand>();
            fakeCommand.Setup(c => c.ExecuteReader()).Returns(fakeReader.Object);

            mapper.Setup(m => m.GetSelectCommand(fakeSearchCriteria.Object)).Returns(fakeCommand.Object);
            mapper.Setup(m => m.PopulateObject(fakeReader.Object)).Returns(fakeCollection.Dequeue);

            mapperDictionary.Add(typeof(FakeObject), mapper.Object.GetType());

            var actual = new StoredProcedureMappingContext(fakeConnection.Object, mapperDictionary).Find<FakeObject>(fakeSearchCriteria.Object);

            Assert.AreEqual(fakeObject1, actual.ElementAt(0));
            Assert.AreEqual(fakeObject2, actual.ElementAt(1));
        }
        public void TestFindSingleObject()
        {
            var mapperDictionary = new MapperDictionary();
            var fakeSearchCriteria = new Mock<IPersistenceSearcher<FakeObject>>();
            var mapper = new Mock<IStoredProcedureMapper<FakeObject>>();
            var fakeConnection = new Mock<IDbConnection>();
            var fakeObject = new FakeObject();
            var fakeReader = new Mock<IDataReader>();
            var readToggle = true;
            fakeReader.Setup(x => x.Read())
                .Returns(() => readToggle)
                .Callback(() => readToggle = false);

            var command = new Mock<IDbCommand>();
            command.Setup(c => c.ExecuteReader(CommandBehavior.SingleRow)).Returns(fakeReader.Object);

            mapper.Setup(m => m.GetSelectCommand(fakeSearchCriteria.Object)).Returns(command.Object);
            mapper.Setup(m => m.PopulateObject(fakeReader.Object)).Returns(fakeObject);
            mapperDictionary.Add(typeof(FakeObject), mapper.Object.GetType());

            var actual = new StoredProcedureMappingContext(fakeConnection.Object, mapperDictionary).Find<FakeObject>(fakeSearchCriteria.Object);

            Assert.AreEqual(fakeObject, actual);
        }