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 IsCalculatedField_Saved()
        {
            StringField field = new StringField();

            field.FieldCalculation = "'abc'+123";
            field.Save();

            bool result = Factory.CalculatedFieldMetadataProvider.IsCalculatedField(field.Id);
        }
Ejemplo n.º 3
0
        public void TestCreateEntityType( )
        {
            EntityType  newType = null;
            FieldGroup  group   = null;
            StringField field1  = null;

            try
            {
                newType             = Entity.Create <EntityType>( );
                newType.Name        = "TestEntityType";
                newType.Description = "Test new EntityType";
                newType.Save( );
                long typeId = newType.Id;

                group = new FieldGroup
                {
                    Name = "TestGroup1"
                };
                newType.FieldGroups.Add(group);
                group.Save( );

                field1 = new StringField
                {
                    Name            = "TestField1",
                    AllowMultiLines = true,
                    FieldInGroup    = @group,
                    FieldIsOnType   = newType
                };

                field1.Save( );

                var savedEntityType = Entity.Get <EntityType>(new EntityRef(typeId), true);

                Assert.IsTrue(savedEntityType.Name == "TestEntityType");
                savedEntityType.Delete( );
            }
            finally
            {
                if (field1 != null)
                {
                    field1.Delete( );
                }

                if (group != null)
                {
                    group.Delete( );
                }

                if (newType != null)
                {
                    newType.Delete( );
                }
            }
        }
Ejemplo n.º 4
0
        public void FieldNameChangeDoesNotBreakExistingPolicy()
        {
            var toDelete = new List <long>();

            try
            {
                var newField = new StringField {
                    Name = "test field"
                }.As <Field>();
                newField.Save();
                toDelete.Add(newField.Id);

                var policy = new RecordChangeAuditPolicy()
                {
                    Name = "TEST ResourceAuditEventHandlerTests LogCreate", TriggeredOnType = Person.Person_Type, TriggerEnabled = true
                };
                policy.UpdatedFieldsToTriggerOn.Add(newField);
                policy.Save();
                toDelete.Add(policy.Id);

                newField      = newField.AsWritable <Field>();
                newField.Name = "Renamed field";
                newField.Save();

                var log = RunAndLog(() =>
                {
                    var person = Entity.Create <Person>();
                    person.SetField(newField, "bob");
                    person.Save();
                });

                Assert.That(log.Count, Is.EqualTo(1));

                var logEntry = log[0].As <RecordChangeLogEntry>();
                Assert.That(logEntry.Description, Is.EqualTo("[Renamed field] set to 'bob'"));
            }
            finally
            {
                Entity.Delete(toDelete);
            }
        }
Ejemplo n.º 5
0
        public void StringFieldMaxLengthNotOver10k()
        {
            var tooLargeStringLength = ReadiNow.Model.FieldTypes.StringFieldHelper.RealMaximumStringFieldLength + 1;

            StringField field = new StringField();

            field.Name       = "f1";
            field.IsRequired = true;
            field.Pattern    = Entity.Get <StringPattern>("emailPattern");
            field.IsRequired = false;
            field.MaxLength  = tooLargeStringLength;

            field.Save();
        }
Ejemplo n.º 6
0
        public void Test_Invalidated_FieldName(string name1, string sname1, string name2, string sname2, string search, bool expect1, bool expect2)
        {
            EntityType type = null;

            try
            {
                type      = new EntityType();
                type.Name = Guid.NewGuid().ToString();
                Field field = new StringField().As <Field>();
                field.Name            = name1;
                field.FieldScriptName = sname1;
                type.Fields.Add(field);
                type.Save();

                MemberInfo member = Resolver.GetMemberOfType(search, type.Id, MemberType.Any);
                Assert.That(member != null, Is.EqualTo(expect1), "First check");

                if (name2 != name1)
                {
                    field.Name = name2;
                }
                if (sname2 != sname1)
                {
                    field.FieldScriptName = sname2;
                }

                if (name2 == "Delete")
                {
                    field.Delete();
                }
                else
                {
                    field.Save();
                }

                member = Resolver.GetMemberOfType(search, type.Id, MemberType.Any);
                Assert.That(member != null, Is.EqualTo(expect2), "Second check");
            }
            finally
            {
                if (type != null)
                {
                    type.Delete();
                }
            }
        }
