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); } }
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>()); } }
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 }); }
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); }