Example #1
0
        public void GetCalculatedFieldValues_SingleField_Valid()
        {
            long fieldId = 123;

            long[] entityIDs = new long[] { 456, 789 };
            CalculatedFieldSettings         settings = new CalculatedFieldSettings();
            Mock <ICalculatedFieldProvider> mockProvider;
            IReadOnlyCollection <CalculatedFieldSingleResult> mockEvaluatorResult;
            IReadOnlyCollection <CalculatedFieldResult>       mockProviderResult;
            CalculatedFieldResult actualResult;

            // Mock provider
            mockEvaluatorResult = entityIDs.Select(id => new CalculatedFieldSingleResult(id, "a")).ToArray();
            mockProviderResult  = new[] { new CalculatedFieldResult(fieldId, mockEvaluatorResult) };
            mockProvider        = new Mock <ICalculatedFieldProvider>(MockBehavior.Strict);
            mockProvider
            .Setup(p => p.GetCalculatedFieldValues(
                       It.Is <IReadOnlyCollection <long> >(fields => fields.Count == 1 && fields.First() == fieldId),
                       entityIDs,
                       settings))
            .Returns(mockProviderResult);

            // Test extension method
            actualResult = mockProvider.Object.GetCalculatedFieldValues(fieldId, entityIDs, settings);

            // Verify
            Assert.That(actualResult, Is.Not.Null);
            Assert.That(actualResult.FieldId, Is.EqualTo(fieldId));
            Assert.That(actualResult.Entities, Is.Not.Null);
            Assert.That(actualResult.Entities, Is.EqualTo(mockEvaluatorResult));

            mockProvider.VerifyAll();
        }
Example #2
0
        public void GetCalculatedFieldValues_SingleEntity_EvaluationException()
        {
            long fieldId  = 123;
            long entityId = 456;
            CalculatedFieldSettings         settings = new CalculatedFieldSettings();
            Mock <ICalculatedFieldProvider> mockProvider;
            IReadOnlyCollection <CalculatedFieldSingleResult> mockEvaluatorResult;
            IReadOnlyCollection <CalculatedFieldResult>       mockProviderResult;
            EvaluationException exception;
            object actualResult;

            // Mock provider
            exception           = new EvaluationException("Test error");
            mockEvaluatorResult = new[] { new CalculatedFieldSingleResult(entityId, exception) };
            mockProviderResult  = new[] { new CalculatedFieldResult(fieldId, mockEvaluatorResult) };
            mockProvider        = new Mock <ICalculatedFieldProvider>(MockBehavior.Strict);
            mockProvider
            .Setup(p => p.GetCalculatedFieldValues(
                       It.Is <IReadOnlyCollection <long> >(fields => fields.Count == 1 && fields.First() == fieldId),
                       It.Is <IReadOnlyCollection <long> >(fields => fields.Count == 1 && fields.First() == entityId),
                       settings))
            .Returns(mockProviderResult);

            // Test extension method
            actualResult = mockProvider.Object.GetCalculatedFieldValue(fieldId, entityId, settings);

            // Verify
            // (Parse exception causes fields to return null)
            Assert.That(actualResult, Is.Null);
            mockProvider.VerifyAll();
        }
Example #3
0
        public void GetCalculatedFieldMetadata_SingleField_ParseException()
        {
            long fieldId = 123;
            CalculatedFieldSettings settings = new CalculatedFieldSettings();
            Mock <ICalculatedFieldMetadataProvider> mockProvider;
            CalculatedFieldMetadata mockSingleResult;
            IReadOnlyCollection <CalculatedFieldMetadata> mockProviderResult;
            CalculatedFieldMetadata actualResult;
            ParseException          parseException = new ParseException("Test");

            // Mock provider
            mockSingleResult   = new CalculatedFieldMetadata(fieldId, "calc", null, parseException);
            mockProviderResult = new[] { mockSingleResult };
            mockProvider       = new Mock <ICalculatedFieldMetadataProvider>(MockBehavior.Strict);
            mockProvider
            .Setup(p => p.GetCalculatedFieldMetadata(It.Is <IReadOnlyCollection <long> >(fields => fields.Count == 1 && fields.First() == fieldId), settings))
            .Returns(mockProviderResult);

            // Test extension method
            actualResult = mockProvider.Object.GetCalculatedFieldMetadata(fieldId, settings);

            // Verify
            Assert.That(actualResult, Is.EqualTo(mockSingleResult));

            mockProvider.VerifyAll();
        }
