Ejemplo n.º 1
0
        public void SetUp()
        {
            _storageProviderID         = "DefaultStorageProvider";
            _storageProviderDefinition = new UnitTestStorageProviderStubDefinition(_storageProviderID);
            _infrastructureStoragePropertyDefinitionProviderMock = MockRepository.GenerateStrictMock <IInfrastructureStoragePropertyDefinitionProvider>();
            _storagePropertyDefinitionResolverMock = MockRepository.GenerateStrictMock <IStoragePropertyDefinitionResolver>();
            _storageNameProviderMock = MockRepository.GenerateStrictMock <IStorageNameProvider>();
            _foreignKeyConstraintDefinitionFactoryMock = MockRepository.GenerateStrictMock <IForeignKeyConstraintDefinitionFactory>();
            _factory = new RdbmsStorageEntityDefinitionFactory(
                _infrastructureStoragePropertyDefinitionProviderMock,
                _foreignKeyConstraintDefinitionFactoryMock,
                _storagePropertyDefinitionResolverMock,
                _storageNameProviderMock,
                _storageProviderDefinition);
            _testModel = new RdbmsPersistenceModelLoaderTestHelper();

            _fakeObjectIDStorageProperty  = ObjectIDStoragePropertyDefinitionObjectMother.ObjectIDProperty;
            _fakeStorageProperty1         = SimpleStoragePropertyDefinitionObjectMother.CreateStorageProperty("Test1");
            _fakeTimestampStorageProperty = SimpleStoragePropertyDefinitionObjectMother.TimestampProperty;

            _fakeForeignKeyConstraint = new ForeignKeyConstraintDefinition(
                "FakeForeignKeyConstraint",
                new EntityNameDefinition(null, "Test"),
                new[] { StoragePropertyDefinitionTestHelper.GetIDColumnDefinition(_fakeObjectIDStorageProperty) },
                new[] { _fakeStorageProperty1.ColumnDefinition });
        }
Ejemplo n.º 2
0
        public void CreateTableDefinition()
        {
            _storagePropertyDefinitionResolverMock
            .Expect(mock => mock.GetStoragePropertiesForHierarchy(_testModel.TableClassDefinition1))
            .Return(new[] { _fakeStorageProperty1 });
            _storagePropertyDefinitionResolverMock.Replay();

            _foreignKeyConstraintDefinitionFactoryMock
            .Expect(mock => mock.CreateForeignKeyConstraints(_testModel.TableClassDefinition1))
            .Return(new[] { _fakeForeignKeyConstraint });
            _foreignKeyConstraintDefinitionFactoryMock.Replay();

            _storageNameProviderMock
            .Expect(mock => mock.GetTableName(_testModel.TableClassDefinition1))
            .Return(new EntityNameDefinition(null, "FakeTableName"));
            _storageNameProviderMock
            .Expect(mock => mock.GetViewName(_testModel.TableClassDefinition1))
            .Return(new EntityNameDefinition(null, "FakeViewName"));
            _storageNameProviderMock
            .Expect(mock => mock.GetPrimaryKeyConstraintName(_testModel.TableClassDefinition1))
            .Return("FakePrimaryKeyName");
            _storageNameProviderMock.Replay();

            MockStandardProperties();
            _infrastructureStoragePropertyDefinitionProviderMock.Replay();

            var result = _factory.CreateTableDefinition(_testModel.TableClassDefinition1);

            _storagePropertyDefinitionResolverMock.VerifyAllExpectations();
            _foreignKeyConstraintDefinitionFactoryMock.VerifyAllExpectations();
            _infrastructureStoragePropertyDefinitionProviderMock.VerifyAllExpectations();
            _storageNameProviderMock.VerifyAllExpectations();
            CheckTableDefinition(
                result,
                _storageProviderID,
                "FakeTableName",
                "FakeViewName",
                new IRdbmsStoragePropertyDefinition[]
            {
                _fakeObjectIDStorageProperty,
                _fakeTimestampStorageProperty,
                _fakeStorageProperty1
            },
                new ITableConstraintDefinition[]
            {
                new PrimaryKeyConstraintDefinition(
                    "FakePrimaryKeyName",
                    true,
                    new[] { StoragePropertyDefinitionTestHelper.GetIDColumnDefinition(_fakeObjectIDStorageProperty) }),
                _fakeForeignKeyConstraint
            },
                new IIndexDefinition[0],
                new EntityNameDefinition[0]);
        }
