public function testExportRelationAttributes()
 {
     $values = array('Test1', 'Test2', 'Test3', 'Sample', 'Demo');
     $customFieldData = CustomFieldData::getByName('ReportTestDropDown');
     $customFieldData->serializedData = serialize($values);
     $saved = $customFieldData->save();
     assert('$saved');
     // Not Coding Standard
     $report = new Report();
     $report->setType(Report::TYPE_ROWS_AND_COLUMNS);
     $report->setModuleClassName('ReportsTest2Module');
     $report->setFiltersStructure('');
     //for fullname attribute
     $reportModelTestItem = new ReportModelTestItem();
     $reportModelTestItem->firstName = 'xFirst';
     $reportModelTestItem->lastName = 'xLast';
     $displayAttribute1 = new DisplayAttributeForReportForm('ReportsTest2Module', 'ReportModelTestItem2', Report::TYPE_ROWS_AND_COLUMNS);
     $displayAttribute1->setModelAliasUsingTableAliasName('relatedModel');
     $displayAttribute1->attributeIndexOrDerivedType = 'hasMany2___FullName';
     $displayAttribute1->label = 'Name';
     $report->addDisplayAttribute($displayAttribute1);
     //for boolean attribute
     $reportModelTestItem->boolean = true;
     $displayAttribute2 = new DisplayAttributeForReportForm('ReportsTest2Module', 'ReportModelTestItem2', Report::TYPE_ROWS_AND_COLUMNS);
     $displayAttribute2->setModelAliasUsingTableAliasName('relatedModel');
     $displayAttribute2->attributeIndexOrDerivedType = 'hasMany2___boolean';
     $report->addDisplayAttribute($displayAttribute2);
     //for date attribute
     $reportModelTestItem->date = '2013-02-12';
     $displayAttribute3 = new DisplayAttributeForReportForm('ReportsTest2Module', 'ReportModelTestItem2', Report::TYPE_ROWS_AND_COLUMNS);
     $displayAttribute3->setModelAliasUsingTableAliasName('relatedModel');
     $displayAttribute3->attributeIndexOrDerivedType = 'hasMany2___date';
     $report->addDisplayAttribute($displayAttribute3);
     //for datetime attribute
     $reportModelTestItem->dateTime = '2013-02-12 10:15:00';
     $displayAttribute4 = new DisplayAttributeForReportForm('ReportsTest2Module', 'ReportModelTestItem2', Report::TYPE_ROWS_AND_COLUMNS);
     $displayAttribute4->setModelAliasUsingTableAliasName('relatedModel');
     $displayAttribute4->attributeIndexOrDerivedType = 'hasMany2___dateTime';
     $report->addDisplayAttribute($displayAttribute4);
     //for float attribute
     $reportModelTestItem->float = 10.5;
     $displayAttribute5 = new DisplayAttributeForReportForm('ReportsTest2Module', 'ReportModelTestItem2', Report::TYPE_ROWS_AND_COLUMNS);
     $displayAttribute5->setModelAliasUsingTableAliasName('relatedModel');
     $displayAttribute5->attributeIndexOrDerivedType = 'hasMany2___float';
     $report->addDisplayAttribute($displayAttribute5);
     //for integer attribute
     $reportModelTestItem->integer = 10;
     $displayAttribute6 = new DisplayAttributeForReportForm('ReportsTest2Module', 'ReportModelTestItem2', Report::TYPE_ROWS_AND_COLUMNS);
     $displayAttribute6->setModelAliasUsingTableAliasName('relatedModel');
     $displayAttribute6->attributeIndexOrDerivedType = 'hasMany2___integer';
     $report->addDisplayAttribute($displayAttribute6);
     //for phone attribute
     $reportModelTestItem->phone = '7842151012';
     $displayAttribute7 = new DisplayAttributeForReportForm('ReportsTest2Module', 'ReportModelTestItem2', Report::TYPE_ROWS_AND_COLUMNS);
     $displayAttribute7->setModelAliasUsingTableAliasName('relatedModel');
     $displayAttribute7->attributeIndexOrDerivedType = 'hasMany2___phone';
     $report->addDisplayAttribute($displayAttribute7);
     //for string attribute
     $reportModelTestItem->string = 'xString';
     $displayAttribute8 = new DisplayAttributeForReportForm('ReportsTest2Module', 'ReportModelTestItem2', Report::TYPE_ROWS_AND_COLUMNS);
     $displayAttribute8->setModelAliasUsingTableAliasName('relatedModel');
     $displayAttribute8->attributeIndexOrDerivedType = 'hasMany2___string';
     $report->addDisplayAttribute($displayAttribute8);
     //for textArea attribute
     $reportModelTestItem->textArea = 'xtextAreatest';
     $displayAttribute9 = new DisplayAttributeForReportForm('ReportsTest2Module', 'ReportModelTestItem2', Report::TYPE_ROWS_AND_COLUMNS);
     $displayAttribute9->setModelAliasUsingTableAliasName('relatedModel');
     $displayAttribute9->attributeIndexOrDerivedType = 'hasMany2___textArea';
     $report->addDisplayAttribute($displayAttribute9);
     //for url attribute
     $reportModelTestItem->url = 'http://www.test.com';
     $displayAttribute10 = new DisplayAttributeForReportForm('ReportsTest2Module', 'ReportModelTestItem2', Report::TYPE_ROWS_AND_COLUMNS);
     $displayAttribute10->setModelAliasUsingTableAliasName('relatedModel');
     $displayAttribute10->attributeIndexOrDerivedType = 'hasMany2___url';
     $report->addDisplayAttribute($displayAttribute10);
     //for dropdown attribute
     $reportModelTestItem->dropDown->value = $values[1];
     $displayAttribute11 = new DisplayAttributeForReportForm('ReportsTest2Module', 'ReportModelTestItem2', Report::TYPE_ROWS_AND_COLUMNS);
     $displayAttribute11->setModelAliasUsingTableAliasName('relatedModel');
     $displayAttribute11->attributeIndexOrDerivedType = 'hasMany2___dropDown';
     $report->addDisplayAttribute($displayAttribute11);
     //for currency attribute
     $currencies = Currency::getAll();
     $currencyValue = new CurrencyValue();
     $currencyValue->value = 100;
     $currencyValue->currency = $currencies[0];
     $this->assertEquals('USD', $currencyValue->currency->code);
     $reportModelTestItem->currencyValue = $currencyValue;
     $displayAttribute12 = new DisplayAttributeForReportForm('ReportsTest2Module', 'ReportModelTestItem2', Report::TYPE_ROWS_AND_COLUMNS);
     $displayAttribute12->setModelAliasUsingTableAliasName('relatedModel');
     $displayAttribute12->attributeIndexOrDerivedType = 'hasMany2___currencyValue';
     $report->addDisplayAttribute($displayAttribute12);
     //for primaryAddress attribute
     $reportModelTestItem->primaryAddress->street1 = 'someString';
     $displayAttribute13 = new DisplayAttributeForReportForm('ReportsTest2Module', 'ReportModelTestItem2', Report::TYPE_ROWS_AND_COLUMNS);
     $displayAttribute13->setModelAliasUsingTableAliasName('relatedModel');
     $displayAttribute13->attributeIndexOrDerivedType = 'hasMany2___primaryAddress___street1';
     $report->addDisplayAttribute($displayAttribute13);
     //for primaryEmail attribute
     $reportModelTestItem->primaryEmail->emailAddress = "*****@*****.**";
     $displayAttribute14 = new DisplayAttributeForReportForm('ReportsTest2Module', 'ReportModelTestItem2', Report::TYPE_ROWS_AND_COLUMNS);
     $displayAttribute14->setModelAliasUsingTableAliasName('relatedModel');
     $displayAttribute14->attributeIndexOrDerivedType = 'hasMany2___primaryEmail___emailAddress';
     $report->addDisplayAttribute($displayAttribute14);
     //for multiDropDown attribute
     $customFieldValue = new CustomFieldValue();
     $customFieldValue->value = 'Multi 1';
     $reportModelTestItem->multiDropDown->values->add($customFieldValue);
     $customFieldValue = new CustomFieldValue();
     $customFieldValue->value = 'Multi 2';
     $reportModelTestItem->multiDropDown->values->add($customFieldValue);
     $displayAttribute15 = new DisplayAttributeForReportForm('ReportsTest2Module', 'ReportModelTestItem2', Report::TYPE_ROWS_AND_COLUMNS);
     $displayAttribute15->setModelAliasUsingTableAliasName('relatedModel');
     $displayAttribute15->attributeIndexOrDerivedType = 'hasMany2___multiDropDown';
     $report->addDisplayAttribute($displayAttribute15);
     //for tagCloud attribute
     $customFieldValue = new CustomFieldValue();
     $customFieldValue->value = 'Cloud 2';
     $reportModelTestItem->tagCloud->values->add($customFieldValue);
     $customFieldValue = new CustomFieldValue();
     $customFieldValue->value = 'Cloud 3';
     $reportModelTestItem->tagCloud->values->add($customFieldValue);
     $displayAttribute16 = new DisplayAttributeForReportForm('ReportsTest2Module', 'ReportModelTestItem2', Report::TYPE_ROWS_AND_COLUMNS);
     $displayAttribute16->setModelAliasUsingTableAliasName('relatedModel');
     $displayAttribute16->attributeIndexOrDerivedType = 'hasMany2___tagCloud';
     $report->addDisplayAttribute($displayAttribute16);
     //for radioDropDown attribute
     $reportModelTestItem->radioDropDown->value = $values[1];
     $displayAttribute17 = new DisplayAttributeForReportForm('ReportsTest2Module', 'ReportModelTestItem2', Report::TYPE_ROWS_AND_COLUMNS);
     $displayAttribute17->setModelAliasUsingTableAliasName('relatedModel');
     $displayAttribute17->attributeIndexOrDerivedType = 'hasMany2___radioDropDown';
     $report->addDisplayAttribute($displayAttribute17);
     //for likeContactState
     $reportModelTestItem7 = new ReportModelTestItem7();
     $reportModelTestItem7->name = 'someName';
     $reportModelTestItem->likeContactState = $reportModelTestItem7;
     $displayAttribute18 = new DisplayAttributeForReportForm('ReportsTest2Module', 'ReportModelTestItem2', Report::TYPE_ROWS_AND_COLUMNS);
     $displayAttribute18->setModelAliasUsingTableAliasName('relatedModel');
     $displayAttribute18->attributeIndexOrDerivedType = 'hasMany2___likeContactState';
     $report->addDisplayAttribute($displayAttribute18);
     //for dynamic user attribute
     $reportModelTestItem->owner = Yii::app()->user->userModel;
     $displayAttribute19 = new DisplayAttributeForReportForm('ReportsTest2Module', 'ReportModelTestItem2', Report::TYPE_ROWS_AND_COLUMNS);
     $displayAttribute19->setModelAliasUsingTableAliasName('relatedModel');
     $displayAttribute19->attributeIndexOrDerivedType = 'hasMany2___owner__User';
     $report->addDisplayAttribute($displayAttribute19);
     //for dynamic user fullName attribute
     $reportModelTestItem->owner = Yii::app()->user->userModel;
     $displayAttribute20 = new DisplayAttributeForReportForm('ReportsTest2Module', 'ReportModelTestItem2', Report::TYPE_ROWS_AND_COLUMNS);
     $displayAttribute20->setModelAliasUsingTableAliasName('relatedModel');
     $displayAttribute20->attributeIndexOrDerivedType = 'hasMany2___owner___FullName';
     $report->addDisplayAttribute($displayAttribute20);
     $reportModelTestItem2 = new ReportModelTestItem2();
     $reportModelTestItem2->owner = Yii::app()->user->userModel;
     $reportModelTestItem2->hasMany2->add($reportModelTestItem);
     $this->assertTrue($reportModelTestItem2->save());
     $dataProvider = new RowsAndColumnsReportDataProvider($report);
     $adapter = ReportToExportAdapterFactory::createReportToExportAdapter($report, $dataProvider);
     $compareHeaderData = array('Name', 'Reports Tests >> Boolean', 'Reports Tests >> Date', 'Reports Tests >> Date Time', 'Reports Tests >> Float', 'Reports Tests >> Integer', 'Reports Tests >> Phone', 'Reports Tests >> String', 'Reports Tests >> Text Area', 'Reports Tests >> Url', 'Reports Tests >> Drop Down', 'Reports Tests >> Currency Value', 'Reports Tests >> Currency Value Currency', 'Reports Tests >> Primary Address >> Street 1', 'Reports Tests >> Primary Email >> Email Address', 'Reports Tests >> Multi Drop Down', 'Reports Tests >> Tag Cloud', 'Reports Tests >> Radio Drop Down', 'Reports Tests >> A name for a state', 'Reports Tests >> Owner', 'Reports Tests >> User >> Full Name');
     $compareRowData = array(array('xFirst xLast', 1, '2013-02-12', '2013-02-12 10:15:00', 10.5, 10, '7842151012', 'xString', 'xtextAreatest', 'http://www.test.com', 'Test2', '100.00', 'USD', 'someString', '*****@*****.**', 'Multi 1,Multi 2', 'Cloud 2,Cloud 3', 'Test2', 'someName', 'Clark Kent', 'Clark Kent'));
     // Not Coding Standard
     $this->assertEquals($compareHeaderData, $adapter->getHeaderData());
     $this->assertEquals($compareRowData, $adapter->getData());
     //for MANY-MANY Relationship
     $report = new Report();
     $report->setType(Report::TYPE_ROWS_AND_COLUMNS);
     $report->setModuleClassName('ReportsTestModule');
     $report->setFiltersStructure('');
     //for name attribute
     $reportModelTestItem3 = new ReportModelTestItem3();
     $reportModelTestItem3->name = 'xFirst';
     $displayAttribute1 = new DisplayAttributeForReportForm('ReportsTestModule', 'ReportModelTestItem', Report::TYPE_ROWS_AND_COLUMNS);
     $displayAttribute1->setModelAliasUsingTableAliasName('relatedModel1');
     $displayAttribute1->attributeIndexOrDerivedType = 'hasOne___hasMany3___name';
     $report->addDisplayAttribute($displayAttribute1);
     //for somethingOn3 attribute
     $reportModelTestItem3->somethingOn3 = 'somethingOn3';
     $displayAttribute2 = new DisplayAttributeForReportForm('ReportsTestModule', 'ReportModelTestItem', Report::TYPE_ROWS_AND_COLUMNS);
     $displayAttribute2->setModelAliasUsingTableAliasName('relatedModel1');
     $displayAttribute2->attributeIndexOrDerivedType = 'hasOne___hasMany3___somethingOn3';
     $report->addDisplayAttribute($displayAttribute2);
     $reportModelTestItem3->owner = Yii::app()->user->userModel;
     $reportModelTestItem3->hasMany2->add($reportModelTestItem2);
     $this->assertTrue($reportModelTestItem3->save());
     $dataProvider = new RowsAndColumnsReportDataProvider($report);
     $adapter = ReportToExportAdapterFactory::createReportToExportAdapter($report, $dataProvider);
     $compareHeaderData = array('ReportModelTestItem2 >> ReportModelTestItem3s >> Name', 'ReportModelTestItem2 >> ReportModelTestItem3s >> Something On 3');
     $compareRowData = array(array('xFirst', 'somethingOn3'));
     $this->assertEquals($compareHeaderData, $adapter->getHeaderData());
     $this->assertEquals($compareRowData, $adapter->getData());
     $reportModelTestItem->delete();
     $reportModelTestItem2->delete();
     $reportModelTestItem3->delete();
 }
 public function testSqlQueryWithLinkTypeSpecificOnRelatedModels()
 {
     $quote = DatabaseCompatibilityUtil::getQuote();
     Yii::app()->user->userModel = User::getByUsername('super');
     $reportModelTestItem2 = new ReportModelTestItem2();
     $reportModelTestItem2->name = 'name';
     $this->assertTrue($reportModelTestItem2->save());
     $reportModelTestItem = new ReportModelTestItem();
     $reportModelTestItem->lastName = 'lastName';
     $reportModelTestItem->string = 'string';
     $reportModelTestItem->hasOne = $reportModelTestItem2;
     $this->assertTrue($reportModelTestItem->save());
     $report = new Report();
     $report->setType(Report::TYPE_ROWS_AND_COLUMNS);
     $report->setModuleClassName('ReportsTest2Module');
     $report->setFiltersStructure('');
     $displayAttribute1 = new DisplayAttributeForReportForm('ReportsTest2Module', 'ReportModelTestItem2', Report::TYPE_ROWS_AND_COLUMNS);
     $displayAttribute1->setModelAliasUsingTableAliasName('relatedModel');
     $displayAttribute1->attributeIndexOrDerivedType = 'hasMany2___FullName';
     $report->addDisplayAttribute($displayAttribute1);
     $dataProvider = new RowsAndColumnsReportDataProvider($report);
     $content = $dataProvider->makeSqlQueryForDisplay();
     $compareContent = "select {$quote}reportmodeltestitem{$quote}.{$quote}id{$quote} reportmodeltestitemid " . "from {$quote}reportmodeltestitem2{$quote} " . "left join {$quote}reportmodeltestitem{$quote} on " . "{$quote}reportmodeltestitem{$quote}.{$quote}hasone_reportmodeltestitem2_id{$quote} " . "= {$quote}reportmodeltestitem2{$quote}.{$quote}id{$quote}  limit 10 offset 0";
     $this->assertEquals($compareContent, $content);
 }
 public function testGetLeadingHeadersDataFromMatrixReportDataProviderWithALinkableAttribute()
 {
     $reportModelTestItem2 = new ReportModelTestItem2();
     $reportModelTestItem2->name = 'report name';
     $reportModelTestItem2->phone = '123456789';
     $this->assertTrue($reportModelTestItem2->save());
     $reportModelTestItem2 = new ReportModelTestItem2();
     $reportModelTestItem2->name = 'report name';
     $reportModelTestItem2->phone = '987654321';
     $this->assertTrue($reportModelTestItem2->save());
     $report = new Report();
     $report->setType(Report::TYPE_MATRIX);
     $report->setModuleClassName('ReportsTest2Module');
     $report->setFiltersStructure('');
     $displayAttribute = new DisplayAttributeForReportForm('ReportsTest2Module', 'ReportModelTestItem2', Report::TYPE_MATRIX);
     $displayAttribute->attributeIndexOrDerivedType = 'Count';
     $report->addDisplayAttribute($displayAttribute);
     $groupBy = new GroupByForReportForm('ReportsTest2Module', 'ReportModelTestItem2', Report::TYPE_MATRIX);
     $groupBy->attributeIndexOrDerivedType = 'phone';
     $report->addGroupBy($groupBy);
     $groupBy = new GroupByForReportForm('ReportsTest2Module', 'ReportModelTestItem2', Report::TYPE_MATRIX);
     $groupBy->attributeIndexOrDerivedType = 'name';
     $groupBy->axis = 'y';
     $report->addGroupBy($groupBy);
     $dataProvider = new MatrixReportDataProvider($report);
     $adapter = ReportToExportAdapterFactory::createReportToExportAdapter($report, $dataProvider);
     $compareRowData = array(array(null, '123456789', '987654321', 'Total'), array('Name', 'Count', 'Count', 'Count'), array('report name', 1, 1, 2), array('Total', 1, 1));
     $this->assertEmpty($adapter->getHeaderData());
     $this->assertEquals($compareRowData, $adapter->getData());
     $report = new Report();
     $report->setType(Report::TYPE_MATRIX);
     $report->setModuleClassName('ReportsTest2Module');
     $report->setFiltersStructure('');
     $displayAttribute = new DisplayAttributeForReportForm('ReportsTest2Module', 'ReportModelTestItem2', Report::TYPE_MATRIX);
     $displayAttribute->attributeIndexOrDerivedType = 'Count';
     $report->addDisplayAttribute($displayAttribute);
     $groupBy = new GroupByForReportForm('ReportsTest2Module', 'ReportModelTestItem2', Report::TYPE_MATRIX);
     $groupBy->attributeIndexOrDerivedType = 'name';
     $report->addGroupBy($groupBy);
     $groupBy = new GroupByForReportForm('ReportsTest2Module', 'ReportModelTestItem2', Report::TYPE_MATRIX);
     $groupBy->attributeIndexOrDerivedType = 'phone';
     $groupBy->axis = 'y';
     $report->addGroupBy($groupBy);
     $dataProvider = new MatrixReportDataProvider($report);
     $adapter = ReportToExportAdapterFactory::createReportToExportAdapter($report, $dataProvider);
     $compareRowData = array(array(null, 'report name', 'Total'), array('Phone', 'Count', 'Count'), array('123456789', 1, 1), array('987654321', 1, 1), array('Total', 2));
     $this->assertEmpty($adapter->getHeaderData());
     $this->assertEquals($compareRowData, $adapter->getData());
 }