Example #4
0
        public void GetCalculatedFieldValues_SingleEntity_Valid()
        {
            long fieldId  = 123;
            long entityId = 456;
            CalculatedFieldSettings         settings = new CalculatedFieldSettings();
            Mock <ICalculatedFieldProvider> mockProvider;
            IReadOnlyCollection <CalculatedFieldSingleResult> mockEvaluatorResult;
            IReadOnlyCollection <CalculatedFieldResult>       mockProviderResult;
            object mockResult = "a";
            object actualResult;

            // Mock provider
            mockEvaluatorResult = new[] { new CalculatedFieldSingleResult(entityId, mockResult) };
            mockProviderResult  = new[] { new CalculatedFieldResult(fieldId, mockEvaluatorResult) };
            mockProvider        = new Mock <ICalculatedFieldProvider>(MockBehavior.Strict);
            mockProvider
            .Setup(p => p.GetCalculatedFieldValues(
                       It.Is <IReadOnlyCollection <long> >(fields => fields.Count == 1 && fields.First() == fieldId),
                       It.Is <IReadOnlyCollection <long> >(fields => fields.Count == 1 && fields.First() == entityId),
                       settings))
            .Returns(mockProviderResult);

            // Test extension method
            actualResult = mockProvider.Object.GetCalculatedFieldValue(fieldId, entityId, settings);

            // Verify
            Assert.That(actualResult, Is.EqualTo(mockResult));

            mockProvider.VerifyAll();
        }
Example #5
0
        public void GetCalculatedFieldValues_SingleField_ParseException()
        {
            long fieldId = 123;

            long[] entityIDs = new long[] { 456, 789 };
            CalculatedFieldSettings                     settings = new CalculatedFieldSettings();
            Mock <ICalculatedFieldProvider>             mockProvider;
            IReadOnlyCollection <CalculatedFieldResult> mockProviderResult;
            ParseException        exception;
            CalculatedFieldResult actualResult;

            // Mock provider
            exception          = new ParseException("Test error");
            mockProviderResult = new[] { new CalculatedFieldResult(fieldId, exception) };
            mockProvider       = new Mock <ICalculatedFieldProvider>(MockBehavior.Strict);
            mockProvider
            .Setup(p => p.GetCalculatedFieldValues(
                       It.Is <IReadOnlyCollection <long> >(fields => fields.Count == 1 && fields.First() == fieldId),
                       entityIDs,
                       settings))
            .Returns(mockProviderResult);

            // Test extension method
            // (evaluation exceptions should not cause the bulk-entity mechanism to throw)
            actualResult = mockProvider.Object.GetCalculatedFieldValues(fieldId, entityIDs, settings);

            // Verify
            Assert.That(actualResult, Is.Not.Null);
            Assert.That(actualResult.FieldId, Is.EqualTo(fieldId));
            Assert.That(actualResult.Entities, Is.Null);

            mockProvider.VerifyAll();
        }
Example #6
0
        public void GetEvaluationSettings_FromCalcSettings()
        {
            CalculatedFieldSettings calcSettings = new CalculatedFieldSettings();

            calcSettings.TimeZone = "Japan/Tokyo";

            EvaluationSettings evalSettings = CalculatedFieldProvider.CreateEvaluationSettings(calcSettings);

            Assert.That(evalSettings.TimeZoneName, Is.EqualTo("Japan/Tokyo"));
        }
