public void EnsureMetadata_Invalidates_WhenCalculationChanged() { EntityType type = null; Field field = null; Field calcField = null; try { // Create scenario type = new EntityType(); type.Name = "CFType"; field = new StringField().As <Field>(); field.Name = "CFField"; field.Save(); calcField = new StringField().As <Field>(); calcField.Name = "CFCalcField"; calcField.FieldCalculation = "'A'+CFField"; calcField.IsCalculatedField = true; calcField.Save(); type.Fields.Add(field); type.Fields.Add(calcField); type.Save(); // Get provider ICalculatedFieldMetadataProvider provider = Factory.CalculatedFieldMetadataProvider; // Run CalculatedFieldMetadata res1 = provider.GetCalculatedFieldMetadata(calcField.Id, CalculatedFieldSettings.Default); CalculatedFieldMetadata res2 = provider.GetCalculatedFieldMetadata(calcField.Id, CalculatedFieldSettings.Default); // Ensure same instance was returned (came from cache) Assert.That(res2, Is.SameAs(res1)); // Delete the field calcField.FieldCalculation = "'B'+CFField"; calcField.Save(); // Rerun CalculatedFieldMetadata res3 = provider.GetCalculatedFieldMetadata(calcField.Id, CalculatedFieldSettings.Default); // Ensure different instance was returned (not from cache) Assert.That(res3, Is.Not.SameAs(res1)); Assert.That(res3.Calculation, Is.EqualTo("'B'+CFField")); // because the script is now invalid } finally { if (field != null) { field.Delete(); } if (calcField != null) { calcField.Delete(); } if (type != null) { type.Delete(); } } }
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(); }
public void EnsureMetadata_Invalidates_WhenFieldRenamedToCorrectName() { EntityType type = null; Field field = null; Field calcField = null; try { // Create scenario type = new EntityType(); type.Name = "CFType"; field = new StringField().As <Field>(); field.Name = "CFFieldWrongName"; field.Save(); calcField = new StringField().As <Field>(); calcField.Name = "CFCalcField"; calcField.FieldCalculation = "'A'+CFFieldRightName"; calcField.IsCalculatedField = true; calcField.Save(); type.Fields.Add(field); type.Fields.Add(calcField); type.Save(); // Get provider ICalculatedFieldMetadataProvider provider = Factory.CalculatedFieldMetadataProvider; // Run CalculatedFieldMetadata res1 = provider.GetCalculatedFieldMetadata(calcField.Id, CalculatedFieldSettings.Default); CalculatedFieldMetadata res2 = provider.GetCalculatedFieldMetadata(calcField.Id, CalculatedFieldSettings.Default); // Ensure same instance was returned (came from cache) Assert.That(res1.Exception, Is.Not.Null, "res1 should have error"); // because the script is invalid Assert.That(res2, Is.SameAs(res1), "res2 should be same as res1"); // Rename the field field.Name = "CFFieldRightName"; field.Save(); // Rerun CalculatedFieldMetadata res3 = provider.GetCalculatedFieldMetadata(calcField.Id, CalculatedFieldSettings.Default); // Ensure different instance was returned (not from cache) Assert.That(res3, Is.Not.SameAs(res1), "res3 should be != res1"); Assert.That(res3.Exception, Is.Null, "res3 should not have error"); // because the script is now fixed Assert.That(res3.Expression, Is.Not.Null, "res3 should have expression"); // because the script is now fixed } finally { if (field != null) { field.Delete(); } if (calcField != null) { calcField.Delete(); } if (type != null) { type.Delete(); } } }