public void Dispose_DataWriterDisposeThrowsException_ExceptionIsPropogated()
        {
            var dataDestination1 = MockRepository.GenerateMock <IDataDestination>();
            var dataDestination2 = MockRepository.GenerateMock <IDataDestination>();
            var dataWriter1      = MockRepository.GenerateMock <IDataWriter>();
            var dataWriter2      = MockRepository.GenerateMock <IDataWriter>();
            var recordExpander   = MockRepository.GenerateMock <IRecordExpander>();

            dataWriter1.Stub(x => x.Dispose()).Throw(new InternalTestFailureException());

            var dataWriters = new Dictionary <IDataDestination, IDataWriter>();

            dataWriters.Add(dataDestination1, dataWriter1);
            dataWriters.Add(dataDestination2, dataWriter2);

            var expandedDataWriter = new ExpandedDataWriter(dataWriters, recordExpander);

            try
            {
                expandedDataWriter.Dispose();
            }
            catch (AggregateException ae)
            {
                Assert.IsTrue(ae.InnerException is InternalTestFailureException);

                return;
            }

            Assert.Fail();
        }
        public void WriteRecord_MultipleDataWritersAndExpandedRecords_AllDataWritersWriteAllExpandedRecords()
        {
            var record          = new object();
            var expandedRecords = new List <object>()
            {
                new object(),
                new object()
            };

            var dataDestination1 = MockRepository.GenerateMock <IDataDestination>();
            var dataDestination2 = MockRepository.GenerateMock <IDataDestination>();
            var dataWriter1      = MockRepository.GenerateMock <IDataWriter>();
            var dataWriter2      = MockRepository.GenerateMock <IDataWriter>();
            var recordExpander   = MockRepository.GenerateMock <IRecordExpander>();

            recordExpander.Expect(x => x.Expand(Arg <object> .Is.Equal(record))).Return(expandedRecords).Repeat.Once();
            dataWriter1.Expect(x => x.WriteRecord(Arg <object> .Is.Equal(expandedRecords[0]))).Repeat.Once();
            dataWriter1.Expect(x => x.WriteRecord(Arg <object> .Is.Equal(expandedRecords[1]))).Repeat.Once();
            dataWriter2.Expect(x => x.WriteRecord(Arg <object> .Is.Equal(expandedRecords[0]))).Repeat.Once();
            dataWriter2.Expect(x => x.WriteRecord(Arg <object> .Is.Equal(expandedRecords[1]))).Repeat.Once();

            var dataWriters = new Dictionary <IDataDestination, IDataWriter>();

            dataWriters.Add(dataDestination1, dataWriter1);
            dataWriters.Add(dataDestination2, dataWriter2);

            var expandedDataWriter = new ExpandedDataWriter(dataWriters, recordExpander);

            expandedDataWriter.WriteRecord(record);

            recordExpander.VerifyAllExpectations();
            dataWriter1.VerifyAllExpectations();
            dataWriter2.VerifyAllExpectations();
        }
        public void WriteRecord_RecordFilterRecordMeedsCriteriaThrowsException_ExceptionIsPropogated()
        {
            var record          = new object();
            var expandedRecords = new List <object>()
            {
                new object(),
                new object()
            };

            var dataDestination1 = MockRepository.GenerateMock <IDataDestination>();
            var dataDestination2 = MockRepository.GenerateMock <IDataDestination>();
            var recordFilter1    = MockRepository.GenerateMock <IRecordFilter>();
            var recordFilter2    = MockRepository.GenerateMock <IRecordFilter>();
            var dataWriter1      = MockRepository.GenerateMock <IDataWriter>();
            var dataWriter2      = MockRepository.GenerateMock <IDataWriter>();
            var recordExpander   = MockRepository.GenerateMock <IRecordExpander>();

            dataDestination1.Stub(x => x.RecordFilter).Return(recordFilter1);
            dataDestination2.Stub(x => x.RecordFilter).Return(recordFilter2);
            recordFilter1.Stub(x => x.MeetsCriteria(Arg <object> .Is.Anything)).Throw(new InternalTestFailureException());
            recordFilter2.Stub(x => x.MeetsCriteria(Arg <object> .Is.Anything)).Throw(new InternalTestFailureException());
            recordExpander.Stub(x => x.Expand(Arg <object> .Is.Equal(record))).Return(expandedRecords);

            var dataWriters = new Dictionary <IDataDestination, IDataWriter>();

            dataWriters.Add(dataDestination1, dataWriter1);
            dataWriters.Add(dataDestination2, dataWriter2);

            var expandedDataWriter = new ExpandedDataWriter(dataWriters, recordExpander);

            try
            {
                expandedDataWriter.WriteRecord(record);
            }
            catch (AggregateException ae)
            {
                Assert.IsTrue(ae.InnerException is InternalTestFailureException);

                return;
            }

            Assert.Fail();
        }
        public void WriteRecord_RecordExpanderExpandThrowsException_ExceptionIsPropogated()
        {
            var record = new object();

            var dataDestination1 = MockRepository.GenerateMock <IDataDestination>();
            var dataDestination2 = MockRepository.GenerateMock <IDataDestination>();
            var dataWriter1      = MockRepository.GenerateMock <IDataWriter>();
            var dataWriter2      = MockRepository.GenerateMock <IDataWriter>();
            var recordExpander   = MockRepository.GenerateMock <IRecordExpander>();

            recordExpander.Stub(x => x.Expand(Arg <object> .Is.Equal(record))).Throw(new InternalTestFailureException());

            var dataWriters = new Dictionary <IDataDestination, IDataWriter>();

            dataWriters.Add(dataDestination1, dataWriter1);
            dataWriters.Add(dataDestination2, dataWriter2);

            var expandedDataWriter = new ExpandedDataWriter(dataWriters, recordExpander);

            expandedDataWriter.WriteRecord(record);
        }
        public void Rollback_MultipleDataDestinations_AllDataWritersAreRolledBack()
        {
            var dataDestination1 = MockRepository.GenerateMock <IDataDestination>();
            var dataDestination2 = MockRepository.GenerateMock <IDataDestination>();
            var dataWriter1      = MockRepository.GenerateMock <IDataWriter>();
            var dataWriter2      = MockRepository.GenerateMock <IDataWriter>();
            var recordExpander   = MockRepository.GenerateMock <IRecordExpander>();

            dataWriter1.Expect(x => x.Rollback());
            dataWriter2.Expect(x => x.Rollback());

            var dataWriters = new Dictionary <IDataDestination, IDataWriter>();

            dataWriters.Add(dataDestination1, dataWriter1);
            dataWriters.Add(dataDestination2, dataWriter2);

            var expandedDataWriter = new ExpandedDataWriter(dataWriters, recordExpander);

            expandedDataWriter.Rollback();

            dataWriter1.VerifyAllExpectations();
            dataWriter2.VerifyAllExpectations();
        }