Example #7
0
        public void GetEvaluationSettings_Both()
        {
            try
            {
                RequestContext.SetContext(null, null, null, "Japan/Tokyo");

                CalculatedFieldSettings calcSettings = new CalculatedFieldSettings();
                calcSettings.TimeZone = "Australia/Brisbane";

                EvaluationSettings evalSettings = CalculatedFieldProvider.CreateEvaluationSettings(calcSettings);
                Assert.That(evalSettings.TimeZoneName, Is.EqualTo("Australia/Brisbane"));
            }
            finally
            {
                RequestContext.FreeContext();
            }
        }
Example #8
0
        public void Test_ParseException()
        {
            long[] fieldIds  = new long[] { 11, 22 };
            long[] entityIds = new long[] { 33, 44, 55 };
            CalculatedFieldSettings settings = new CalculatedFieldSettings {
                TimeZone = "Australia/Sydney"
            };
            CalculatedFieldProvider provider;
            Mock <ICalculatedFieldMetadataProvider> mockMetadataProvider;
            Mock <IEntityRepository> mockEntityRepository;
            Mock <IExpressionRunner> mockExpressionRunner;
            IReadOnlyCollection <CalculatedFieldMetadata> mockMetadata;
            IReadOnlyCollection <CalculatedFieldResult>   actualResult;
            IReadOnlyCollection <IEntity> mockEntities;
            int mockFirstResult = 100;
            Mock <IExpression> mockExpression;
            ParseException     exception = new ParseException("Test error");

            // Mock metadata provider
            mockExpression       = new Mock <IExpression>();
            mockMetadata         = new[] { new CalculatedFieldMetadata(11, "abc", null, exception), new CalculatedFieldMetadata(22, "abc", mockExpression.Object, null) };
            mockMetadataProvider = new Mock <ICalculatedFieldMetadataProvider>(MockBehavior.Strict);
            mockMetadataProvider
            .Setup(p => p.GetCalculatedFieldMetadata(fieldIds, settings))
            .Returns(mockMetadata);

            // Mock entity repository
            mockEntities         = entityIds.Select(id => new Mock <IEntity>().Object).ToArray();
            mockEntityRepository = new Mock <IEntityRepository>(MockBehavior.Strict);
            mockEntityRepository.Setup(er => er.Get(entityIds)).Returns(mockEntities);

            // Mock expression runner
            mockExpressionRunner = new Mock <IExpressionRunner>(MockBehavior.Strict);
            int runResult = mockFirstResult;

            foreach (IEntity entity in mockEntities)
            {
                mockExpressionRunner
                .Setup(exprRun => exprRun.Run(
                           mockExpression.Object,
                           It.Is <EvaluationSettings>(evalSetting => evalSetting.ContextEntity == entity)))
                .Returns(() => new ExpressionRunResult(runResult++));
            }

            // Run test
            provider     = new CalculatedFieldProvider(mockMetadataProvider.Object, mockExpressionRunner.Object, mockEntityRepository.Object);
            actualResult = provider.GetCalculatedFieldValues(fieldIds, entityIds, settings);

            // Verify
            Assert.That(actualResult, Has.Count.EqualTo(2));

            var firstField = actualResult.First();

            Assert.That(firstField, Is.Not.Null);
            Assert.That(firstField.FieldId, Is.EqualTo(fieldIds.First()));
            Assert.That(firstField.ParseException, Is.EqualTo(exception));
            Assert.That(firstField.Entities, Is.Null);

            var lastField  = actualResult.Last();
            var lastResult = lastField.Entities.Last();

            Assert.That(lastResult, Is.Not.Null);
            Assert.That(lastResult.EvaluationException, Is.Null);
            Assert.That(lastResult.Result, Is.EqualTo(mockFirstResult + 2));

            mockMetadataProvider.VerifyAll();
            mockEntityRepository.VerifyAll();
            mockExpressionRunner.VerifyAll();
        }