public void TryMap_FieldTransformerThrowsException_ExceptionIsPropogated() { var source = new object(); var record = new MockRecord(); var recordFactory = MockRepository.GenerateMock <IRecordFactory>(); var fieldTransformer = MockRepository.GenerateMock <IFieldTransformer>(); recordFactory.Stub(x => x.Create(Arg <object> .Is.Equal(source))).Return(record); fieldTransformer.Stub(x => x.ApplyTransforms( Arg <PropertyInfo> .Matches(pi => pi.Name.Equals(nameof(MockRecord.StringField))), Arg <object> .Is.Equal(record))) .Throw(new InternalTestFailureException()); var recordMapper = new MockRecordMapper(recordFactory, fieldTransformer: fieldTransformer); recordMapper.TryReadSourceFieldFunc = new Func <PropertyInfo, object, Tuple <bool, object, string> >((pi, src) => { switch (pi.Name) { case "StringField": return(new Tuple <bool, object, string>(true, "Text", null)); case "IntField": return(new Tuple <bool, object, string>(true, 1, null)); case "NullableIntField": return(new Tuple <bool, object, string>(true, 2, null)); } Assert.Fail(); return(null); }); recordMapper.TryMap(source, out var mappedRecord, out var failures); }
public void TryMap_ValidRecordWithFieldParser_RecordIsMapped() { var source = new object(); var record = new MockRecord(); var recordFactory = MockRepository.GenerateMock <IRecordFactory>(); var fieldParser = MockRepository.GenerateMock <IFieldParser>(); recordFactory.Expect(x => x.Create(Arg <object> .Is.Equal(source))).Return(record).Repeat.Once(); fieldParser.Expect(x => x.TryParse( Arg <PropertyInfo> .Matches(pi => pi.Name.Equals(nameof(MockRecord.StringField))), Arg <object> .Is.Equal("Text"), out Arg <object> .Out("Text-Parsed").Dummy, out Arg <string> .Out(null).Dummy)) .Return(true) .Repeat.Once(); fieldParser.Expect(x => x.TryParse( Arg <PropertyInfo> .Matches(pi => pi.Name.Equals(nameof(MockRecord.IntField))), Arg <object> .Is.Equal(1), out Arg <object> .Out(10).Dummy, out Arg <string> .Out(null).Dummy)) .Return(true) .Repeat.Once(); fieldParser.Expect(x => x.TryParse( Arg <PropertyInfo> .Matches(pi => pi.Name.Equals(nameof(MockRecord.NullableIntField))), Arg <object> .Is.Equal(2), out Arg <object> .Out(20).Dummy, out Arg <string> .Out(null).Dummy)) .Return(true) .Repeat.Once(); var recordMapper = new MockRecordMapper(recordFactory, fieldParser: fieldParser); recordMapper.TryReadSourceFieldFunc = new Func <PropertyInfo, object, Tuple <bool, object, string> >((pi, src) => { switch (pi.Name) { case "StringField": return(new Tuple <bool, object, string>(true, "Text", null)); case "IntField": return(new Tuple <bool, object, string>(true, 1, null)); case "NullableIntField": return(new Tuple <bool, object, string>(true, 2, null)); } Assert.Fail(); return(null); }); var couldMap = recordMapper.TryMap(source, out var mappedRecord, out var failures); recordFactory.VerifyAllExpectations(); fieldParser.VerifyAllExpectations(); Assert.IsTrue(couldMap); Assert.AreEqual(mappedRecord, record); Assert.AreEqual(0, failures.Count()); Assert.AreEqual("Text-Parsed", ((MockRecord)mappedRecord).StringField); Assert.AreEqual(10, ((MockRecord)mappedRecord).IntField); Assert.AreEqual(20, ((MockRecord)mappedRecord).NullableIntField); }
public void TryMap_FieldDisplayNameProviderThrowsException_ExceptionIsPropogated() { var source = new object(); var record = new MockRecord(); var recordFactory = MockRepository.GenerateMock <IRecordFactory>(); var fieldParser = MockRepository.GenerateMock <IFieldParser>(); var fieldDisplayNameProvider = MockRepository.GenerateMock <IFieldDisplayNameProvider>(); recordFactory.Expect(x => x.Create(Arg <object> .Is.Equal(source))).Return(record).Repeat.Once(); fieldParser.Expect(x => x.TryParse( Arg <PropertyInfo> .Matches(pi => pi.Name.Equals(nameof(MockRecord.StringField))), Arg <object> .Is.Equal("Text"), out Arg <object> .Out(null).Dummy, out Arg <string> .Out("Field could not be parsed.").Dummy)) .Return(false) .Repeat.Once(); fieldParser.Expect(x => x.TryParse( Arg <PropertyInfo> .Matches(pi => pi.Name.Equals(nameof(MockRecord.IntField))), Arg <object> .Is.Equal(1), out Arg <object> .Out(10).Dummy, out Arg <string> .Out(null).Dummy)) .Return(true) .Repeat.Once(); fieldParser.Expect(x => x.TryParse( Arg <PropertyInfo> .Matches(pi => pi.Name.Equals(nameof(MockRecord.NullableIntField))), Arg <object> .Is.Equal(2), out Arg <object> .Out(20).Dummy, out Arg <string> .Out(null).Dummy)) .Return(true) .Repeat.Once(); fieldDisplayNameProvider.Stub(x => x.GetFieldDisplayName(Arg <PropertyInfo> .Is.Anything)).Throw(new InternalTestFailureException()); var recordMapper = new MockRecordMapper(recordFactory, fieldParser: fieldParser, fieldDisplayNameProvider: fieldDisplayNameProvider); recordMapper.TryReadSourceFieldFunc = new Func <PropertyInfo, object, Tuple <bool, object, string> >((pi, src) => { switch (pi.Name) { case "StringField": return(new Tuple <bool, object, string>(true, "Text", null)); case "IntField": return(new Tuple <bool, object, string>(true, 1, null)); case "NullableIntField": return(new Tuple <bool, object, string>(true, 2, null)); } Assert.Fail(); return(null); }); recordMapper.TryMap(source, out var mappedRecord, out var failures); }
public void TryMap_TryReadSourceFieldThrowsException_ExceptionIsPropogated() { var source = new object(); var record = new MockRecord(); var recordFactory = MockRepository.GenerateMock <IRecordFactory>(); recordFactory.Stub(x => x.Create(Arg <object> .Is.Equal(source))).Return(record); var recordMapper = new MockRecordMapper(recordFactory); recordMapper.TryReadSourceFieldFunc = new Func <PropertyInfo, object, Tuple <bool, object, string> >((pi, src) => { throw new InternalTestFailureException(); }); var couldMap = recordMapper.TryMap(source, out var mappedRecord, out var failures); }
public void TryMap_InvalidRecordWithFieldTransformer_TransformNotAppliedForInvalidField() { var source = new object(); var record = new MockRecord(); var recordFactory = MockRepository.GenerateMock <IRecordFactory>(); var fieldTransformer = MockRepository.GenerateMock <IFieldTransformer>(); recordFactory.Expect(x => x.Create(Arg <object> .Is.Equal(source))).Return(record).Repeat.Once(); fieldTransformer.Expect(x => x.ApplyTransforms( Arg <PropertyInfo> .Matches(pi => pi.Name.Equals(nameof(MockRecord.StringField))), Arg <object> .Is.Equal(record))) .Repeat.Never(); fieldTransformer.Expect(x => x.ApplyTransforms( Arg <PropertyInfo> .Matches(pi => pi.Name.Equals(nameof(MockRecord.IntField))), Arg <object> .Is.Equal(record))) .Repeat.Once(); fieldTransformer.Expect(x => x.ApplyTransforms( Arg <PropertyInfo> .Matches(pi => pi.Name.Equals(nameof(MockRecord.NullableIntField))), Arg <object> .Is.Equal(record))) .Repeat.Once(); var recordMapper = new MockRecordMapper(recordFactory, fieldTransformer: fieldTransformer); recordMapper.TryReadSourceFieldFunc = new Func <PropertyInfo, object, Tuple <bool, object, string> >((pi, src) => { switch (pi.Name) { case "StringField": return(new Tuple <bool, object, string>(false, null, "Field is not valid.")); case "IntField": return(new Tuple <bool, object, string>(true, 1, null)); case "NullableIntField": return(new Tuple <bool, object, string>(true, 2, null)); } Assert.Fail(); return(null); }); recordMapper.TryMap(source, out var mappedRecord, out var failures); recordFactory.VerifyAllExpectations(); fieldTransformer.VerifyAllExpectations(); }
public void TryMap_InvalidRecord_RecordIsNotMappedAndFailureIsReturned() { var source = new object(); var record = new MockRecord(); var recordFactory = MockRepository.GenerateMock <IRecordFactory>(); recordFactory.Expect(x => x.Create(Arg <object> .Is.Equal(source))).Return(record).Repeat.Once(); var recordMapper = new MockRecordMapper(recordFactory); recordMapper.TryReadSourceFieldFunc = new Func <PropertyInfo, object, Tuple <bool, object, string> >((pi, src) => { switch (pi.Name) { case "StringField": return(new Tuple <bool, object, string>(false, null, "Field is not valid.")); case "IntField": return(new Tuple <bool, object, string>(true, 1, null)); case "NullableIntField": return(new Tuple <bool, object, string>(true, 2, null)); } Assert.Fail(); return(null); }); var couldMap = recordMapper.TryMap(source, out var mappedRecord, out var failures); recordFactory.VerifyAllExpectations(); Assert.IsFalse(couldMap); Assert.AreEqual(mappedRecord, record); Assert.AreEqual(1, failures.Count()); Assert.AreEqual(nameof(MockRecord.StringField), failures.Single().FieldName); Assert.AreEqual("Field is not valid.", failures.Single().Message); Assert.IsNull(((MockRecord)mappedRecord).StringField); Assert.AreEqual(1, ((MockRecord)mappedRecord).IntField); Assert.AreEqual(2, ((MockRecord)mappedRecord).NullableIntField); }