Ejemplo n.º 7
0
        public static EntityType CreateDefinition(string name)
        {
            var sourceDefn = new EntityType
            {
                Name = name
            };
            //add a string field to the definition
            var strField = new StringField
            {
                Name = "String field"
            };

            strField.Save( );
            //// cast to type to "Add" field & save definition
            sourceDefn.Fields.Add(strField.As <Field>( ));
            sourceDefn.Save( );

            return(sourceDefn);
        }
Ejemplo n.º 8
0
        public void Setup( )
        {
            // Getting Forbidden? Or ConnectorConfigException?
            // Maybe there's duplicate copies of these objects in the DB.

            // Define key and user
            using (new TenantAdministratorContext(TenantName))
            {
                // Define schema
                type = new EntityType( );
                type.Inherits.Add(UserResource.UserResource_Type);
                type.Name = "Test type " + Guid.NewGuid( );
                type.Save( );

                type2 = new EntityType();
                type2.Inherits.Add(UserResource.UserResource_Type);
                type2.Name = "Test type2 " + Guid.NewGuid();
                type2.Save();

                stringField               = new StringField( );
                stringField.Name          = "Field 1";
                stringField.FieldIsOnType = type;
                stringField.Save( );

                lookup = new Relationship();
                lookup.Cardinality_Enum = CardinalityEnum_Enumeration.OneToOne;
                lookup.FromType         = type;
                lookup.ToType           = type2;

                // Define API
                mapping            = new ApiResourceMapping( );
                mapping.Name       = "Test mapping " + Guid.NewGuid( );;
                mapping.MappedType = type;
                mapping.Save( );

                lookupMapping      = new ApiRelationshipMapping();
                lookupMapping.Name = "lookup1";
                lookupMapping.MappedRelationship       = lookup;
                lookupMapping.MemberForResourceMapping = mapping;
                lookupMapping.Save();

                fieldMapping             = new ApiFieldMapping( );
                fieldMapping.Name        = "field1";
                fieldMapping.MappedField = stringField.As <Field>( );
                fieldMapping.MemberForResourceMapping = mapping;
                fieldMapping.Save( );

                endpoint      = new ApiResourceEndpoint( );
                endpoint.Name = "Test endpoint " + Guid.NewGuid( );
                endpoint.ApiEndpointAddress      = EndpointAddress;
                endpoint.EndpointResourceMapping = mapping;
                endpoint.ApiEndpointEnabled      = true;
                endpoint.EndpointCanCreate       = true;
                endpoint.EndpointCanDelete       = true;
                endpoint.EndpointCanUpdate       = true;
                endpoint.Save( );

                api            = new Api( );
                api.Name       = "Test API " + Guid.NewGuid( );;
                api.ApiAddress = ApiAddress;
                api.ApiEnabled = true;
                api.ApiEndpoints.Add(endpoint.As <ApiEndpoint>( ));
                api.Save( );

                // Define access
                userAccount      = new UserAccount( );
                userAccount.Name = "Test user " + Guid.NewGuid( );
                userAccount.AccountStatus_Enum = UserAccountStatusEnum_Enumeration.Active;
                userAccount.Password           = "******";
                userAccount.Save( );

                key      = new ApiKey( );
                key.Name = ApiKey;
                key.ApiKeyUserAccount = userAccount;
                key.ApiKeyEnabled     = true;
                key.KeyForApis.Add(api);
                key.Save( );

                updateInstance             = Entity.Create(type).AsWritable <Resource>( );
                updateInstance.Name        = updateInstanceName = "ResourceToUpdate" + Guid.NewGuid( );
                updateInstance.Description = updateInstanceDesc = "ResourceToUpdate" + Guid.NewGuid( );
                updateInstance.Save( );
                updateInstanceGuid = updateInstance.UpgradeId;

                IAccessRuleFactory accessControlHelper = new AccessRuleFactory( );
                accessRule = accessControlHelper.AddAllowCreate(userAccount.As <Subject>( ), type.As <SecurableEntity>( ));
                accessRule = accessControlHelper.AddAllowByQuery(userAccount.As <Subject>( ), type.As <SecurableEntity>( ), new[] { Permissions.Read, Permissions.Modify, Permissions.Delete }, TestQueries.Entities(type).ToReport( ));
            }

            cleanup = new List <IEntity> {
                userAccount, key, api, type, mapping, endpoint, fieldMapping, stringField, accessRule, updateInstance
            };
        }
        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();
                }
            }
        }
