protected static function makeForExplicitReadWriteModelPermissions($resolvedModelClassName) { assert('is_string($resolvedModelClassName)'); $form = new ExplicitReadWriteModelPermissionsWorkflowActionAttributeForm($resolvedModelClassName, 'permissions'); $form->setDisplayLabel(Zurmo::t('ZurmoModule', 'Who can read and write')); return $form; }
public function testExplicitReadWriteModelPermissionsWorkflowActionAttributeFormSetGetAndValidate() { $form = new ExplicitReadWriteModelPermissionsWorkflowActionAttributeForm('WorkflowModelTestItem', 'permissions'); $form->type = ExplicitReadWriteModelPermissionsWorkflowActionAttributeForm::TYPE_DYNAMIC_SAME_AS_TRIGGERED_MODEL; $form->shouldSetValue = true; $validated = $form->validate(); $this->assertTrue($validated); $form->type = ExplicitReadWriteModelPermissionsWorkflowActionAttributeForm::TYPE_DYNAMIC_OWNER; $validated = $form->validate(); $this->assertTrue($validated); $form->type = ExplicitReadWriteModelPermissionsWorkflowActionAttributeForm::TYPE_DYNAMIC_EVERYONE_GROUP; $validated = $form->validate(); $this->assertTrue($validated); $form->type = '5'; $validated = $form->validate(); $this->assertTrue($validated); }
public function testGetTypeValuesAndLabels() { $form = new CheckBoxWorkflowActionAttributeForm('WorkflowModelTestItem', 'boolean'); $valuesAndLabels = $form->getTypeValuesAndLabels(true, true); $this->assertEquals(1, count($valuesAndLabels)); $this->assertTrue($form->resolveValueBeforeSave()); $form = new CurrencyValueWorkflowActionAttributeForm('WorkflowModelTestItem', 'currencyValue'); $valuesAndLabels = $form->getTypeValuesAndLabels(true, true); $this->assertEquals(1, count($valuesAndLabels)); $this->assertTrue($form->resolveValueBeforeSave()); $form = new DateWorkflowActionAttributeForm('WorkflowModelTestItem', 'date'); $valuesAndLabels = $form->getTypeValuesAndLabels(true, true); $this->assertEquals(2, count($valuesAndLabels)); $valuesAndLabels = $form->getTypeValuesAndLabels(false, true); $this->assertEquals(3, count($valuesAndLabels)); $this->assertTrue($form->resolveValueBeforeSave()); $form = new DateTimeWorkflowActionAttributeForm('WorkflowModelTestItem', 'dateTime'); $valuesAndLabels = $form->getTypeValuesAndLabels(true, true); $this->assertEquals(2, count($valuesAndLabels)); $valuesAndLabels = $form->getTypeValuesAndLabels(false, true); $this->assertEquals(3, count($valuesAndLabels)); $this->assertTrue($form->resolveValueBeforeSave()); $form = new DecimalWorkflowActionAttributeForm('WorkflowModelTestItem', 'float'); $valuesAndLabels = $form->getTypeValuesAndLabels(true, true); $this->assertEquals(1, count($valuesAndLabels)); $this->assertTrue($form->resolveValueBeforeSave()); $form = new DropDownWorkflowActionAttributeForm('WorkflowModelTestItem', 'dropDowns'); $valuesAndLabels = $form->getTypeValuesAndLabels(true, true); $this->assertEquals(1, count($valuesAndLabels)); $valuesAndLabels = $form->getTypeValuesAndLabels(false, true); $this->assertEquals(2, count($valuesAndLabels)); $this->assertTrue($form->resolveValueBeforeSave()); $form = new EmailWorkflowActionAttributeForm('WorkflowModelTestItem', 'email'); $valuesAndLabels = $form->getTypeValuesAndLabels(true, true); $this->assertEquals(1, count($valuesAndLabels)); $valuesAndLabels = $form->getTypeValuesAndLabels(true, false); $this->assertEquals(2, count($valuesAndLabels)); $this->assertTrue($form->resolveValueBeforeSave()); $form = new IntegerWorkflowActionAttributeForm('WorkflowModelTestItem', 'integer'); $valuesAndLabels = $form->getTypeValuesAndLabels(true, true); $this->assertEquals(1, count($valuesAndLabels)); $this->assertTrue($form->resolveValueBeforeSave()); $form = new ContactStateWorkflowActionAttributeForm('WorkflowModelTestItem', 'likeContactState'); $valuesAndLabels = $form->getTypeValuesAndLabels(true, true); $this->assertEquals(1, count($valuesAndLabels)); $this->assertTrue($form->resolveValueBeforeSave()); $form = new MultiSelectDropDownWorkflowActionAttributeForm('WorkflowModelTestItem', 'multiDropDown'); $valuesAndLabels = $form->getTypeValuesAndLabels(true, true); $this->assertEquals(1, count($valuesAndLabels)); $this->assertTrue($form->resolveValueBeforeSave()); $form = new PhoneWorkflowActionAttributeForm('WorkflowModelTestItem', 'phone'); $valuesAndLabels = $form->getTypeValuesAndLabels(true, true); $this->assertEquals(1, count($valuesAndLabels)); $valuesAndLabels = $form->getTypeValuesAndLabels(true, false); $this->assertEquals(2, count($valuesAndLabels)); $this->assertTrue($form->resolveValueBeforeSave()); $form = new RadioDropDownWorkflowActionAttributeForm('WorkflowModelTestItem', 'radioDropDown'); $valuesAndLabels = $form->getTypeValuesAndLabels(true, true); $this->assertEquals(1, count($valuesAndLabels)); $valuesAndLabels = $form->getTypeValuesAndLabels(false, true); $this->assertEquals(2, count($valuesAndLabels)); $this->assertTrue($form->resolveValueBeforeSave()); $form = new TagCloudWorkflowActionAttributeForm('WorkflowModelTestItem', 'tagCloud'); $valuesAndLabels = $form->getTypeValuesAndLabels(true, true); $this->assertEquals(1, count($valuesAndLabels)); $this->assertTrue($form->resolveValueBeforeSave()); $form = new TextWorkflowActionAttributeForm('WorkflowModelTestItem', 'text'); $valuesAndLabels = $form->getTypeValuesAndLabels(true, true); $this->assertEquals(1, count($valuesAndLabels)); $valuesAndLabels = $form->getTypeValuesAndLabels(true, false); $this->assertEquals(2, count($valuesAndLabels)); $this->assertTrue($form->resolveValueBeforeSave()); $form = new TextAreaWorkflowActionAttributeForm('WorkflowModelTestItem', 'textArea'); $valuesAndLabels = $form->getTypeValuesAndLabels(true, true); $this->assertEquals(1, count($valuesAndLabels)); $valuesAndLabels = $form->getTypeValuesAndLabels(true, false); $this->assertEquals(2, count($valuesAndLabels)); $this->assertTrue($form->resolveValueBeforeSave()); $form = new UrlWorkflowActionAttributeForm('WorkflowModelTestItem', 'url'); $valuesAndLabels = $form->getTypeValuesAndLabels(true, true); $this->assertEquals(1, count($valuesAndLabels)); $valuesAndLabels = $form->getTypeValuesAndLabels(true, false); $this->assertEquals(2, count($valuesAndLabels)); $this->assertTrue($form->resolveValueBeforeSave()); $form = new UserWorkflowActionAttributeForm('WorkflowModelTestItem', 'user'); $valuesAndLabels = $form->getTypeValuesAndLabels(true, true); $this->assertEquals(2, count($valuesAndLabels)); $valuesAndLabels = $form->getTypeValuesAndLabels(false, true); $this->assertEquals(4, count($valuesAndLabels)); $this->assertTrue($form->resolveValueBeforeSave()); $form = new ExplicitReadWriteModelPermissionsWorkflowActionAttributeForm('WorkflowModelTestItem', 'permissions'); $valuesAndLabels = $form->getTypeValuesAndLabels(true, true); $this->assertEquals(3, count($valuesAndLabels)); $this->assertFalse($form->resolveValueBeforeSave()); //Make new group and confirm it shows up $group = new Group(); $group->name = 'test'; $this->assertTrue($group->save()); $form = new ExplicitReadWriteModelPermissionsWorkflowActionAttributeForm('WorkflowModelTestItem', 'permissions'); $valuesAndLabels = $form->getTypeValuesAndLabels(true, true); $this->assertEquals(4, count($valuesAndLabels)); }
public function testPermissionsResolveValueAndSetToModelUpdateAsDynamicCreatedByUser() { //Setup a triggered model that has Sarah creating and owning it. $super = Yii::app()->user->userModel; Yii::app()->user->userModel = User::getByUsername('sarah'); $triggeredModel = new WorkflowModelTestItem(); $triggeredModel->lastName = 'test'; $triggeredModel->string = 'test'; $saved = $triggeredModel->save(); $this->assertTrue($saved); Yii::app()->user->userModel = $super; //Now the super is who modified it $triggeredModel->string = 'test2'; $saved = $triggeredModel->save(); $this->assertTrue($saved); //Test same as triggered where triggered is owner $form = new ExplicitReadWriteModelPermissionsWorkflowActionAttributeForm('WorkflowsTestModule', 'WorkflowModelTestItem'); $form->type = ExplicitReadWriteModelPermissionsWorkflowActionAttributeForm::TYPE_DYNAMIC_SAME_AS_TRIGGERED_MODEL; $model = new WorkflowModelTestItem(); $model->lastName = 'test'; $model->string = 'test'; $saved = $model->save(); $this->assertTrue($saved); $adapter = new WorkflowActionProcessingModelAdapter($model, Yii::app()->user->userModel, $triggeredModel); $form->resolveValueAndSetToModel($adapter, 'permissions'); $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($model); $this->assertEquals(0, $explicitReadWriteModelPermissions->getReadWritePermitablesCount()); //Test same as triggered where triggered is not owner $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($triggeredModel); $explicitReadWriteModelPermissions->addReadWritePermitable(self::$groupTest); $success = ExplicitReadWriteModelPermissionsUtil::resolveExplicitReadWriteModelPermissions($triggeredModel, $explicitReadWriteModelPermissions); $this->assertTrue($success); $form = new ExplicitReadWriteModelPermissionsWorkflowActionAttributeForm('WorkflowsTestModule', 'WorkflowModelTestItem'); $form->type = ExplicitReadWriteModelPermissionsWorkflowActionAttributeForm::TYPE_DYNAMIC_SAME_AS_TRIGGERED_MODEL; $model = new WorkflowModelTestItem(); $model->lastName = 'test'; $model->string = 'test'; $saved = $model->save(); $this->assertTrue($saved); $adapter = new WorkflowActionProcessingModelAdapter($model, Yii::app()->user->userModel, $triggeredModel); $form->resolveValueAndSetToModel($adapter, 'permissions'); $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($model); $this->assertEquals(1, $explicitReadWriteModelPermissions->getReadWritePermitablesCount()); $readWritePermitables = $explicitReadWriteModelPermissions->getReadWritePermitables(); $this->assertTrue(isset($readWritePermitables[self::$groupTest->id])); //Test same as owner $form = new ExplicitReadWriteModelPermissionsWorkflowActionAttributeForm('WorkflowsTestModule', 'WorkflowModelTestItem'); $form->type = ExplicitReadWriteModelPermissionsWorkflowActionAttributeForm::TYPE_DYNAMIC_OWNER; $model = new WorkflowModelTestItem(); $model->lastName = 'test'; $model->string = 'test'; $saved = $model->save(); $this->assertTrue($saved); $adapter = new WorkflowActionProcessingModelAdapter($model, Yii::app()->user->userModel, $triggeredModel); $form->resolveValueAndSetToModel($adapter, 'permissions'); $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($model); $this->assertEquals(0, $explicitReadWriteModelPermissions->getReadWritePermitablesCount()); //Test everyone group $form = new ExplicitReadWriteModelPermissionsWorkflowActionAttributeForm('WorkflowsTestModule', 'WorkflowModelTestItem'); $form->type = ExplicitReadWriteModelPermissionsWorkflowActionAttributeForm::TYPE_DYNAMIC_EVERYONE_GROUP; $model = new WorkflowModelTestItem(); $model->lastName = 'test'; $model->string = 'test'; $saved = $model->save(); $this->assertTrue($saved); $adapter = new WorkflowActionProcessingModelAdapter($model, Yii::app()->user->userModel, $triggeredModel); $form->resolveValueAndSetToModel($adapter, 'permissions'); $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($model); $this->assertEquals(1, $explicitReadWriteModelPermissions->getReadWritePermitablesCount()); $readWritePermitables = $explicitReadWriteModelPermissions->getReadWritePermitables(); $everyoneGroup = Group::getByName(Group::EVERYONE_GROUP_NAME); $this->assertTrue(isset($readWritePermitables[$everyoneGroup->id])); //Test a specific group $form = new ExplicitReadWriteModelPermissionsWorkflowActionAttributeForm('WorkflowsTestModule', 'WorkflowModelTestItem'); $form->type = self::$groupTest->id; $model = new WorkflowModelTestItem(); $model->lastName = 'test'; $model->string = 'test'; $saved = $model->save(); $this->assertTrue($saved); $adapter = new WorkflowActionProcessingModelAdapter($model, Yii::app()->user->userModel, $triggeredModel); $form->resolveValueAndSetToModel($adapter, 'permissions'); $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($model); $this->assertEquals(1, $explicitReadWriteModelPermissions->getReadWritePermitablesCount()); $readWritePermitables = $explicitReadWriteModelPermissions->getReadWritePermitables(); $this->assertTrue(isset($readWritePermitables[self::$groupTest->id])); }
/** * Before fixing this issue: https://www.pivotaltracker.com/story/show/58051244 * this test fails. After fixing it, it passes. */ public function testPermissionsResolveValueAndSetToModelUpdateWhenExplicitPermissionsNotSetImmediately() { //Setup a triggered model that has Sarah creating and owning it. $super = Yii::app()->user->userModel; Yii::app()->user->userModel = User::getByUsername('sarah'); $triggeredModel = new WorkflowModelTestItem(); $triggeredModel->lastName = 'test'; $triggeredModel->string = 'test'; $saved = $triggeredModel->save(); $this->assertTrue($saved); Yii::app()->user->userModel = $super; //Now the super is who modified it $triggeredModel->string = 'test2'; $saved = $triggeredModel->save(); $this->assertTrue($saved); //Test same as triggered where triggered is not owner $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($triggeredModel); $explicitReadWriteModelPermissions->addReadWritePermitable(self::$groupTest); $form = new ExplicitReadWriteModelPermissionsWorkflowActionAttributeForm('WorkflowsTestModule', 'WorkflowModelTestItem'); $form->type = ExplicitReadWriteModelPermissionsWorkflowActionAttributeForm::TYPE_DYNAMIC_SAME_AS_TRIGGERED_MODEL; $model = new WorkflowModelTestItem(); $model->lastName = 'test'; $model->string = 'test'; $triggeredModel->setExplicitReadWriteModelPermissionsForWorkflow($explicitReadWriteModelPermissions); $this->assertTrue($triggeredModel->getExplicitReadWriteModelPermissionsForWorkflow() instanceof ExplicitReadWriteModelPermissions); $saved = $model->save(); $this->assertTrue($saved); $adapter = new WorkflowActionProcessingModelAdapter($model, Yii::app()->user->userModel, $triggeredModel); $form->resolveValueAndSetToModel($adapter, 'permissions'); //Now after setting, officially set the permissions on the model and save. $success = ExplicitReadWriteModelPermissionsUtil::resolveExplicitReadWriteModelPermissions($triggeredModel, $explicitReadWriteModelPermissions); $this->assertTrue($success); //Now check that the permissions match up $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($model); $this->assertEquals(1, $explicitReadWriteModelPermissions->getReadWritePermitablesCount()); $readWritePermitables = $explicitReadWriteModelPermissions->getReadWritePermitables(); $this->assertTrue(isset($readWritePermitables[self::$groupTest->getClassId('Permitable')])); //Test clearing out the ExplicitReadWriteModelPermissionsForWorkflow $this->assertTrue($triggeredModel->getExplicitReadWriteModelPermissionsForWorkflow() instanceof ExplicitReadWriteModelPermissions); $triggeredModel->clearExplicitReadWriteModelPermissionsForWorkflow(); $this->assertTrue($triggeredModel->getExplicitReadWriteModelPermissionsForWorkflow() == null); }