Exemplo n.º 1
0
        public void TestSaveFormDefinitionFieldProtectedApp()
        {
            EntityType     definition;
            CustomEditForm editForm;
            UserAccount    userAccount;

            using (new SecurityBypassContext())
            {
                var solution = new Solution
                {
                    Name = "TestSolution" + Guid.NewGuid(),
                    CanModifyApplication = true
                };
                solution.Save();

                definition = new EntityType();
                definition.Inherits.Add(UserResource.UserResource_Type);
                definition.InSolution = solution;

                editForm = new CustomEditForm
                {
                    TypeToEditWithForm = definition,
                    InSolution         = solution
                };
                editForm.Save();

                // Protect the app
                solution.CanModifyApplication = false;
                solution.Save();

                userAccount = Entity.GetByField <UserAccount>(SpecialStrings.TenantAdministratorUser, false, new EntityRef("core", "name")).FirstOrDefault();
            }

            using (new SetUser(userAccount))
            {
                // Adding new field to the definition.
                // This should succeed
                var sField = new StringField();
                definition.Fields.Add(sField.As <Field>());
                Entity.Save(new IEntity[] { editForm, definition, sField });

                // Update the new field
                // This should succeed
                sField.Name = Guid.NewGuid().ToString();
                Entity.Save(new IEntity[] { editForm, definition, sField });

                // Remove the field from the definition
                // This should succeed
                sField = Entity.Get <StringField>(sField.Id);
                definition.Fields.Remove(sField.As <Field>());
                Entity.Save(new IEntity[] { editForm, definition, sField });

                // Delete the field
                Entity.Delete(sField.Id);
            }
        }
Exemplo n.º 2
0
        public void TestRemoveProtectedFieldFromDefinitionProtectedApp()
        {
            EntityType     definition;
            CustomEditForm editForm;
            UserAccount    userAccount;
            StringField    protectedField;

            using (new SecurityBypassContext())
            {
                var solution = new Solution
                {
                    Name = "TestSolution" + Guid.NewGuid(),
                    CanModifyApplication = true
                };
                solution.Save();

                definition = new EntityType();
                definition.Inherits.Add(UserResource.UserResource_Type);
                definition.InSolution = solution;

                protectedField = new StringField {
                    InSolution = solution
                };
                definition.Fields.Add(protectedField.As <Field>());

                editForm = new CustomEditForm
                {
                    TypeToEditWithForm = definition,
                    InSolution         = solution
                };
                editForm.Save();

                // Protect the app
                solution.CanModifyApplication = false;
                solution.Save();

                userAccount = Entity.GetByField <UserAccount>(SpecialStrings.TenantAdministratorUser, false, new EntityRef("core", "name")).FirstOrDefault();
            }

            using (new SetUser(userAccount))
            {
                // Adding new field to the definition.
                // This should fail
                definition.Fields.Remove(protectedField.As <Field>());
                Assert.That(() => Entity.Save(new IEntity[] { editForm, definition }), Throws.TypeOf <PlatformSecurityException>());

                // Delete the field
                Assert.That(() => Entity.Delete(protectedField.Id), Throws.TypeOf <PlatformSecurityException>());
            }
        }
