public void CreateForMultiTimestampLookup() { var expectedSelectedColumns1 = new[] { StoragePropertyDefinitionTestHelper.GetIDColumnDefinition(_tableDefinition1.ObjectIDProperty), StoragePropertyDefinitionTestHelper.GetClassIDColumnDefinition(_tableDefinition1.ObjectIDProperty), StoragePropertyDefinitionTestHelper.GetSingleColumn(_tableDefinition1.TimestampProperty) }; var expectedComparedColumns1 = new ColumnValueTable( new[] { StoragePropertyDefinitionTestHelper.GetIDColumnDefinition(_tableDefinition1.ObjectIDProperty) }, new[] { new ColumnValueTable.Row(new[] { _objectID1.Value }), new ColumnValueTable.Row(new[] { _objectID2.Value }), }); _dbCommandBuilderFactoryStrictMock .Expect( mock => mock.CreateForSelect( Arg.Is(_tableDefinition1), Arg <IEnumerable <ColumnDefinition> > .List.Equal(expectedSelectedColumns1), Arg <ColumnValueTable> .Matches(t => ColumnValueTableTestHelper.AreEqual(expectedComparedColumns1, t)), Arg <IEnumerable <OrderedColumn> > .List.Equal(new OrderedColumn[0]))) .Return(_dbCommandBuilder1Stub); var expectedSelectedColumns2 = new[] { StoragePropertyDefinitionTestHelper.GetIDColumnDefinition(_tableDefinition2.ObjectIDProperty), StoragePropertyDefinitionTestHelper.GetClassIDColumnDefinition(_tableDefinition2.ObjectIDProperty), StoragePropertyDefinitionTestHelper.GetSingleColumn(_tableDefinition2.TimestampProperty) }; var expectedComparedColumns2 = new[] { new ColumnValue(StoragePropertyDefinitionTestHelper.GetIDColumnDefinition(_tableDefinition2.ObjectIDProperty), _objectID3.Value) }; _dbCommandBuilderFactoryStrictMock .Expect( mock => mock.CreateForSelect( Arg.Is(_tableDefinition2), Arg <IEnumerable <ColumnDefinition> > .List.Equal(expectedSelectedColumns2), Arg <IEnumerable <ColumnValue> > .List.Equal(expectedComparedColumns2), Arg <IEnumerable <OrderedColumn> > .List.Equal(new OrderedColumn[0]))) .Return(_dbCommandBuilder2Stub); _dbCommandBuilderFactoryStrictMock.Replay(); _objectReaderFactoryStrictMock .Expect( mock => mock.CreateTimestampReader( Arg.Is(_tableDefinition1), Arg <IEnumerable <ColumnDefinition> > .List.Equal(expectedSelectedColumns1))) .Return(_timestampReader1Stub); _objectReaderFactoryStrictMock .Expect( mock => mock.CreateTimestampReader( Arg.Is(_tableDefinition2), Arg <IEnumerable <ColumnDefinition> > .List.Equal(expectedSelectedColumns2))) .Return(_timestampReader2Stub); _objectReaderFactoryStrictMock.Replay(); var result = _factory.CreateForMultiTimestampLookup(new[] { _objectID1, _objectID2, _objectID3 }); _objectReaderFactoryStrictMock.VerifyAllExpectations(); _dbCommandBuilderFactoryStrictMock.VerifyAllExpectations(); var innerCommand = CheckDelegateBasedCommandAndReturnInnerCommand <IEnumerable <Tuple <ObjectID, object> >, IEnumerable <ObjectLookupResult <object> > > (result); Assert.That(innerCommand, Is.TypeOf(typeof(MultiObjectLoadCommand <Tuple <ObjectID, object> >))); var commandBuildersAndReaders = ((MultiObjectLoadCommand <Tuple <ObjectID, object> >)innerCommand).DbCommandBuildersAndReaders; Assert.That(commandBuildersAndReaders.Length, Is.EqualTo(2)); Assert.That(commandBuildersAndReaders[0].Item1, Is.SameAs(_dbCommandBuilder1Stub)); Assert.That(commandBuildersAndReaders[0].Item2, Is.SameAs(_timestampReader1Stub)); Assert.That(commandBuildersAndReaders[1].Item1, Is.SameAs(_dbCommandBuilder2Stub)); Assert.That(commandBuildersAndReaders[1].Item2, Is.SameAs(_timestampReader2Stub)); }
public void CreateForSortedMultiIDLookup_TableDefinition_MultipleIDLookup_AndMultipleTables() { var expectedSelectedColumns1 = _tableDefinition1.GetAllColumns(); var expectedComparedColumns1 = new ColumnValueTable( new[] { StoragePropertyDefinitionTestHelper.GetIDColumnDefinition(_tableDefinition1.ObjectIDProperty) }, new[] { new ColumnValueTable.Row(new[] { _objectID1.Value }), new ColumnValueTable.Row(new[] { _objectID2.Value }), }); _dbCommandBuilderFactoryStrictMock .Expect( stub => stub.CreateForSelect( Arg.Is(_tableDefinition1), Arg <IEnumerable <ColumnDefinition> > .List.Equal(expectedSelectedColumns1), Arg <ColumnValueTable> .Matches(t => ColumnValueTableTestHelper.AreEqual(expectedComparedColumns1, t)), Arg <IEnumerable <OrderedColumn> > .List.Equal(new OrderedColumn[0]))) .Return(_dbCommandBuilder1Stub); var expectedSelectedColumns2 = _tableDefinition2.GetAllColumns(); var expectedComparedColumns2 = new[] { new ColumnValue(StoragePropertyDefinitionTestHelper.GetIDColumnDefinition(_tableDefinition2.ObjectIDProperty), _objectID3.Value) }; _dbCommandBuilderFactoryStrictMock .Expect( stub => stub.CreateForSelect( Arg.Is(_tableDefinition2), Arg <IEnumerable <ColumnDefinition> > .List.Equal(_tableDefinition2.GetAllColumns()), Arg <IEnumerable <ColumnValue> > .List.Equal(expectedComparedColumns2), Arg <IEnumerable <OrderedColumn> > .List.Equal(new OrderedColumn[0]))) .Return(_dbCommandBuilder2Stub); _dbCommandBuilderFactoryStrictMock.Replay(); _objectReaderFactoryStrictMock .Expect( mock => mock.CreateDataContainerReader( Arg.Is((IRdbmsStorageEntityDefinition)_tableDefinition1), Arg <IEnumerable <ColumnDefinition> > .List.Equal(expectedSelectedColumns1))) .Return(_dataContainerReader1Stub); _objectReaderFactoryStrictMock .Expect( mock => mock.CreateDataContainerReader( Arg.Is((IRdbmsStorageEntityDefinition)_tableDefinition2), Arg <IEnumerable <ColumnDefinition> > .List.Equal(expectedSelectedColumns2))) .Return(_dataContainerReader2Stub); _objectReaderFactoryStrictMock.Replay(); var result = _factory.CreateForSortedMultiIDLookup(new[] { _objectID1, _objectID2, _objectID3 }); _objectReaderFactoryStrictMock.VerifyAllExpectations(); _dbCommandBuilderFactoryStrictMock.VerifyAllExpectations(); Assert.That(result, Is.TypeOf(typeof(MultiDataContainerAssociateWithIDsCommand))); Assert.That(((MultiDataContainerAssociateWithIDsCommand)result).Command, Is.TypeOf(typeof(MultiObjectLoadCommand <DataContainer>))); var dbCommandBuilderTuples = ((MultiObjectLoadCommand <DataContainer>)((MultiDataContainerAssociateWithIDsCommand)result).Command).DbCommandBuildersAndReaders; Assert.That(dbCommandBuilderTuples.Length, Is.EqualTo(2)); // Convert to Dictionary because the order of tuples is not defined var dbCommandBuilderDictionary = dbCommandBuilderTuples.ToDictionary(tuple => tuple.Item1, tuple => tuple.Item2); Assert.That(dbCommandBuilderDictionary.ContainsKey(_dbCommandBuilder1Stub), Is.True); Assert.That(dbCommandBuilderDictionary[_dbCommandBuilder1Stub], Is.SameAs(_dataContainerReader1Stub)); Assert.That(dbCommandBuilderDictionary.ContainsKey(_dbCommandBuilder2Stub), Is.True); Assert.That(dbCommandBuilderDictionary[_dbCommandBuilder2Stub], Is.SameAs(_dataContainerReader2Stub)); }