Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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();
        }
Esempio n. 6
0
        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);
        }