Ejemplo n.º 3
0
 private QueryParameterWithType[] GetExpectedParametersForQueryStub()
 {
     return(new[]
     {
         new QueryParameterWithType(
             new QueryParameter(_queryParameter1.Name, DomainObjectIDs.Order1.Value, _queryParameter1.ParameterType),
             StoragePropertyDefinitionTestHelper.GetIDColumnDefinition(_property1).StorageTypeInfo),
         new QueryParameterWithType(_queryParameter2, _property2.ColumnDefinition.StorageTypeInfo),
         new QueryParameterWithType(
             new QueryParameter(_queryParameter3.Name, DomainObjectIDs.Official1.ToString(), _queryParameter3.ParameterType),
             StoragePropertyDefinitionTestHelper.GetSingleColumn(_property3.SerializedIDProperty).StorageTypeInfo)
     });
 }
        private void CheckSimplePropertyDefinition(
            IRdbmsStoragePropertyDefinition result,
            Type expectedPropertyType,
            string expectedColumnName,
            StorageTypeInformation expectedStorageTypeInformation)
        {
            Assert.That(result, Is.TypeOf(typeof(SimpleStoragePropertyDefinition)));
            Assert.That(result.PropertyType, Is.SameAs(expectedPropertyType));
            var column = StoragePropertyDefinitionTestHelper.GetSingleColumn(result);

            Assert.That(column.Name, Is.EqualTo(expectedColumnName));
            Assert.That(column.IsPartOfPrimaryKey, Is.False);
            Assert.That(column.StorageTypeInfo, Is.SameAs(expectedStorageTypeInformation));
        }
        private bool CheckComparedColumns(
            IEnumerable <ColumnValue> columnValues, DataContainer dataContainer, TableDefinition tableDefinition)
        {
            var comparedColumnValues = columnValues.ToArray();

            Assert.That(comparedColumnValues[0].Column,
                        Is.SameAs(StoragePropertyDefinitionTestHelper.GetIDColumnDefinition(tableDefinition.ObjectIDProperty)));
            Assert.That(comparedColumnValues[0].Value, Is.SameAs(dataContainer.ID.Value));
            if (dataContainer.ClassDefinition.GetPropertyDefinitions().All(propertyDefinition => !propertyDefinition.IsObjectID))
            {
                Assert.That(comparedColumnValues[1].Column, Is.SameAs(StoragePropertyDefinitionTestHelper.GetSingleColumn(tableDefinition.TimestampProperty)));
                Assert.That(comparedColumnValues[1].Value, Is.SameAs(dataContainer.Timestamp));
            }
            return(true);
        }
Ejemplo n.º 6
0
        public void CreateForScalarQuery()
        {
            _dataStoragePropertyDefinitionFactoryStrictMock
            .Expect(mock => mock.CreateStoragePropertyDefinition(DomainObjectIDs.Order1))
            .Return(_property1);
            _dataStoragePropertyDefinitionFactoryStrictMock
            .Expect(mock => mock.CreateStoragePropertyDefinition(DomainObjectIDs.Order3.Value))
            .Return(_property2);
            _dataStoragePropertyDefinitionFactoryStrictMock
            .Expect(mock => mock.CreateStoragePropertyDefinition(DomainObjectIDs.Official1))
            .Return(_property3);
            _dataStoragePropertyDefinitionFactoryStrictMock.Replay();

            var commandBuilderStub         = MockRepository.GenerateStub <IDbCommandBuilder> ();
            var expectedParametersWithType =
                new[]
            {
                new QueryParameterWithType(
                    new QueryParameter(_queryParameter1.Name, DomainObjectIDs.Order1.Value, _queryParameter1.ParameterType),
                    StoragePropertyDefinitionTestHelper.GetIDColumnDefinition(_property1).StorageTypeInfo),
                new QueryParameterWithType(_queryParameter2, _property2.ColumnDefinition.StorageTypeInfo),
                new QueryParameterWithType(
                    new QueryParameter(_queryParameter3.Name, DomainObjectIDs.Official1.ToString(), _queryParameter3.ParameterType),
                    StoragePropertyDefinitionTestHelper.GetSingleColumn(_property3.SerializedIDProperty).StorageTypeInfo)
            };

            _dbCommandBuilderFactoryStrictMock
            .Expect(
                stub => stub.CreateForQuery(Arg.Is("statement"), Arg <IEnumerable <QueryParameterWithType> > .List.Equal(expectedParametersWithType)))
            .Return(commandBuilderStub);
            _dbCommandBuilderFactoryStrictMock.Replay();

            var result = _factory.CreateForScalarQuery(_queryStub);

            _dataStoragePropertyDefinitionFactoryStrictMock.VerifyAllExpectations();
            _dbCommandBuilderFactoryStrictMock.VerifyAllExpectations();

            Assert.That(result, Is.TypeOf(typeof(ScalarValueLoadCommand)));
            var command = ((ScalarValueLoadCommand)result);

            Assert.That(command.DbCommandBuilder, Is.SameAs(commandBuilderStub));
        }