Exemplo n.º 3
0
        /// <summary>
        ///     Given a type, get the default form for it.
        /// </summary>
        /// <param name="entityType">Type of the entity.</param>
        /// <param name="isInDesignMode">if set to <c>true</c> [is in design mode].</param>
        /// <param name="forceGenerate">Force a generated form to be used</param>
        /// <returns>
        ///     A response containing entity data for the form
        /// </returns>
        public static HttpResponseMessage <JsonQueryResult> GetDefaultFormForType(EntityType entityType, bool isInDesignMode, bool forceGenerate)
        {
            CustomEditForm formRef = entityType.DefaultEditForm;

            if (formRef != null && !forceGenerate)
            {
                var entityBatch = new EntityPackage( );

                EntityData formEntityData = EditFormHelper.GetFormAsEntityData(formRef);

                entityBatch.AddEntityData(formEntityData, "formEntity");

                return(new HttpResponseMessage <JsonQueryResult>(entityBatch.GetQueryResult( )));
            }
            //TODO: return something to indicate that there is no form
            return(GetGeneratedFormForType(entityType, isInDesignMode));
        }
        /// <summary>
        ///     Ensures the form is the default form for the type.
        /// </summary>
        /// <param name="form">The form.</param>
        /// <param name="state">The state.</param>
        private void EnsureIsDefaultFormForType(CustomEditForm form, IDictionary <string, object> state)
        {
            IEntityFieldValues changedFields;
            IDictionary <long, IChangeTracker <IMutableIdKey> > changedFwdRelationships;
            IDictionary <long, IChangeTracker <IMutableIdKey> > changedRevRelationships;

            form.GetChanges(out changedFields, out changedFwdRelationships, out changedRevRelationships, false, false);

            if (changedRevRelationships == null || changedRevRelationships.Count == 0)
            {
                // No changes
                return;
            }

            var saveGraph = EventTargetStateHelper.GetSaveGraph(state);

            ResourceEventTarget.EnsureIsOnlyRelationship(EntityType.DefaultEditForm_Field.Id, true, form, changedRevRelationships, saveGraph);
        }
        private TestState CreateTestEntities(string nameVisibilityCalc, string descriptionVisibilityCalc, string name,
                                             string description)
        {
            var testType = new EntityType {
                Name = "VisCalc Type"
            };
            var testTypeForm = new CustomEditForm {
                Name = "VisCalc Type Form", TypeToEditWithForm = testType
            };

            var nameControl = new SingleLineTextControl
            {
                FieldToRender         = EntityType.Name_Field.As <Field>(),
                VisibilityCalculation = nameVisibilityCalc
            };

            testTypeForm.ContainedControlsOnForm.Add(nameControl.As <ControlOnForm>());

            var descriptionControl = new SingleLineTextControl
            {
                FieldToRender         = EntityType.Description_Field.As <Field>(),
                VisibilityCalculation = descriptionVisibilityCalc
            };

            testTypeForm.ContainedControlsOnForm.Add(descriptionControl.As <ControlOnForm>());

            testTypeForm.Save();

            var instance = Entity.Create(testType);

            instance.SetField("core:name", name);
            instance.SetField("core:description", description);
            instance.Save();

            return(new TestState
            {
                Instance = instance,
                NameControl = nameControl,
                DescriptionControl = descriptionControl,
                EditForm = testTypeForm
            });
        }