Ejemplo n.º 10
0
        private void CreateScenarioImpl(string testInstanceName, Func <EntityRef[]> permissionsCallback)
        {
            // Define key and user
            using (new TenantAdministratorContext(TenantName))
            {
                // Define schema
                type = new EntityType( );
                type.Inherits.Add(UserResource.UserResource_Type);
                type.Name = "Test type " + Guid.NewGuid( );
                type.Save( );

                type2 = new EntityType( );
                type2.Inherits.Add(UserResource.UserResource_Type);
                type2.Name = "Test type2 " + Guid.NewGuid( );
                type2.Save( );

                stringField               = new StringField( );
                stringField.Name          = "Field 1";
                stringField.FieldIsOnType = type;
                stringField.MaxLength     = 50;
                stringField.Save( );

                lookup = new Relationship( );
                lookup.Cardinality_Enum = CardinalityEnum_Enumeration.OneToOne;
                lookup.FromType         = type;
                lookup.ToType           = type2;

                relationship = new Relationship( );
                relationship.Cardinality_Enum = CardinalityEnum_Enumeration.ManyToMany;
                relationship.FromType         = type;
                relationship.ToType           = type2;

                // Define API
                mapping            = new ApiResourceMapping( );
                mapping.Name       = "Test mapping " + Guid.NewGuid( );;
                mapping.MappedType = type;
                mapping.Save( );

                fieldMapping             = new ApiFieldMapping( );
                fieldMapping.Name        = "field1";
                fieldMapping.MappedField = stringField.As <Field>( );
                fieldMapping.MemberForResourceMapping = mapping;
                fieldMapping.Save( );

                lookupMapping      = new ApiRelationshipMapping( );
                lookupMapping.Name = "lookup1";
                lookupMapping.MappedRelationship       = lookup;
                lookupMapping.MemberForResourceMapping = mapping;
                lookupMapping.Save( );

                relationshipMapping      = new ApiRelationshipMapping( );
                relationshipMapping.Name = "rel1";
                relationshipMapping.MappedRelationship       = relationship;
                relationshipMapping.MemberForResourceMapping = mapping;
                relationshipMapping.Save( );

                endpoint      = new ApiResourceEndpoint( );
                endpoint.Name = "Test endpoint " + Guid.NewGuid( );;
                endpoint.ApiEndpointAddress      = EndpointAddress;
                endpoint.EndpointResourceMapping = mapping;
                endpoint.ApiEndpointEnabled      = true;
                endpoint.EndpointCanCreate       = true;
                endpoint.EndpointCanUpdate       = true;
                endpoint.EndpointCanDelete       = true;
                endpoint.Save( );

                api            = new Api( );
                api.Name       = "Test API " + Guid.NewGuid( );;
                api.ApiAddress = ApiAddress;
                api.ApiEnabled = true;
                api.ApiEndpoints.Add(endpoint.As <ApiEndpoint>( ));
                api.Save( );

                // Define access
                userAccount      = new UserAccount( );
                userAccount.Name = "Test user " + Guid.NewGuid( );
                userAccount.AccountStatus_Enum = UserAccountStatusEnum_Enumeration.Active;
                userAccount.Password           = "******";
                userAccount.Save( );

                key      = new ApiKey( );
                key.Name = ApiKey;
                key.ApiKeyUserAccount = userAccount;
                key.ApiKeyEnabled     = true;
                key.KeyForApis.Add(api);
                key.Save( );

                if (testInstanceName != null)
                {
                    scenarioInstance = Entity.Create(type);
                    scenarioInstance.SetField("core:name", testInstanceName);
                    scenarioInstance.Save( );
                }

                foreignName     = "Foreign" + Guid.NewGuid( ).ToString( );
                foreignInstance = Entity.Create(type2);
                foreignInstance.SetField("core:name", foreignName);
                foreignInstance.Save( );

                // Grant create
                var permissions = permissionsCallback( );
                IAccessRuleFactory accessControlHelper = new AccessRuleFactory( );
                if (permissions [0] == Permissions.Create)
                {
                    accessControlHelper.AddAllowCreate(userAccount.As <Subject>( ), type.As <SecurableEntity>( ));
                }
                else if (permissions.Length > 0)
                {
                    accessControlHelper.AddAllowByQuery(userAccount.As <Subject>( ), type.As <SecurableEntity>( ), permissions, TestQueries.Entities(type).ToReport( ));
                }

                accessControlHelper.AddAllowByQuery(userAccount.As <Subject>( ), type2.As <SecurableEntity>( ), new [] { Permissions.Read, Permissions.Modify }, TestQueries.Entities(type2).ToReport( ));
            }
        }