public void DataReaderToList_WhenPropertyHasCorrosponingColmunButHasPropertyMap_OnlyUsesPropertyMap()
        {
            var dataReader = new MockDataReader();
            var rootTable = dataReader.AddTable( "IdVal", "Id" );
            dataReader.AddRow( rootTable, 1, 2 );
            dataReader.AddRow( rootTable, 1, DBNull.Value );

            var result = dataReader.DataReaderToList<PropertyMapTest>( typeof( PropertyMapTestConfiguration ) );
        }
        public void DataReaderToList_WithMappingThatSetsVirtualStringProperty_ReturnsList()
        {
            var dataReader = new MockDataReader();
            var table = dataReader.AddTable( "Id" );
            dataReader.AddRow( table, 1 );

            var result = dataReader.DataReaderToList<TestObject>( typeof ( TestObjectConfiguration ) );

            Assert.AreEqual( "Hello World", result[ 0 ].Name );
        }
        public void DataReaderToList_WhenMultipleDictionaryJoins_DoesNotUseSameExpandoObjectMap()
        {
            var dataReader = new MockDataReader();
            var rootTable = dataReader.AddTable( "Id" );
            var users = dataReader.AddTable( "Key", "Value" );
            var places = dataReader.AddTable( "Key", "Value" );

            dataReader.AddRow( rootTable, 1 );

            dataReader.AddRow( users, 1, "User 1" );

            dataReader.AddRow( places, "Place 1", "Location" );

            var result = dataReader.DataReaderToList<WhenMultipleDictionaryJoins>( typeof( WhenMultipleDictionaryJoinsConfiguration ) );
        }
        public void DataReaderToList_WhenUsingConfiguration_ReturnsCorrectResult()
        {
            var dataReader = new MockDataReader();
            var rootTable = dataReader.AddTable( "Name", "Size", "DueDate" );
            var products = dataReader.AddTable( "Id", "Name", "Price", "Available" );
            var stock = dataReader.AddTable( "ProductId", "Id", "Quantity" );
            var ratings = dataReader.AddTable( "ProductId", "Rating" );

            dataReader.AddRow( rootTable, "The Shop", 12, DateTime.Now );
            dataReader.AddRow( products, 1, "Drink", 1.99m, true );
            dataReader.AddRow( products, 2, "Snack", 0.78m, false );
            dataReader.AddRow( stock, 1, 1, 20 );
            dataReader.AddRow( stock, 1, 2, 5 );
            dataReader.AddRow( stock, 2, 3, 0 );
            dataReader.AddRow( ratings, 2, (double)2 );

            var result = dataReader.DataReaderToList<RootTable>( typeof( ShopConfiguration ) );

            Assert.AreEqual( "The Shop", result[ 0 ].Name );
            Assert.AreEqual( 24, result[ 0 ].Size );
            Assert.AreEqual( 2, result[ 0 ].Products.Count );
            Assert.AreEqual( 1, result[ 0 ].Products[ 0 ].Id );
            Assert.AreEqual( "Drink", result[ 0 ].Products[ 0 ].Name );
            Assert.AreEqual( 1.99M, result[ 0 ].Products[ 0 ].Price );
            Assert.AreEqual( true, result[ 0 ].Products[ 0 ].Available );
            Assert.AreEqual( 2, result[ 0 ].Products[ 1 ].Id );
            Assert.AreEqual( "Snack", result[ 0 ].Products[ 1 ].Name );
            Assert.AreEqual( 0.78M, result[ 0 ].Products[ 1 ].Price );
            Assert.AreEqual( false, result[ 0 ].Products[ 1 ].Available );
            Assert.AreEqual( 2, result[ 0 ].Products[ 0 ].Stock.Count );
            Assert.AreEqual( 20, result[ 0 ].Products[ 0 ].Stock[ 1 ] );
            Assert.AreEqual( 5, result[ 0 ].Products[ 0 ].Stock[ 2 ] );
            Assert.AreEqual( 1, result[ 0 ].Products[ 1 ].Stock.Count );
            Assert.AreEqual( 0, result[ 0 ].Products[ 1 ].Stock[ 3 ] );
            Assert.AreEqual( 0, result[ 0 ].Products[ 0 ].ProductRatings.Count );
            Assert.AreEqual( 1, result[ 0 ].Products[ 1 ].ProductRatings.Count );
            Assert.AreEqual( 2, result[ 0 ].Products[ 1 ].ProductRatings[ 0 ].Rating );
        }
        public void DataReaderToList_WithTwoTableJoinsForSameTable_JoinsTables()
        {
            var dataReader = new MockDataReader();
            var rootTable = dataReader.AddTable( "HomeTeamId", "HomeTeamId1", "AwayTeamId" );
            dataReader.AddRow( rootTable, DBNull.Value, 2, 1 );

            var teamTable = dataReader.AddTable( "Id", "Name" );
            dataReader.AddRow( teamTable, 1, "Team A" );
            dataReader.AddRow( teamTable, 2, "Team B" );

            var result = dataReader.DataReaderToList<Score>( typeof( ScoreConfiguration ) );

            Assert.AreEqual( "Team A", result[ 0 ].AwayTeam.Name );
            Assert.AreEqual( "Team B", result[ 0 ].HomeTeam.Name );
        }
        public void DataReaderToList_WithNullablePropertyThatHasAValueOnTheFirstRowAndNullOnTheSecondRow_SetsTheSecondObjectsPropertyToNull()
        {
            var dataReader = new MockDataReader();
            var rootTable = dataReader.AddTable( "Name", "Score" );

            dataReader.AddRow( rootTable, "Team A", (int?)12 );
            dataReader.AddRow( rootTable, "Team B", DBNull.Value );

            var result = dataReader.DataReaderToList<NullableTest>();

            Assert.AreEqual( 12, result[ 0 ].Score );
            Assert.IsNull( result[ 1 ].Score );
        }