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

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

            using (var oracleClient = new OracleClient())
            {
                Assert.Throws <ArgumentNullException>(() => oracleClient.GetNumberOfEqualKeyValues(fixture.CreateAnonymous <IKey>(), null, fixture.CreateAnonymous <string>()));

                oracleClient.Dispose();
            }
        }
        public void TestThatGetNumberOfEqualKeyValuesThrowsArgumentNullExceptionIfKeyIsNull()
        {
            var fixture = new Fixture();

            fixture.Customize <KeyValuePair <string, object> >(e => e.FromFactory(() => new KeyValuePair <string, object>(fixture.CreateAnonymous <string>(), fixture.CreateAnonymous <object>())));

            using (var oracleClient = new OracleClient())
            {
                Assert.Throws <ArgumentNullException>(() => oracleClient.GetNumberOfEqualKeyValues(null, fixture.CreateMany <KeyValuePair <string, object> >(5).ToList(), fixture.CreateAnonymous <string>()));

                oracleClient.Dispose();
            }
        }
        public void TestThatGetNumberOfEqualKeyValuesThrowsArgumentNullExceptionIfMatchingKeyValueIsEmpty()
        {
            var fixture = new Fixture();

            fixture.Customize <IKey>(e => e.FromFactory(() => MockRepository.GenerateMock <IKey>()));
            fixture.Customize <KeyValuePair <string, object> >(e => e.FromFactory(() => new KeyValuePair <string, object>(fixture.CreateAnonymous <string>(), fixture.CreateAnonymous <object>())));

            using (var oracleClient = new OracleClient())
            {
                Assert.Throws <ArgumentNullException>(() => oracleClient.GetNumberOfEqualKeyValues(fixture.CreateAnonymous <IKey>(), fixture.CreateMany <KeyValuePair <string, object> >(5).ToList(), string.Empty));

                oracleClient.Dispose();
            }
        }
        public void TestThatGetNumberOfEqualKeyValuesThrowsDeliveryEngineMetadataExceptionIfTableIsNullOnKey()
        {
            var fixture = new Fixture();

            fixture.Customize <KeyValuePair <string, object> >(e => e.FromFactory(() => new KeyValuePair <string, object>(fixture.CreateAnonymous <string>(), fixture.CreateAnonymous <object>())));

            var keyMock = MockRepository.GenerateMock <IKey>();

            keyMock.Expect(m => m.Table)
            .Return(null)
            .Repeat.Any();

            using (var oracleClient = new OracleClient())
            {
                Assert.Throws <DeliveryEngineMetadataException>(() => oracleClient.GetNumberOfEqualKeyValues(keyMock, fixture.CreateMany <KeyValuePair <string, object> >(5).ToList(), fixture.CreateAnonymous <string>()));

                oracleClient.Dispose();
            }

            keyMock.AssertWasCalled(m => m.Table);
        }
        public void TestThatGetNumberOfEqualKeyValuesGetsNumberOfEqualKeyValuesForKeyWhereThereMultipleRecords()
        {
            var fieldCollection = new List <IField>
            {
                MockRepository.GenerateMock <IField>(),
                MockRepository.GenerateMock <IField>(),
                MockRepository.GenerateMock <IField>(),
                MockRepository.GenerateMock <IField>()
            };

            fieldCollection.ElementAt(0).Expect(m => m.NameSource)
            .Return("SYSTEM_NR")
            .Repeat.Any();
            fieldCollection.ElementAt(0).Expect(m => m.DatatypeOfSource)
            .Return(typeof(int?))
            .Repeat.Any();
            fieldCollection.ElementAt(0).Expect(m => m.DatatypeOfTarget)
            .Return(typeof(int?))
            .Repeat.Any();
            fieldCollection.ElementAt(1).Expect(m => m.NameSource)
            .Return("TABEL")
            .Repeat.Any();
            fieldCollection.ElementAt(1).Expect(m => m.DatatypeOfSource)
            .Return(typeof(int?))
            .Repeat.Any();
            fieldCollection.ElementAt(1).Expect(m => m.DatatypeOfTarget)
            .Return(typeof(int?))
            .Repeat.Any();
            fieldCollection.ElementAt(2).Expect(m => m.NameSource)
            .Return("NR")
            .Repeat.Any();
            fieldCollection.ElementAt(2).Expect(m => m.DatatypeOfSource)
            .Return(typeof(string))
            .Repeat.Any();
            fieldCollection.ElementAt(2).Expect(m => m.DatatypeOfTarget)
            .Return(typeof(string))
            .Repeat.Any();
            fieldCollection.ElementAt(3).Expect(m => m.NameSource)
            .Return("TEKST")
            .Repeat.Any();
            fieldCollection.ElementAt(3).Expect(m => m.DatatypeOfSource)
            .Return(typeof(string))
            .Repeat.Any();
            fieldCollection.ElementAt(3).Expect(m => m.DatatypeOfTarget)
            .Return(typeof(string))
            .Repeat.Any();

            var filterCollection = new List <IFilter>();
            var tableMock        = MockRepository.GenerateMock <ITable>();
            var keyMock          = MockRepository.GenerateMock <ICandidateKey>();

            keyMock.Expect(m => m.Table)
            .Return(tableMock)
            .Repeat.Any();
            keyMock.Expect(m => m.Fields)
            .Return(new ReadOnlyObservableCollection <KeyValuePair <IField, IMap> >(new ObservableCollection <KeyValuePair <IField, IMap> >(new List <KeyValuePair <IField, IMap> >(fieldCollection.GetRange(0, 3).Select(field => new KeyValuePair <IField, IMap>(field, null))))))
            .Repeat.Any();
            tableMock.Expect(m => m.NameSource)
            .Return("TABEL")
            .Repeat.Any();
            tableMock.Expect(m => m.Fields)
            .Return(new ReadOnlyObservableCollection <IField>(new ObservableCollection <IField>(fieldCollection)))
            .Repeat.Any();
            tableMock.Expect(m => m.PrimaryKey)
            .Return(keyMock)
            .Repeat.Any();
            tableMock.Expect(m => m.RecordFilters)
            .WhenCalled(e => e.ReturnValue = new ReadOnlyObservableCollection <IFilter>(new ObservableCollection <IFilter>(filterCollection)))
            .Return(new ReadOnlyObservableCollection <IFilter>(new ObservableCollection <IFilter>(filterCollection)))
            .Repeat.Any();
            tableMock.Expect(m => m.AddRecordFilter(Arg <IFilter> .Is.NotNull))
            .WhenCalled(e => filterCollection.Add((IFilter)e.Arguments.ElementAt(0)))
            .Repeat.Any();
            tableMock.Expect(m => m.Clone())
            .Return(tableMock)
            .Repeat.Any();

            var mocker = new MockRepository();
            var dataManipulatorsMock = mocker.DynamicMultiMock <IDataManipulators>(new[] { typeof(IEnumerable <IDataManipulator>) });

            Expect.Call(dataManipulatorsMock.GetEnumerator())
            .Return(new List <IDataManipulator>(0).GetEnumerator())
            .Repeat.Any();
            mocker.ReplayAll();

            using (var oracleClient = new OracleClient(dataManipulatorsMock))
            {
                var extraCriterias = new List <KeyValuePair <string, object> >
                {
                    new KeyValuePair <string, object>("SYSTEM_NR", 0),
                    new KeyValuePair <string, object>("TABEL", 0)
                };
                var numberOfEqualKeys = oracleClient.GetNumberOfEqualKeyValues(keyMock, extraCriterias, "0|0|00");
                Assert.That(numberOfEqualKeys, Is.EqualTo(1));

                oracleClient.Dispose();
            }

            keyMock.AssertWasCalled(m => m.Table);
            tableMock.AssertWasCalled(m => m.Clone());
            tableMock.AssertWasCalled(m => m.RecordFilters, opt => opt.Repeat.Times(6));
            tableMock.AssertWasCalled(m => m.AddRecordFilter(Arg <IFilter> .Is.NotNull));
            dataManipulatorsMock.AssertWasCalled(m => m.GetEnumerator());
        }
        public void TestThatGetNumberOfEqualKeyValuesGetsNumberOfEqualKeyValuesForKeyWhereThereOnlyAreOnRecord()
        {
            var fixture = new Fixture();

            var fieldCollection = new List <IField>
            {
                MockRepository.GenerateMock <IField>(),
                MockRepository.GenerateMock <IField>(),
                MockRepository.GenerateMock <IField>(),
                MockRepository.GenerateMock <IField>()
            };

            fieldCollection.ElementAt(0).Expect(m => m.NameSource)
            .Return("SYSTEM_NR")
            .Repeat.Any();
            fieldCollection.ElementAt(0).Expect(m => m.DatatypeOfSource)
            .Return(typeof(int?))
            .Repeat.Any();
            fieldCollection.ElementAt(1).Expect(m => m.NameSource)
            .Return("TABEL")
            .Repeat.Any();
            fieldCollection.ElementAt(1).Expect(m => m.DatatypeOfSource)
            .Return(typeof(int?))
            .Repeat.Any();
            fieldCollection.ElementAt(2).Expect(m => m.NameSource)
            .Return("NR")
            .Repeat.Any();
            fieldCollection.ElementAt(2).Expect(m => m.DatatypeOfSource)
            .Return(typeof(string))
            .Repeat.Any();
            fieldCollection.ElementAt(3).Expect(m => m.NameSource)
            .Return("TEKST")
            .Repeat.Any();
            fieldCollection.ElementAt(3).Expect(m => m.DatatypeOfSource)
            .Return(typeof(string))
            .Repeat.Any();

            var filterCollection = new List <IFilter>();
            var tableMock        = MockRepository.GenerateMock <ITable>();
            var keyMock          = MockRepository.GenerateMock <ICandidateKey>();

            keyMock.Expect(m => m.Table)
            .Return(tableMock)
            .Repeat.Any();
            keyMock.Expect(m => m.Fields)
            .Return(new ReadOnlyObservableCollection <KeyValuePair <IField, IMap> >(new ObservableCollection <KeyValuePair <IField, IMap> >(fieldCollection.GetRange(0, 3).Select(field => new KeyValuePair <IField, IMap>(field, null)))))
            .Repeat.Any();
            tableMock.Expect(m => m.NameSource)
            .Return("TABEL")
            .Repeat.Any();
            tableMock.Expect(m => m.Fields)
            .Return(new ReadOnlyObservableCollection <IField>(new ObservableCollection <IField>(fieldCollection)))
            .Repeat.Any();
            tableMock.Expect(m => m.PrimaryKey)
            .Return(keyMock)
            .Repeat.Any();
            tableMock.Expect(m => m.RecordFilters)
            .WhenCalled(e => e.ReturnValue = new ReadOnlyObservableCollection <IFilter>(new ObservableCollection <IFilter>(filterCollection)))
            .Return(new ReadOnlyObservableCollection <IFilter>(new ObservableCollection <IFilter>(filterCollection)))
            .Repeat.Any();
            tableMock.Expect(m => m.AddRecordFilter(Arg <IFilter> .Is.NotNull))
            .WhenCalled(e => filterCollection.Add((IFilter)e.Arguments.ElementAt(0)))
            .Repeat.Any();
            tableMock.Expect(m => m.Clone())
            .Return(tableMock)
            .Repeat.Any();

            using (var oracleClient = new OracleClient())
            {
                var extraCriterias = new List <KeyValuePair <string, object> >
                {
                    new KeyValuePair <string, object>("SYSTEM_NR", 0),
                    new KeyValuePair <string, object>("TABEL", 0),
                    new KeyValuePair <string, object>("NR", "00")
                };
                var numberOfEqualKeys = oracleClient.GetNumberOfEqualKeyValues(keyMock, extraCriterias, fixture.CreateAnonymous <string>());
                Assert.That(numberOfEqualKeys, Is.EqualTo(1));

                oracleClient.Dispose();
            }

            keyMock.AssertWasCalled(m => m.Table);
            tableMock.AssertWasCalled(m => m.Clone());
            tableMock.AssertWasCalled(m => m.RecordFilters, opt => opt.Repeat.Times(7));
            tableMock.AssertWasCalled(m => m.AddRecordFilter(Arg <IFilter> .Is.NotNull));
        }