Exemplo n.º 6
0
        public void GetActionsWithReportOnTabControlInForm()
        {
            // arrange
            var resource = Entity.Create <Resource>();
            var report   = Entity.Create <ReadiNow.Model.Report>();

            var testType1 = new EntityType {
                Name = "Test Type 1"
            };
            var testType2 = new EntityType {
                Name = "Test Type 2"
            };
            var testType1Form = new CustomEditForm {
                Name = "testType1Form", TypeToEditWithForm = testType1
            };
            var testType2Form = new CustomEditForm {
                Name = "testType2Form", TypeToEditWithForm = testType2
            };

            var tabControl = new TabRelationshipRenderControl {
                ResourceViewerConsoleForm = testType1Form
            };                                                                                                  // assign custom form to tab host control

            report.ResourceViewerConsoleForm     = testType2Form;                                               // assign custom form to the report
            tabControl.RelationshipDisplayReport = report;

            report.Save( );
            resource.Save( );
            testType1.Save( );
            testType2.Save( );
            testType1Form.Save( );
            testType2Form.Save( );
            tabControl.Save( );

            var svc = new ActionService( );

            svc.FlushCaches();

            var request = new ActionRequestExtended
            {
                LastSelectedResourceId = resource.Id,
                SelectedResourceIds    = new[] { resource.Id },
                HostResourceIds        = new[] { tabControl.Id },
                ReportId             = report.Id,
                ActionDisplayContext = ActionContext.QuickMenu
            };

            // act
            var result = svc.GetActions(request);

            // assert
            result.Should().NotBeNull();

            request.SelectedResources.Should().NotBeNull().And.NotBeEmpty();
            request.SelectedResources.Count().Should().Be(1);
            request.SelectedResources.Should().Contain(r => r.Id == resource.Id);
            request.LastSelectedResource.Should().NotBeNull();
            request.SelectedResourceTypes.Should().NotBeNull().And.NotBeEmpty();
            foreach (EntityType t in resource.EntityTypes)
            {
                var type = request.SelectedResourceTypes.FirstOrDefault(a => a.Id == t.Id);
                type.Should().NotBeNull();
                if (type == null)
                {
                    continue;
                }
                type.Alias.Should().Be(t.Alias);
                type.TenantId.Should().Be(t.TenantId);
            }


            result.Actions.Should().NotBeNull();
            RemovePowerTools(result);

            result.Actions.Count.Should().Be(8);

            result.Actions[0].Name.Should().Be("View 'Resource'"); // View
            result.Actions[0].Order.Should().Be(10);
            result.Actions[0].AdditionalData.Should().NotBeNull().And.NotBeEmpty();
            result.Actions[0].AdditionalData["CustomForm"].Should().Be(tabControl.ResourceViewerConsoleForm.Id);    // make sure the form is the one assigned to tab control, not the form assigned to report
            result.Actions[0].AdditionalData["CustomFormEditsTypeId"].Should().Be(testType1.Id);

            result.Actions[1].Name.Should().Be("Edit 'Resource'"); // Edit
            result.Actions[1].Order.Should().Be(20);
            result.Actions[1].AdditionalData.Should().NotBeNull().And.NotBeEmpty();
            result.Actions[1].AdditionalData["CustomForm"].Should().Be(tabControl.ResourceViewerConsoleForm.Id);
            result.Actions[1].AdditionalData["CustomFormEditsTypeId"].Should().Be(testType1.Id);

            result.Actions[2].Name.Should().Be("Link to Existing"); // Link
            result.Actions[2].Order.Should().Be(25);
            result.Actions[2].AdditionalData.Should().NotBeNull().And.NotBeEmpty();
            result.Actions[2].AdditionalData["CustomForm"].Should().Be(tabControl.ResourceViewerConsoleForm.Id);
            result.Actions[2].AdditionalData["CustomFormEditsTypeId"].Should().Be(testType1.Id);

            result.Actions[3].Name.Should().Be("Remove Link"); // Remove Link
            result.Actions[3].Order.Should().Be(26);
            result.Actions[3].AdditionalData.Should().NotBeNull().And.NotBeEmpty();
            result.Actions[3].AdditionalData["CustomForm"].Should().Be(tabControl.ResourceViewerConsoleForm.Id);
            result.Actions[3].AdditionalData["CustomFormEditsTypeId"].Should().Be(testType1.Id);

            result.Actions[4].Name.Should().Be("Delete 'Resource'"); // Delete
            result.Actions[4].Order.Should().Be(30);
            result.Actions[4].AdditionalData.Should().NotBeNull().And.NotBeEmpty();
            result.Actions[4].AdditionalData["CustomForm"].Should().Be(tabControl.ResourceViewerConsoleForm.Id);
            result.Actions[4].AdditionalData["CustomFormEditsTypeId"].Should().Be(testType1.Id);

            result.Actions[5].Name.Should().Be("Excel"); // Excel
            result.Actions[5].Order.Should().Be(500);
            result.Actions[5].AdditionalData.Should().NotBeNull().And.NotBeEmpty();
            result.Actions[5].AdditionalData["CustomForm"].Should().Be(tabControl.ResourceViewerConsoleForm.Id);
            result.Actions[5].AdditionalData["CustomFormEditsTypeId"].Should().Be(testType1.Id);

            result.Actions[6].Name.Should().Be("CSV"); // CSV
            result.Actions[6].Order.Should().Be(501);
            result.Actions[6].AdditionalData.Should().NotBeNull().And.NotBeEmpty();
            result.Actions[6].AdditionalData["CustomForm"].Should().Be(tabControl.ResourceViewerConsoleForm.Id);
            result.Actions[6].AdditionalData["CustomFormEditsTypeId"].Should().Be(testType1.Id);

            result.Actions[7].Name.Should().Be("Word"); // Word
            result.Actions[7].Order.Should().Be(502);
            result.Actions[7].AdditionalData.Should().NotBeNull().And.NotBeEmpty();
            result.Actions[7].AdditionalData["CustomForm"].Should().Be(tabControl.ResourceViewerConsoleForm.Id);
            result.Actions[7].AdditionalData["CustomFormEditsTypeId"].Should().Be(testType1.Id);
        }