public function testGetReportsByPartialName() { $this->assertEquals(2, count(SavedReport::getAll())); $this->assertEquals(2, count(ReportSearch::getReportsByPartialName('a', 5))); $this->assertEquals(0, count(ReportSearch::getReportsByPartialName('a', 5, 'AccountsModule'))); $this->assertEquals(1, count(ReportSearch::getReportsByPartialName('a', 5, 'ReportsTestModule'))); $this->assertEquals(1, count(ReportSearch::getReportsByPartialName('a', 5, 'ReportsTestModule', Report::TYPE_SUMMATION))); $this->assertEquals(0, count(ReportSearch::getReportsByPartialName('a', 5, 'ContactsModule', Report::TYPE_SUMMATION))); }
public function testRegularUserControllerActionsWithElevationToEdit() { $super = $this->logoutCurrentUserLoginNewUserAndGetByUsername('super'); $nobody = User::getByUsername('nobody'); $group1 = Group::getByName('Group1'); $nobody->setRight('AccountsModule', AccountsModule::RIGHT_ACCESS_ACCOUNTS); $nobody->setRight('AccountsModule', AccountsModule::RIGHT_CREATE_ACCOUNTS); $nobody->setRight('ReportsModule', ReportsModule::RIGHT_ACCESS_REPORTS); $nobody->setRight('ReportsModule', ReportsModule::RIGHT_CREATE_REPORTS); $nobody->setRight('ReportsModule', ReportsModule::RIGHT_DELETE_REPORTS); assert($nobody->save()); // Not Coding Standard $savedReports = SavedReport::getAll(); $this->assertEquals(0, count($savedReports)); $nobody = $this->logoutCurrentUserLoginNewUserAndGetByUsername('nobody'); $content = $this->runControllerWithExitExceptionAndGetContent('reports/default/create'); $this->assertContains('Rows and Columns Report', $content); $this->assertContains('Summation Report', $content); $this->assertContains('Matrix Report', $content); $this->setGetArray(array('type' => 'RowsAndColumns')); $this->resetPostArray(); $content = $this->runControllerWithNoExceptionsAndGetContent('reports/default/create'); $this->assertContains('Accounts', $content); $this->setGetArray(array('type' => 'RowsAndColumns')); $postData = static::makeRowsAndColumnsReportPostData(); $postData['save'] = 'save'; $postData['ajax'] = 'edit-form'; $this->setPostArray($postData); $content = $this->runControllerWithExitExceptionAndGetContent('reports/default/save'); $this->assertEquals('[]', $content); $postData = static::makeRowsAndColumnsReportPostData(); $postData['save'] = 'save'; $this->setPostArray($postData); $this->runControllerWithExitExceptionAndGetContent('reports/default/save'); $super = $this->logoutCurrentUserLoginNewUserAndGetByUsername('super'); $savedReports = SavedReport::getAll(); $this->assertEquals(1, count($savedReports)); $nobody = $this->logoutCurrentUserLoginNewUserAndGetByUsername('nobody'); $savedReports = SavedReport::getAll(); $this->assertEquals(1, count($savedReports)); $this->setGetArray(array('id' => $savedReports[0]->id)); $this->resetPostArray(); $this->runControllerWithNoExceptionsAndGetContent('reports/default/details'); $this->setGetArray(array('id' => $savedReports[0]->id)); $this->resetPostArray(); $this->runControllerWithNoExceptionsAndGetContent('reports/default/edit'); //Save an existing report $this->setGetArray(array('type' => 'RowsAndColumns', 'id' => $savedReports[0]->id)); $postData = static::makeRowsAndColumnsReportPostData(); $postData['save'] = 'save'; $this->setPostArray($postData); $this->runControllerWithExitExceptionAndGetContent('reports/default/save'); $this->assertEquals(1, count($savedReports)); //Clone existing report $this->setGetArray(array('type' => 'RowsAndColumns', 'id' => $savedReports[0]->id, 'isBeingCopied' => '1')); $postData = static::makeRowsAndColumnsReportPostData(); $postData['save'] = 'save'; $this->setPostArray($postData); $this->runControllerWithExitExceptionAndGetContent('reports/default/save'); $super = $this->logoutCurrentUserLoginNewUserAndGetByUsername('super'); $savedReports = SavedReport::getAll(); $this->assertEquals(2, count($savedReports)); }
/** * @depends testAutoComplete */ public function testDelete() { $savedReports = SavedReport::getAll(); $this->assertEquals(3, count($savedReports)); $this->setGetArray(array('id' => $savedReports[0]->id)); $this->runControllerWithRedirectExceptionAndGetContent('reports/default/delete'); $savedReports = SavedReport::getAll(); $this->assertEquals(2, count($savedReports)); }
/** * @depends testMakeReportDataProviderAndResolveAttributeName */ public function testGetContactIdsByReportDataProviderAndAttributeName() { $contactReports = SavedReport::getAll(); $contactReport = $contactReports[0]; $contacts = Contact::getAll(); $attributeName = null; $reportDataProvider = MarketingListMembersUtil::makeReportDataProviderAndResolveAttributeName($contactReport->id, 1, $attributeName); $contactIds = MarketingListMembersUtil::getContactIdsByReportDataProviderAndAttributeName($reportDataProvider, $attributeName); $this->assertCount(1, $contactIds); $attributeName = null; $reportDataProvider = MarketingListMembersUtil::makeReportDataProviderAndResolveAttributeName($contactReport->id, 2, $attributeName); $contactIds = MarketingListMembersUtil::getContactIdsByReportDataProviderAndAttributeName($reportDataProvider, $attributeName); $this->assertCount(2, $contactIds); $this->assertContains($contacts[0]->id, $contactIds); $this->assertContains($contacts[1]->id, $contactIds); }
/** * @depends testResolveReportToSavedReport */ public function testMakeReportBySavedReport() { $billy = User::getByUsername('billy'); $savedReports = SavedReport::getAll(); $this->assertEquals(1, count($savedReports)); $savedReport = $savedReports[0]; $report = SavedReportToReportAdapter::makeReportBySavedReport($savedReport); $filters = $report->getFilters(); $groupBys = $report->getGroupBys(); $orderBys = $report->getOrderBys(); $displayAttributes = $report->getDisplayAttributes(); $drillDownDisplayAttributes = $report->getDrillDownDisplayAttributes(); $this->assertEquals('ReportsTestModule', $report->getModuleClassName()); $this->assertEquals('myFirstReport', $report->getName()); $this->assertEquals('aDescription', $report->getDescription()); $this->assertEquals(Report::TYPE_ROWS_AND_COLUMNS, $report->getType()); $this->assertEquals('1 and 2 or 3', $report->getFiltersStructure()); $this->assertTrue($report->getOwner()->isSame($billy)); $this->assertCount(4, $filters); $this->assertCount(1, $groupBys); $this->assertCount(1, $orderBys); $this->assertCount(1, $displayAttributes); $this->assertCount(1, $drillDownDisplayAttributes); $this->assertEquals(true, $filters[0]->availableAtRunTime); $this->assertEquals('aValue', $filters[0]->value); $this->assertEquals('string', $filters[0]->attributeIndexOrDerivedType); $this->assertNull($filters[0]->currencyIdForValue); $this->assertNull($filters[0]->secondValue); $this->assertNull($filters[0]->stringifiedModelForValue); $this->assertNull($filters[0]->valueType); $this->assertEquals('equals', $filters[0]->operator); $this->assertEquals(true, $filters[1]->availableAtRunTime); $this->assertEquals('aValue', $filters[1]->value); $this->assertEquals('currencyValue', $filters[1]->attributeIndexOrDerivedType); $this->assertEquals(4, $filters[1]->currencyIdForValue); $this->assertEquals('bValue', $filters[1]->secondValue); $this->assertNull($filters[1]->stringifiedModelForValue); $this->assertNull($filters[1]->valueType); $this->assertEquals('between', $filters[1]->operator); $this->assertEquals(false, $filters[2]->availableAtRunTime); $this->assertEquals('aValue', $filters[2]->value); $this->assertEquals('owner__User', $filters[2]->attributeIndexOrDerivedType); $this->assertNull($filters[2]->currencyIdForValue); $this->assertNull($filters[2]->secondValue); $this->assertEquals('someName', $filters[2]->stringifiedModelForValue); $this->assertNull($filters[2]->valueType); $this->assertNull($filters[2]->operator); $this->assertEquals(true, $filters[3]->availableAtRunTime); $this->assertEquals('aValue', $filters[3]->value); $this->assertEquals('createdDateTime', $filters[3]->attributeIndexOrDerivedType); $this->assertNull($filters[3]->currencyIdForValue); $this->assertEquals('bValue', $filters[3]->secondValue); $this->assertNull($filters[3]->stringifiedModelForValue); $this->assertNull($filters[3]->operator); $this->assertEquals('Between', $filters[3]->valueType); $this->assertEquals('url', $orderBys[0]->attributeIndexOrDerivedType); $this->assertEquals('desc', $orderBys[0]->order); $this->assertEquals('lastName', $groupBys[0]->attributeIndexOrDerivedType); $this->assertEquals('y', $groupBys[0]->axis); $this->assertEquals('phone', $displayAttributes[0]->attributeIndexOrDerivedType); $this->assertEquals('someNewLabel', $displayAttributes[0]->label); $this->assertEquals('firstName', $drillDownDisplayAttributes[0]->attributeIndexOrDerivedType); $this->assertEquals('someNewLabel', $drillDownDisplayAttributes[0]->label); }
public function testCloneSetsRightPermissions() { // create users and groups. $everyoneGroup = Group::getByName(Group::EVERYONE_GROUP_NAME); $everyoneGroup->setRight('ReportsModule', ReportsModule::getAccessRight()); $everyoneGroup->setRight('AccountsModule', AccountsModule::RIGHT_ACCESS_ACCOUNTS); $this->assertTrue($everyoneGroup->save()); $everyoneGroup->forgetAll(); $jim = UserTestHelper::createBasicUser('jim'); $john = UserTestHelper::createBasicUser('john'); $johnGroup = new Group(); $johnGroup->name = 'John Group'; $johnGroup->users->add($john); $this->assertTrue($johnGroup->save()); $john->forgetAll(); $johnGroup->forgetAll(); $john = User::getByUsername('john'); $johnGroup = Group::getByName('John Group'); $basePostData = static::makeRowsAndColumnsReportPostDataForAccounts(); $basePostData['save'] = 'save'; $description = StringUtil::generateRandomString(40); // create a report with everyone group permission, ensure everyone can access it. // clone it, ensure everyone group can still access it. $super = $this->logoutCurrentUserLoginNewUserAndGetByUsername('super'); SavedReport::deleteAll(); $modelSpecificPostData = array('RowsAndColumnsReportWizardForm' => array('name' => 'Everyone Report 01', 'description' => $description, 'ownerId' => $super->id, 'ownerName' => strval($super), 'explicitReadWriteModelPermissions' => array('type' => ExplicitReadWriteModelPermissionsUtil::MIXED_TYPE_EVERYONE_GROUP, 'nonEveryoneGroup' => null))); $postData = CMap::mergeArray($basePostData, $modelSpecificPostData); $this->setGetArray(array('type' => 'RowsAndColumns')); $this->setPostArray($postData); $this->runControllerWithExitExceptionAndGetContent('/reports/default/save'); ForgetAllCacheUtil::forgetAllCaches(); $savedReports = SavedReport::getAll(); $this->assertCount(1, $savedReports); $this->assertEquals(Permission::ALL, $savedReports[0]->getEffectivePermissions($super)); $this->assertEquals(Permission::READ_WRITE_CHANGE_PERMISSIONS_CHANGE_OWNER, $savedReports[0]->getEffectivePermissions($everyoneGroup)); $this->assertEquals(Permission::READ_WRITE_CHANGE_PERMISSIONS_CHANGE_OWNER, $savedReports[0]->getEffectivePermissions($jim)); // ensure jim can access it. $this->logoutCurrentUserLoginNewUserAndGetByUsername('jim'); $this->resetPostArray(); $this->resetGetArray(); $content = $this->runControllerWithNoExceptionsAndGetContent('/reports/default/list'); $this->assertContains($postData['RowsAndColumnsReportWizardForm']['name'], $content); $this->assertEquals(substr_count($content, $postData['RowsAndColumnsReportWizardForm']['name']), 1); $this->setGetArray(array('id' => $savedReports[0]->id)); $content = $this->runControllerWithNoExceptionsAndGetContent('/reports/default/details'); $this->assertContains($postData['RowsAndColumnsReportWizardForm']['name'], $content); $this->assertEquals(substr_count($content, $postData['RowsAndColumnsReportWizardForm']['name']), 3); // clone the report. $this->logoutCurrentUserLoginNewUserAndGetByUsername('super'); $this->setGetArray(array('type' => 'RowsAndColumns', 'id' => $savedReports[0]->id, 'isBeingCopied' => '1')); $postData['RowsAndColumnsReportWizardForm']['name'] = 'Cloned ' . $postData['RowsAndColumnsReportWizardForm']['name']; $this->setPostArray($postData); $this->runControllerWithExitExceptionAndGetContent('/reports/default/save'); ForgetAllCacheUtil::forgetAllCaches(); $savedReports = SavedReport::getAll(); $this->assertCount(2, $savedReports); $sourcePermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($savedReports[0]); $clonePermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($savedReports[1]); $this->assertEquals($sourcePermissions, $clonePermissions); $this->assertEquals(Permission::ALL, $savedReports[1]->getEffectivePermissions($super)); $this->assertEquals(Permission::READ_WRITE_CHANGE_PERMISSIONS_CHANGE_OWNER, $savedReports[1]->getEffectivePermissions($everyoneGroup)); $this->assertEquals(Permission::READ_WRITE_CHANGE_PERMISSIONS_CHANGE_OWNER, $savedReports[1]->getEffectivePermissions($jim)); // ensure jim can access it. $this->logoutCurrentUserLoginNewUserAndGetByUsername('jim'); $this->resetPostArray(); $this->resetGetArray(); $content = $this->runControllerWithNoExceptionsAndGetContent('/reports/default/list'); $this->assertContains($postData['RowsAndColumnsReportWizardForm']['name'], $content); $this->assertEquals(substr_count($content, $postData['RowsAndColumnsReportWizardForm']['name']), 1); $this->setGetArray(array('id' => $savedReports[1]->id)); $content = $this->runControllerWithNoExceptionsAndGetContent('/reports/default/details'); $this->assertContains($postData['RowsAndColumnsReportWizardForm']['name'], $content); $this->assertEquals(substr_count($content, $postData['RowsAndColumnsReportWizardForm']['name']), 3); // create a report with specific group permissions, ensure only members of that group can access it. // clone it, ensure only that specific group members can access it. $super = $this->logoutCurrentUserLoginNewUserAndGetByUsername('super'); SavedReport::deleteAll(); $modelSpecificPostData = array('RowsAndColumnsReportWizardForm' => array('name' => 'Group Specific Report 01', 'description' => $description, 'ownerId' => $super->id, 'ownerName' => strval($super), 'explicitReadWriteModelPermissions' => array('type' => ExplicitReadWriteModelPermissionsUtil::MIXED_TYPE_NONEVERYONE_GROUP, 'nonEveryoneGroup' => $johnGroup->id))); $postData = CMap::mergeArray($basePostData, $modelSpecificPostData); $this->setGetArray(array('type' => 'RowsAndColumns')); $this->setPostArray($postData); $this->runControllerWithExitExceptionAndGetContent('/reports/default/save'); ForgetAllCacheUtil::forgetAllCaches(); $savedReports = SavedReport::getAll(); $this->assertCount(1, $savedReports); $this->assertEquals(Permission::ALL, $savedReports[0]->getEffectivePermissions($super)); $this->assertEquals(Permission::NONE, $savedReports[0]->getEffectivePermissions($everyoneGroup)); $this->assertEquals(Permission::NONE, $savedReports[0]->getEffectivePermissions($jim)); $this->assertEquals(Permission::READ_WRITE_CHANGE_PERMISSIONS_CHANGE_OWNER, $savedReports[0]->getEffectivePermissions($johnGroup)); $this->assertEquals(Permission::READ_WRITE_CHANGE_PERMISSIONS_CHANGE_OWNER, $savedReports[0]->getEffectivePermissions($john)); // ensure john can access it. $this->logoutCurrentUserLoginNewUserAndGetByUsername('john'); $this->resetPostArray(); $this->resetGetArray(); $content = $this->runControllerWithNoExceptionsAndGetContent('/reports/default/list'); $this->assertContains($postData['RowsAndColumnsReportWizardForm']['name'], $content); $this->assertEquals(substr_count($content, $postData['RowsAndColumnsReportWizardForm']['name']), 1); $this->setGetArray(array('id' => $savedReports[0]->id)); $content = $this->runControllerWithNoExceptionsAndGetContent('/reports/default/details'); $this->assertContains($postData['RowsAndColumnsReportWizardForm']['name'], $content); $this->assertEquals(substr_count($content, $postData['RowsAndColumnsReportWizardForm']['name']), 3); // ensure jim can not access it. $this->logoutCurrentUserLoginNewUserAndGetByUsername('jim'); $this->resetGetArray(); $content = $this->runControllerWithNoExceptionsAndGetContent('/reports/default/list'); $this->assertNotContains($postData['RowsAndColumnsReportWizardForm']['name'], $content); $this->setGetArray(array('id' => $savedReports[0]->id)); $this->runControllerWithAccessDeniedSecurityExceptionAndGetContent('/reports/default/details'); // clone the report. $this->logoutCurrentUserLoginNewUserAndGetByUsername('super'); $this->setGetArray(array('type' => 'RowsAndColumns', 'id' => $savedReports[0]->id, 'isBeingCopied' => '1')); $postData['RowsAndColumnsReportWizardForm']['name'] = 'Cloned ' . $postData['RowsAndColumnsReportWizardForm']['name']; $this->setPostArray($postData); $this->runControllerWithExitExceptionAndGetContent('/reports/default/save'); ForgetAllCacheUtil::forgetAllCaches(); $savedReports = SavedReport::getAll(); $this->assertCount(2, $savedReports); $sourcePermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($savedReports[0]); $clonePermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($savedReports[1]); $this->assertEquals($sourcePermissions, $clonePermissions); $this->assertEquals(Permission::ALL, $savedReports[1]->getEffectivePermissions($super)); $this->assertEquals(Permission::NONE, $savedReports[1]->getEffectivePermissions($everyoneGroup)); $this->assertEquals(Permission::NONE, $savedReports[1]->getEffectivePermissions($jim)); $this->assertEquals(Permission::READ_WRITE_CHANGE_PERMISSIONS_CHANGE_OWNER, $savedReports[1]->getEffectivePermissions($johnGroup)); $this->assertEquals(Permission::READ_WRITE_CHANGE_PERMISSIONS_CHANGE_OWNER, $savedReports[1]->getEffectivePermissions($john)); // ensure john can access it. $this->logoutCurrentUserLoginNewUserAndGetByUsername('john'); $this->resetPostArray(); $this->resetGetArray(); $content = $this->runControllerWithNoExceptionsAndGetContent('/reports/default/list'); $this->assertContains($postData['RowsAndColumnsReportWizardForm']['name'], $content); $this->assertEquals(substr_count($content, $postData['RowsAndColumnsReportWizardForm']['name']), 1); $this->setGetArray(array('id' => $savedReports[1]->id)); $content = $this->runControllerWithNoExceptionsAndGetContent('/reports/default/details'); $this->assertContains($postData['RowsAndColumnsReportWizardForm']['name'], $content); $this->assertEquals(substr_count($content, $postData['RowsAndColumnsReportWizardForm']['name']), 3); // ensure jim can not access it. $this->logoutCurrentUserLoginNewUserAndGetByUsername('jim'); $this->resetGetArray(); $content = $this->runControllerWithNoExceptionsAndGetContent('/reports/default/list'); $this->assertNotContains($postData['RowsAndColumnsReportWizardForm']['name'], $content); $this->setGetArray(array('id' => $savedReports[0]->id)); $this->runControllerWithAccessDeniedSecurityExceptionAndGetContent('/reports/default/details'); }