public void TestThatGetDataQueryerReturnsDataQueryerForDataRepository()
        {
            var fixture = new Fixture();

            var dataQueryerMock = MockRepository.GenerateMock <IDataQueryer>();

            fixture.Customize <IDataQueryer>(e => e.FromFactory(() => dataQueryerMock));

            var dataRepositoryMock = MockRepository.GenerateMock <IDataRepository>();

            dataRepositoryMock.Expect(m => m.GetDataQueryer())
            .Return(dataQueryerMock)
            .Repeat.Any();
            fixture.Customize <IDataRepository>(e => e.FromFactory(() => dataRepositoryMock));

            var dataValidator = new MyDataValidator();

            Assert.That(dataValidator, Is.Not.Null);

            using (var dataQueryer = dataValidator.GetDataQueryer(fixture.CreateAnonymous <IDataRepository>()))
            {
                Assert.That(dataQueryer, Is.Not.Null);
                Assert.That(dataQueryer, Is.EqualTo(dataQueryerMock));

                dataQueryer.Dispose();
            }

            dataRepositoryMock.AssertWasCalled(m => m.GetDataQueryer());
            dataQueryerMock.AssertWasCalled(m => m.Dispose());
        }
        public void TestThatRaiseOnValidationEventRaiseOnValidation()
        {
            var fixture = new Fixture();

            var dataValidationEventArgsMock = MockRepository.GenerateMock <IDataValidatorEventArgs>();

            dataValidationEventArgsMock.Expect(m => m.Data)
            .Return(fixture.CreateAnonymous <object>())
            .Repeat.Any();
            fixture.Customize <IDataValidatorEventArgs>(e => e.FromFactory(() => dataValidationEventArgsMock));

            var dataValidator = new MyDataValidator();

            Assert.That(dataValidator, Is.Not.Null);
            Assert.That(dataValidator.ValidationExecuted, Is.False);
            Assert.That(dataValidator.EndOfData, Is.False);

            var eventCalled = false;

            dataValidator.OnValidation += (s, e) =>
            {
                Assert.That(s, Is.Not.Null);
                Assert.That(e, Is.Not.Null);
                Assert.That(e.Data, Is.Not.Null);
                eventCalled = true;
            };

            Assert.That(eventCalled, Is.False);
            dataValidator.RaiseOnValidationEvent(fixture.CreateAnonymous <object>(), fixture.CreateAnonymous <IDataValidatorEventArgs>());
            Assert.That(eventCalled, Is.True);
        }
        public void TestThatGetDataQueryerThrowsArgumentNullExceptionIfDataRepositoryIsNull()
        {
            var dataValidator = new MyDataValidator();

            Assert.That(dataValidator, Is.Not.Null);

            Assert.Throws <ArgumentNullException>(() => dataValidator.GetDataQueryer(null));
        }
        public void TestThatGetDictionaryNameThrowsArgumentNullExceptionIfKeyIsNull()
        {
            var dataValidator = new MyDataValidator();

            Assert.That(dataValidator, Is.Not.Null);

            Assert.Throws <ArgumentNullException>(() => dataValidator.GetDictionaryName(null));
        }
        public void TestThatConstructorInitializeDataValidator()
        {
            var dataValidator = new MyDataValidator();

            Assert.That(dataValidator, Is.Not.Null);
            Assert.That(dataValidator.ValidationExecuted, Is.False);
            Assert.That(dataValidator.EndOfData, Is.False);
        }
        public void TestThatRaiseOnValidationEventThrowsArgumentNullExceptionIfEventArgsIsNull()
        {
            var fixture = new Fixture();

            var dataValidator = new MyDataValidator();

            Assert.That(dataValidator, Is.Not.Null);
            Assert.That(dataValidator.ValidationExecuted, Is.False);
            Assert.That(dataValidator.EndOfData, Is.False);

            Assert.Throws <ArgumentNullException>(() => dataValidator.RaiseOnValidationEvent(fixture.CreateAnonymous <object>(), null));
        }
        public void TestThatRaiseOnValidationEventThrowsArgumentNullExceptionIfSenderIsNull()
        {
            var fixture = new Fixture();

            fixture.Customize <IDataValidatorEventArgs>(e => e.FromFactory(() => MockRepository.GenerateMock <IDataValidatorEventArgs>()));

            var dataValidator = new MyDataValidator();

            Assert.That(dataValidator, Is.Not.Null);
            Assert.That(dataValidator.ValidationExecuted, Is.False);
            Assert.That(dataValidator.EndOfData, Is.False);

            Assert.Throws <ArgumentNullException>(() => dataValidator.RaiseOnValidationEvent(null, fixture.CreateAnonymous <IDataValidatorEventArgs>()));
        }
        public void TestThatValidateThrowsArgumentNullExceptionIfCommandIsNull()
        {
            var fixture = new Fixture();

            fixture.Customize <ITable>(e => e.FromFactory(() => MockRepository.GenerateMock <ITable>()));
            fixture.Customize <IDictionary <ITable, IEnumerable <IEnumerable <IDataObjectBase> > > >(e => e.FromFactory(() => MockRepository.GenerateMock <IDictionary <ITable, IEnumerable <IEnumerable <IDataObjectBase> > > >()));

            var dataValidator = new MyDataValidator();

            Assert.That(dataValidator, Is.Not.Null);
            Assert.That(dataValidator.ValidationExecuted, Is.False);
            Assert.That(dataValidator.EndOfData, Is.False);

            Assert.Throws <ArgumentNullException>(() => dataValidator.Validate(fixture.CreateAnonymous <ITable>(), fixture.CreateAnonymous <IDictionary <ITable, IEnumerable <IEnumerable <IDataObjectBase> > > >(), true, null));
        }
        public void TestThatValidateThrowsArgumentNullExceptionIfTargetTableDataIsNull()
        {
            var fixture = new Fixture();

            fixture.Customize <ITable>(e => e.FromFactory(() => MockRepository.GenerateMock <ITable>()));
            fixture.Customize <IForeignKeysValidationCommand>(e => e.FromFactory(() => MockRepository.GenerateMock <IForeignKeysValidationCommand>()));

            var dataValidator = new MyDataValidator();

            Assert.That(dataValidator, Is.Not.Null);
            Assert.That(dataValidator.ValidationExecuted, Is.False);
            Assert.That(dataValidator.EndOfData, Is.False);

            Assert.Throws <ArgumentNullException>(() => dataValidator.Validate(fixture.CreateAnonymous <ITable>(), null, true, fixture.CreateAnonymous <IForeignKeysValidationCommand>()));
        }
        public void TestThatGetDictionaryNameGetsDictionaryNameForKey()
        {
            var fixture = new Fixture();

            fixture.Customize <Type>(e => e.FromFactory(() => typeof(object)));
            fixture.Customize <IMap>(e => e.FromFactory(() => MockRepository.GenerateMock <IMap>()));
            fixture.Customize <IField>(e => e.FromFactory(() =>
            {
                var fieldMock = MockRepository.GenerateMock <IField>();
                fieldMock.Expect(m => m.NameTarget)
                .Return(fixture.CreateAnonymous <string>())
                .Repeat.Any();
                return(fieldMock);
            }));
            fixture.Customize <ITable>(e => e.FromFactory(() =>
            {
                var tableMock = MockRepository.GenerateMock <ITable>();
                tableMock.Expect(m => m.NameTarget)
                .Return(fixture.CreateAnonymous <string>())
                .Repeat.Any();
                return(tableMock);
            }));
            fixture.Customize <IKey>(e => e.FromFactory(() =>
            {
                var candidateKeyMock = MockRepository.GenerateMock <ICandidateKey>();
                candidateKeyMock.Expect(m => m.Table)
                .Return(fixture.CreateAnonymous <ITable>())
                .Repeat.Any();
                candidateKeyMock.Expect(m => m.Fields)
                .Return(new ReadOnlyObservableCollection <KeyValuePair <IField, IMap> >(new ObservableCollection <KeyValuePair <IField, IMap> >(fixture.CreateMany <KeyValuePair <IField, IMap> >(3).ToList())))
                .Repeat.Any();
                return(candidateKeyMock);
            }));

            var dataValidator = new MyDataValidator();

            Assert.That(dataValidator, Is.Not.Null);

            var keyMock        = fixture.CreateAnonymous <IKey>();
            var dictionaryName = dataValidator.GetDictionaryName(keyMock);

            Assert.That(dictionaryName, Is.Not.Null);
            Assert.That(dictionaryName, Is.Not.Empty);
            Assert.That(dictionaryName, Is.EqualTo(string.Format("{0}:{1}({2}:{3},{4}:{5},{6}:{7})", keyMock.Table.NameTarget, "{null}", keyMock.Fields.ElementAt(0).Key.NameTarget, "{null}", keyMock.Fields.ElementAt(1).Key.NameTarget, "{null}", keyMock.Fields.ElementAt(2).Key.NameTarget, "{null}")));

            keyMock.AssertWasCalled(m => m.Fields);
            keyMock.AssertWasCalled(m => m.Table, opt => opt.Repeat.Times(3));
        }
        public void TestThatValidateDoesNotValidateDataIfCommandIsAnotherType()
        {
            var fixture = new Fixture();

            fixture.Customize <ITable>(e => e.FromFactory(() => MockRepository.GenerateMock <ITable>()));
            fixture.Customize <IDictionary <ITable, IEnumerable <IEnumerable <IDataObjectBase> > > >(e => e.FromFactory(() => MockRepository.GenerateMock <IDictionary <ITable, IEnumerable <IEnumerable <IDataObjectBase> > > >()));
            fixture.Customize <ICommand>(e => e.FromFactory(() => MockRepository.GenerateMock <ICommand>()));

            var dataValidator = new MyDataValidator();

            Assert.That(dataValidator, Is.Not.Null);
            Assert.That(dataValidator.ValidationExecuted, Is.False);
            Assert.That(dataValidator.EndOfData, Is.False);

            dataValidator.Validate(fixture.CreateAnonymous <ITable>(), fixture.CreateAnonymous <IDictionary <ITable, IEnumerable <IEnumerable <IDataObjectBase> > > >(), true, fixture.CreateAnonymous <ICommand>());
            Assert.That(dataValidator.ValidationExecuted, Is.False);
            Assert.That(dataValidator.EndOfData, Is.False);
        }
        public void TestThatValidateValidatesDataWhereEndOfDataIsFalse()
        {
            var fixture = new Fixture();

            fixture.Customize <ITable>(e => e.FromFactory(() => MockRepository.GenerateMock <ITable>()));
            fixture.Customize <IDictionary <ITable, IEnumerable <IEnumerable <IDataObjectBase> > > >(e => e.FromFactory(() => MockRepository.GenerateMock <IDictionary <ITable, IEnumerable <IEnumerable <IDataObjectBase> > > >()));
            fixture.Customize <IForeignKeysValidationCommand>(e => e.FromFactory(() => MockRepository.GenerateMock <IForeignKeysValidationCommand>()));

            var dataValidator = new MyDataValidator();

            Assert.That(dataValidator, Is.Not.Null);
            Assert.That(dataValidator.ValidationExecuted, Is.False);
            Assert.That(dataValidator.EndOfData, Is.False);

            dataValidator.Validate(fixture.CreateAnonymous <ITable>(), fixture.CreateAnonymous <IDictionary <ITable, IEnumerable <IEnumerable <IDataObjectBase> > > >(), false, fixture.CreateAnonymous <IForeignKeysValidationCommand>());
            Assert.That(dataValidator.ValidationExecuted, Is.True);
            Assert.That(dataValidator.EndOfData, Is.False);
        }
        public void TestThatGetDataQueryerThrowsDeliveryEngineSystemExceptionIfGetDataQueryerInDataRepositoryThrowsException()
        {
            var fixture = new Fixture();

            var dataRepositoryMock = MockRepository.GenerateMock <IDataRepository>();

            dataRepositoryMock.Expect(m => m.GetDataQueryer())
            .Throw(fixture.CreateAnonymous <Exception>())
            .Repeat.Any();
            fixture.Customize <IDataRepository>(e => e.FromFactory(() => dataRepositoryMock));

            var dataValidator = new MyDataValidator();

            Assert.That(dataValidator, Is.Not.Null);

            Assert.Throws <DeliveryEngineSystemException>(() => dataValidator.GetDataQueryer(fixture.CreateAnonymous <IDataRepository>()));

            dataRepositoryMock.AssertWasCalled(m => m.GetDataQueryer());
        }