Example #1
0
        public void PersistData_NewDataContainer_WithEndPoint()
        {
            var domainObject           = DomainObjectMother.CreateFakeObject <Order> ();
            var persistedDataContainer = DataContainerObjectMother.CreateNew(domainObject);

            SetPropertyValue(persistedDataContainer, typeof(Order), "OrderNumber", 12);
            var persistedEndPoint = RelationEndPointObjectMother.CreateStub();

            persistedEndPoint.Stub(stub => stub.HasChanged).Return(true);
            var persistableData = new PersistableData(domainObject, StateType.New, persistedDataContainer, new[] { persistedEndPoint });

            var counter = new OrderedExpectationCounter();

            _parentTransactionContextMock.Expect(mock => mock.UnlockParentTransaction()).Return(_unlockedParentTransactionContextMock);

            _parentTransactionContextMock.Stub(stub => stub.IsInvalid(domainObject.ID)).Return(true);
            _parentTransactionContextMock.Stub(stub => stub.GetDataContainerWithoutLoading(domainObject.ID)).Return(null);
            _unlockedParentTransactionContextMock
            .Expect(mock => mock.MarkNotInvalid(domainObject.ID))
            .Ordered(counter);
            _unlockedParentTransactionContextMock
            .Expect(mock => mock.RegisterDataContainer(Arg <DataContainer> .Is.Anything))
            .WhenCalledOrdered(
                counter,
                mi => CheckDataContainer((DataContainer)mi.Arguments[0], domainObject, null, StateType.New, _orderNumberPropertyDefinition, 12, 0, true),
                "New DataContainers must be registered before the parent relation end-points are retrieved for persistence (and prior to Dispose)."
                );

            var parentEndPointMock = MockRepository.GenerateStrictMock <IRelationEndPoint>();

            _parentTransactionContextMock
            .Expect(mock => mock.GetRelationEndPointWithoutLoading(persistedEndPoint.ID))
            .Return(parentEndPointMock)
            .Ordered(counter, "New DataContainers must be registered before the parent relation end-points are retrieved for persistence.");
            parentEndPointMock
            .Expect(mock => mock.SetDataFromSubTransaction(persistedEndPoint))
            .Ordered(counter, "SetDataFromSubTransaction must occur prior to Dispose.");

            _unlockedParentTransactionContextMock.Expect(mock => mock.Dispose()).Ordered(counter, "Dispose should come at the end.");

            _persistenceStrategy.PersistData(new[] { persistableData }.AsOneTime());

            _parentTransactionContextMock.VerifyAllExpectations();
            _unlockedParentTransactionContextMock.VerifyAllExpectations();
            parentEndPointMock.VerifyAllExpectations();
        }
Example #2
0
        public void PersistData_DeletedDataContainer_WithEndPoint_NewInParent()
        {
            var domainObject           = DomainObjectMother.CreateFakeObject <Order> ();
            var persistedDataContainer = DataContainerObjectMother.CreateDeleted(domainObject);
            var persistedEndPoint      = RelationEndPointObjectMother.CreateStub();

            persistedEndPoint.Stub(stub => stub.HasChanged).Return(true);
            var persistableData = new PersistableData(domainObject, StateType.Deleted, persistedDataContainer, new[] { persistedEndPoint });

            var counter = new OrderedExpectationCounter();

            _parentTransactionContextMock.Expect(mock => mock.UnlockParentTransaction()).Return(_unlockedParentTransactionContextMock);

            var parentEndPointMock = MockRepository.GenerateStrictMock <IRelationEndPoint> ();

            _parentTransactionContextMock
            .Expect(mock => mock.GetRelationEndPointWithoutLoading(persistedEndPoint.ID))
            .Return(parentEndPointMock)
            .Ordered(counter, "Deleted DataContainers must be persisted after the parent relation end-points are retrieved for persistence.");
            parentEndPointMock
            .Expect(mock => mock.SetDataFromSubTransaction(persistedEndPoint))
            .Ordered(counter, "SetDataFromSubTransaction must occur prior to Dispose.");

            var parentDataContainer = DataContainerObjectMother.CreateNew(persistedDataContainer.ID);

            parentDataContainer.SetDomainObject(domainObject);
            _parentTransactionContextMock
            .Stub(stub => stub.GetDataContainerWithoutLoading(domainObject.ID))
            .Return(parentDataContainer);

            _unlockedParentTransactionContextMock
            .Expect(mock => mock.Discard(parentDataContainer))
            .Ordered(counter, "Deleted DataContainers must be persisted after the parent relation end-points are retrieved for persistence.");

            _unlockedParentTransactionContextMock
            .Expect(mock => mock.Dispose())
            .Ordered(counter, "Dispose should come at the end.");

            _persistenceStrategy.PersistData(new[] { persistableData }.AsOneTime());

            _parentTransactionContextMock.VerifyAllExpectations();
            _unlockedParentTransactionContextMock.VerifyAllExpectations();
            parentEndPointMock.VerifyAllExpectations();
        }
Example #3
0
        public void PersistData_MarkedAsChangedDataContainer()
        {
            var persistableData1 = CreateMarkAsChangedPersistableDataForOrder();
            var persistableData2 = CreateMarkAsChangedPersistableDataForOrder();
            var persistableData3 = CreateMarkAsChangedPersistableDataForOrder();

            _parentTransactionContextMock.Expect(mock => mock.UnlockParentTransaction()).Return(_unlockedParentTransactionContextMock);

            var unchangedParentDataContainer = DataContainerObjectMother.CreateExisting(persistableData1.DomainObject);

            _parentTransactionContextMock
            .Expect(mock => mock.GetDataContainerWithoutLoading(persistableData1.DomainObject.ID))
            .Return(unchangedParentDataContainer);

            var changedParentDataContainer = DataContainerObjectMother.CreateExisting(persistableData2.DomainObject);

            SetPropertyValue(changedParentDataContainer, typeof(Order), "OrderNumber", 23);
            _parentTransactionContextMock
            .Expect(mock => mock.GetDataContainerWithoutLoading(persistableData2.DomainObject.ID))
            .Return(changedParentDataContainer);

            var newParentDataContainer = DataContainerObjectMother.CreateNew(persistableData3.DomainObject);

            _parentTransactionContextMock
            .Expect(mock => mock.GetDataContainerWithoutLoading(persistableData3.DomainObject.ID))
            .Return(newParentDataContainer);

            _unlockedParentTransactionContextMock
            .Expect(mock => mock.Dispose())
            .WhenCalled(mi =>
            {
                Assert.That(unchangedParentDataContainer.HasBeenMarkedChanged, Is.True);
                Assert.That(changedParentDataContainer.HasBeenMarkedChanged, Is.True);
                Assert.That(newParentDataContainer.HasBeenMarkedChanged, Is.False);
            });

            _persistenceStrategy.PersistData(new[] { persistableData1, persistableData2, persistableData3 }.AsOneTime());

            _parentTransactionContextMock.VerifyAllExpectations();
            _unlockedParentTransactionContextMock.VerifyAllExpectations();
        }