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