示例#1
0
        public void ValueAsDate_GivenValueIsEmpty_ShouldReturnNull()
        {
            // Arrange.
            var formatter = Substitute.For <IFormatter>();

            var field = new MeetField(
                false,
                false,
                string.Empty,
                string.Empty,
                0,
                false,
                formatter);

            var testObject = new MeetFieldValue(
                field,
                string.Empty,
                new ValidatorChain());

            // Act.
            DateTime?result = testObject.ValueAsDate;

            // Assert.
            Assert.IsNull(result);
        }
示例#2
0
        public void ValueAsDate_GivenValueIsValidDate_ShouldReturnDate()
        {
            // Arrange.
            var formatter = Substitute.For <IFormatter>();

            var field = new MeetField(
                false,
                false,
                string.Empty,
                string.Empty,
                0,
                false,
                formatter);

            var testObject = new MeetFieldValue(
                field,
                "2019-7-1",
                new ValidatorChain());

            // Act.
            DateTime?result = testObject.ValueAsDate;

            // Assert.
            Assert.IsNotNull(result);

            Assert.AreEqual(
                new DateTime(2019, 7, 1),
                result);
        }
示例#3
0
        public void FormattedValue_GivenValue_ShouldReturnFormattedValue()
        {
            // Arrange.
            var formatter = Substitute.For <IFormatter>();

            var field = new MeetField(
                false,
                false,
                string.Empty,
                string.Empty,
                0,
                false,
                formatter);

            formatter
            .Format(Arg.Any <string>())
            .Returns("123");

            // Act.
            var testObject = new MeetFieldValue(
                field,
                "321",
                new ValidatorChain());

            // Assert.
            Assert.AreEqual("123", testObject.FormattedValue);
        }
        public void LeaderField_GivenLeaderNameFieldNotFound_ShouldRaiseException()
        {
            // Arrange.
            var formatter = Substitute.For <IFormatter>();

            var dateField = new MeetField(
                false,
                false,
                "Date",
                "Date",
                0,
                false,
                formatter);

            var notesField = new MeetField(
                false,
                false,
                "Notes",
                "Notes",
                0,
                false,
                formatter);

            var testObject = new MeetDetailsModel
            {
                FieldValues = new[]
                {
                    new MeetFieldValue(dateField, string.Empty, new ValidatorChain()),
                    new MeetFieldValue(notesField, string.Empty, new ValidatorChain())
                }
            };

            // Act & Assert.
            try
            {
                testObject.LeaderField();
            }
            catch (MissingMeetFieldException)
            {
                Assert.Pass();
            }

            Assert.Fail();
        }
        public void LeaderField_GivenLeaderNameFieldFound_ShouldReturnLeaderName()
        {
            // Arrange.
            var formatter = Substitute.For <IFormatter>();

            var dateField = new MeetField(
                false,
                false,
                "Date",
                "Date",
                0,
                false,
                formatter);

            var leaderField = new MeetField(
                false,
                false,
                "Leader",
                "Leader",
                0,
                false,
                formatter);

            var testObject = new MeetDetailsModel
            {
                FieldValues = new[]
                {
                    new MeetFieldValue(dateField, string.Empty, new ValidatorChain()),
                    new MeetFieldValue(leaderField, "Leader Name", new ValidatorChain())
                }
            };

            // Act.
            MeetFieldValue result = testObject.LeaderField();

            // Assert.
            Assert.NotNull(result);
            Assert.AreEqual("Leader Name", result.Value);
        }
        public async Task RetrieveMeets_GivenDateRange_ShouldOnlyReturnMeetsInRange()
        {
            // Arrange.
            var settings           = Substitute.For <ISettings>();
            var requestMaker       = Substitute.For <IRestRequestMaker>();
            var googleSheetFactory = Substitute.For <IMeetsGoogleSheetFactory>();
            var googleSheet        = Substitute.For <IMeetsGoogleSheet>();
            var dateTimeService    = Substitute.For <IDateTimeService>();
            var logger             = Substitute.For <ILogger>();
            var formatter          = NullFormatter.Instance();

            settings
            .GetValidString(Arg.Any <string>())
            .Returns("SomeSheetId");

            settings
            .GetValidString(Arg.Any <string>())
            .Returns("SomeAppKey");

            googleSheetFactory
            .CreateSheet(
                Arg.Any <Uri>(),
                Arg.Any <IRestRequestMaker>(),
                Arg.Any <ILogger>())
            .Returns(googleSheet);

            var dateField = new MeetField(
                false,
                false,
                "Date",
                "Date",
                0,
                false,
                formatter);

            googleSheet
            .Retrieve()
            .Returns(true);

            googleSheet
            .Fields
            .Returns(new[]
            {
                dateField
            });

            googleSheet
            .ValuesByRow
            .Returns(
                new[]
            {
                new[] { new MeetFieldValue(dateField, "2019-7-15", new ValidatorChain()) },
                new[] { new MeetFieldValue(dateField, "2019-7-31", new ValidatorChain()) },
                new[] { new MeetFieldValue(dateField, "2019-7-1", new ValidatorChain()) }
            });

            var testObject = new MeetsService(
                settings,
                requestMaker,
                googleSheetFactory,
                dateTimeService,
                logger);

            // Act.
            var result = await testObject.RetrieveMeets(
                new DateTime(2019, 7, 15),
                new DateTime(2019, 7, 31));

            // Assert.
            Assert.IsNotNull(result);
            Assert.AreEqual(2, result.Count());
        }
        public void Process_GivenGoogleSheet_ShouldOutputMeetDetails()
        {
            // Arrange.
            var sheet          = Substitute.For <IMeetsGoogleSheet>();
            var validatorChain = new ValidatorChain();
            var formatter      = NullFormatter.Instance();
            var field          = new MeetField(false, false, string.Empty, string.Empty, 0, false, formatter);

            sheet
            .Fields
            .Returns(new[]
            {
                new MeetField(false, false, string.Empty, "Column 1", 0, false, formatter),
                new MeetField(false, false, string.Empty, "Column 2", 0, false, formatter),
                new MeetField(false, false, string.Empty, "Column 3", 0, true, formatter),
                new MeetField(true, false, string.Empty, "Column 4", 0, false, formatter),
                new MeetField(false, true, string.Empty, "Column 5", 0, false, formatter),
            });

            sheet
            .ValuesByRow
            .Returns(new[]
            {
                new[]
                {
                    new MeetFieldValue(field, "R1C1", validatorChain),
                    new MeetFieldValue(field, "R1C2", validatorChain),
                    new MeetFieldValue(field, "R1C3", validatorChain),
                    new MeetFieldValue(field, "R1C4", validatorChain),
                    new MeetFieldValue(field, "R1C5", validatorChain)
                },
                new[]
                {
                    new MeetFieldValue(field, "R2C1", validatorChain),
                    new MeetFieldValue(field, "R2C2", validatorChain),
                    new MeetFieldValue(field, "R2C3", validatorChain),
                    new MeetFieldValue(field, "R2C4", validatorChain),
                    new MeetFieldValue(field, "R2C5", validatorChain)
                },
            });

            sheet
            .FindHeaderIndex("Column 3", Arg.Any <bool>())
            .Returns(2);

            sheet
            .FindHeaderIndex("Column 5", Arg.Any <bool>())
            .Returns(4);

            // Act.
            GoogleSheetToMeetDetailsTransformer.Process(
                sheet,
                out IEnumerable <MeetDetailsModel> models);

            // Assert.
            Assert.IsNotNull(models);

            Assert.AreEqual(2, models.Count());

            Assert.AreEqual("R1C1", models.ElementAt(0).FieldValues.ElementAt(0).Value);
            Assert.AreEqual("R2C5", models.ElementAt(1).FieldValues.ElementAt(4).Value);

            Assert.AreEqual(5, models.ElementAt(0).AllFields.Count());

            Assert.AreEqual("Column 1", models.ElementAt(0).AllFields.ElementAt(0).FriendlyText);
            Assert.AreEqual("Column 5", models.ElementAt(0).AllFields.ElementAt(4).FriendlyText);

            Assert.IsTrue(models.ElementAt(0).AllFields.ElementAt(3).DisplayInHeader);
            Assert.IsTrue(models.ElementAt(0).AllFields.ElementAt(4).IsRequired);
            Assert.IsTrue(models.ElementAt(0).AllFields.ElementAt(2).IsMeetTitle);
        }