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