/**
  * @depends testGetInferredRelationsDataWithPrecedingModel
  */
 public function testGetDerivedRelationsViaCastedUpModelDataWithPrecedingModel()
 {
     //test with preceding model that is not the via relation
     $model = new ReportModelTestItem();
     $precedingModel = new ReportModelTestItem5();
     $rules = new ReportsTestReportRules();
     $report = new Report();
     $report->setType(Report::TYPE_ROWS_AND_COLUMNS);
     $report->setModuleClassName('ReportsTestModule');
     $adapter = new ModelRelationsAndAttributesToReportAdapter($model, $rules, $report->getType());
     $relations = $adapter->getSelectableRelationsData($precedingModel, 'nonReportable2');
     $this->assertEquals(11, count($relations));
     $compareData = array('label' => 'Has One');
     $this->assertEquals($compareData, $relations['hasOne']);
     $compareData = array('label' => 'Has One Again');
     $this->assertEquals($compareData, $relations['hasOneAgain']);
     $compareData = array('label' => 'Has Many');
     $this->assertEquals($compareData, $relations['hasMany']);
     $compareData = array('label' => 'Has One Also');
     $this->assertEquals($compareData, $relations['hasOneAlso']);
     $compareData = array('label' => 'Model 5 Via Item');
     $this->assertEquals($compareData, $relations['model5ViaItem']);
     $compareData = array('label' => 'Primary Email');
     $this->assertEquals($compareData, $relations['primaryEmail']);
     $compareData = array('label' => 'Primary Address');
     $this->assertEquals($compareData, $relations['primaryAddress']);
     $compareData = array('label' => 'Secondary Email');
     $this->assertEquals($compareData, $relations['secondaryEmail']);
     $compareData = array('label' => 'Owner');
     $this->assertEquals($compareData, $relations['owner']);
     $compareData = array('label' => 'Created By User');
     $this->assertEquals($compareData, $relations['createdByUser']);
     $compareData = array('label' => 'Modified By User');
     $this->assertEquals($compareData, $relations['modifiedByUser']);
     //test with preceding model that is the via relation
     $rules = new ReportsTestReportRules();
     $report = new Report();
     $report->setType(Report::TYPE_ROWS_AND_COLUMNS);
     $report->setModuleClassName('ReportsTestModule');
     $adapter = new ModelRelationsAndAttributesToReportAdapter($model, $rules, $report->getType());
     $relations = $adapter->getSelectableRelationsData($precedingModel, 'reportItems');
     $this->assertEquals(10, count($relations));
     $compareData = array('label' => 'Has One');
     $this->assertEquals($compareData, $relations['hasOne']);
     $compareData = array('label' => 'Has One Again');
     $this->assertEquals($compareData, $relations['hasOneAgain']);
     $compareData = array('label' => 'Has Many');
     $this->assertEquals($compareData, $relations['hasMany']);
     $compareData = array('label' => 'Has One Also');
     $this->assertEquals($compareData, $relations['hasOneAlso']);
     $compareData = array('label' => 'Primary Email');
     $this->assertEquals($compareData, $relations['primaryEmail']);
     $compareData = array('label' => 'Primary Address');
     $this->assertEquals($compareData, $relations['primaryAddress']);
     $compareData = array('label' => 'Secondary Email');
     $this->assertEquals($compareData, $relations['secondaryEmail']);
     $compareData = array('label' => 'Owner');
     $this->assertEquals($compareData, $relations['owner']);
     $compareData = array('label' => 'Created By User');
     $this->assertEquals($compareData, $relations['createdByUser']);
     $compareData = array('label' => 'Modified By User');
     $this->assertEquals($compareData, $relations['modifiedByUser']);
 }
 /**
  * Sally cannot access notes, tasks, or contacts. User is always accessible regardless of right to access
  */
 public function testGetAllReportableRelationsAsANonElevatedUser()
 {
     Yii::app()->user->userModel = User::getByUsername('sally');
     $model = new Account();
     $rules = new AccountsReportRules();
     $report = new Report();
     $report->setType(Report::TYPE_ROWS_AND_COLUMNS);
     $report->setModuleClassName('AccountsModule');
     $adapter = new ModelRelationsAndAttributesToReportAdapter($model, $rules, $report->getType());
     $relations = $adapter->getSelectableRelationsData();
     $relations = $adapter->getSelectableRelationsDataResolvedForUserAccess(Yii::app()->user->userModel, $relations);
     $this->assertEquals(9, count($relations));
     $compareData = array('label' => 'Billing Address');
     $this->assertEquals($compareData, $relations['billingAddress']);
     $compareData = array('label' => 'Created By User');
     $this->assertEquals($compareData, $relations['createdByUser']);
     $compareData = array('label' => 'Meetings');
     $this->assertEquals($compareData, $relations['meetings']);
     $compareData = array('label' => 'Modified By User');
     $this->assertEquals($compareData, $relations['modifiedByUser']);
     $compareData = array('label' => 'Opportunities');
     $this->assertEquals($compareData, $relations['opportunities']);
     $compareData = array('label' => 'Owner');
     $this->assertEquals($compareData, $relations['owner']);
     $compareData = array('label' => 'Primary Email');
     $this->assertEquals($compareData, $relations['primaryEmail']);
     $compareData = array('label' => 'Shipping Address');
     $this->assertEquals($compareData, $relations['shippingAddress']);
     $compareData = array('label' => 'Secondary Email');
     $this->assertEquals($compareData, $relations['secondaryEmail']);
 }