Ejemplo n.º 7
0
        public void GetObjectIDStoragePropertyDefinition()
        {
            var result = _infrastructureStoragePropertyDefinitionProvider.GetObjectIDStoragePropertyDefinition();

            Assert.That(result.ValueProperty, Is.TypeOf <SimpleStoragePropertyDefinition> ());
            Assert.That(result.ValueProperty.PropertyType, Is.SameAs(typeof(object)));
            var idColumn = StoragePropertyDefinitionTestHelper.GetSingleColumn(result.ValueProperty);

            Assert.That(idColumn.Name, Is.EqualTo("ID"));
            Assert.That(idColumn.IsPartOfPrimaryKey, Is.True);
            Assert.That(idColumn.StorageTypeInfo, Is.SameAs(_idStorageTypeInformation));

            Assert.That(result.ClassIDProperty, Is.TypeOf <SimpleStoragePropertyDefinition> ());
            Assert.That(result.ClassIDProperty.PropertyType, Is.SameAs(typeof(string)));
            var classIDColumn = StoragePropertyDefinitionTestHelper.GetSingleColumn(result.ClassIDProperty);

            Assert.That(classIDColumn.Name, Is.EqualTo("ClassID"));
            Assert.That(classIDColumn.StorageTypeInfo, Is.SameAs(_classIDStorageTypeInformation));
            Assert.That(classIDColumn.IsPartOfPrimaryKey, Is.False);
        }
        public void CreateForSingleIDLookup()
        {
            var expectedSelectedColumns = _tableDefinition1.GetAllColumns().ToArray();
            var expectedComparedColumns =
                new[] { new ColumnValue(StoragePropertyDefinitionTestHelper.GetIDColumnDefinition(_tableDefinition1.ObjectIDProperty), _objectID1.Value) };

            _dbCommandBuilderFactoryStrictMock
            .Stub(
                stub => stub.CreateForSelect(
                    Arg.Is(_tableDefinition1),
                    Arg <IEnumerable <ColumnDefinition> > .List.Equal(expectedSelectedColumns),
                    Arg <IEnumerable <ColumnValue> > .List.Equal(expectedComparedColumns),
                    Arg <IEnumerable <OrderedColumn> > .List.Equal(new OrderedColumn[0])))
            .Return(_dbCommandBuilder1Stub);

            _objectReaderFactoryStrictMock
            .Expect(
                mock => mock.CreateDataContainerReader(
                    Arg.Is((IRdbmsStorageEntityDefinition)_tableDefinition1),
                    Arg <IEnumerable <ColumnDefinition> > .List.Equal(expectedSelectedColumns)))
            .Return(_dataContainerReader1Stub);
            _objectReaderFactoryStrictMock.Replay();

            var result = _factory.CreateForSingleIDLookup(_objectID1);

            _objectReaderFactoryStrictMock.VerifyAllExpectations();

            Assert.That(result, Is.TypeOf <SingleDataContainerAssociateWithIDCommand <IRdbmsProviderCommandExecutionContext> >());

            var associateCommand = (SingleDataContainerAssociateWithIDCommand <IRdbmsProviderCommandExecutionContext>)result;

            Assert.That(associateCommand.ExpectedObjectID, Is.EqualTo(_objectID1));
            Assert.That(associateCommand.InnerCommand, Is.TypeOf(typeof(SingleObjectLoadCommand <DataContainer>)));

            var loadCommand = ((SingleObjectLoadCommand <DataContainer>)associateCommand.InnerCommand);

            Assert.That(loadCommand.DbCommandBuilder, Is.SameAs(_dbCommandBuilder1Stub));
            Assert.That(loadCommand.ObjectReader, Is.SameAs(_dataContainerReader1Stub));
        }
        public void CreateForSortedMultiIDLookup_SingleIDLookup()
        {
            var expectedSelectedColumns = _tableDefinition1.GetAllColumns();
            var expectedComparedColumns =
                new[] { new ColumnValue(StoragePropertyDefinitionTestHelper.GetIDColumnDefinition(_tableDefinition1.ObjectIDProperty), _objectID1.Value) };

            _dbCommandBuilderFactoryStrictMock
            .Stub(
                stub => stub.CreateForSelect(
                    Arg.Is(_tableDefinition1),
                    Arg <IEnumerable <ColumnDefinition> > .List.Equal(expectedSelectedColumns),
                    Arg <IEnumerable <ColumnValue> > .List.Equal(expectedComparedColumns),
                    Arg <IEnumerable <OrderedColumn> > .List.Equal(new OrderedColumn[0])))
            .Return(_dbCommandBuilder1Stub);

            _objectReaderFactoryStrictMock
            .Expect(
                mock => mock.CreateDataContainerReader(
                    Arg.Is((IRdbmsStorageEntityDefinition)_tableDefinition1),
                    Arg <IEnumerable <ColumnDefinition> > .List.Equal(expectedSelectedColumns)))
            .Return(_dataContainerReader1Stub);
            _objectReaderFactoryStrictMock.Replay();

            var result = _factory.CreateForSortedMultiIDLookup(new[] { _objectID1 });

            _objectReaderFactoryStrictMock.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(1));
            Assert.That(dbCommandBuilderTuples[0].Item1, Is.SameAs(_dbCommandBuilder1Stub));
            Assert.That(dbCommandBuilderTuples[0].Item2, Is.SameAs(_dataContainerReader1Stub));
        }
        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));
        }