public function testUnlinkContactForAccount() { $super = $this->logoutCurrentUserLoginNewUserAndGetByUsername('super'); $simpleUser = User::getByUsername('simpleUser'); Yii::app()->user->userModel = $simpleUser; $simpleUser->setRight('AccountsModule', AccountsModule::RIGHT_ACCESS_ACCOUNTS); $simpleUser->setRight('AccountsModule', AccountsModule::RIGHT_CREATE_ACCOUNTS); $simpleUser->setRight('ContactsModule', ContactsModule::RIGHT_ACCESS_CONTACTS); $simpleUser->setRight('ContactsModule', ContactsModule::RIGHT_ACCESS_CONTACTS); $this->assertTrue($simpleUser->save()); $account = AccountTestHelper::createAccountByNameForOwner('simpleUserAccount', $simpleUser); $contact = ContactTestHelper::createContactWithAccountByNameForOwner('simpleUserContact', $simpleUser, $account); $accounts = Account::getAll(); $this->assertEquals(1, count($accounts)); $contacts = Contact::getAll(); $this->assertEquals(1, count($contacts)); $superAccountId = self::getModelIdByModelNameAndName('Account', 'simpleUserAccount'); $this->setGetArray(array('id' => $superAccountId)); $this->resetPostArray(); $this->runControllerWithNoExceptionsAndGetContent('accounts/default/details'); $contactId = self::getModelIdByModelNameAndName('Contact', 'simpleUserContact simpleUserContactson'); //unlinking the contact $this->setGetArray(array('id' => $contactId, 'relationModelClassName' => 'Account', 'relationModelId' => $superAccountId, 'relationModelRelationName' => 'contacts')); $content = $this->runControllerWithNoExceptionsAndGetContent('contacts/default/unlink', true); $accounts = Account::getAll(); $this->assertEquals(1, count($accounts)); $contacts = Contact::getAll(); $contactId = $contacts[0]->id; $contacts[0]->forget(); $contact = Contact::getById($contactId); $this->assertTrue($contact->account->id < 0); }
public function testRebuildDatabaseWithNonSuperAdminUser() { $steven = UserTestHelper::createBasicUser('Steven'); Yii::app()->user->userModel = $steven; $item = NamedSecurableItem::getByName('AccountsModule'); $this->assertEquals(Permission::NONE, $item->getEffectivePermissions($steven)); $accounts = Account::getAll(); $users = User::getAll(); $this->assertEquals(0, count($accounts)); $this->assertEquals(2, count($users)); $adapter = new ModelAttributesAdapter(new Account()); $adapter->resolveDatabaseSchemaForModel('Account'); //Confirm the counts of data are still correct $accounts = Account::getAll(); $users = User::getAll(); $this->assertEquals(0, count($accounts)); $this->assertEquals(2, count($users)); //Explicitly deny read, write, and deny Yii::app()->user->userModel = User::getByUsername('super'); $item->addPermissions($steven, Permission::READ_WRITE_DELETE, Permission::DENY); $this->assertTrue($item->save()); //Make sure steven has explicit deny $item = NamedSecurableItem::getByName('AccountsModule'); $this->assertEquals(Permission::NONE, $item->getEffectivePermissions($steven)); Yii::app()->user->userModel = $steven; $adapter = new ModelAttributesAdapter(new Account()); $adapter->resolveDatabaseSchemaForModel('Account'); //Confirm the counts of data are still correct $accounts = Account::getAll(); $users = User::getAll(); $this->assertEquals(0, count($accounts)); $this->assertEquals(2, count($users)); }
/** * Getting a list of all objects should not fail. * * @return BbObject[] */ public function testGetAll() { $at = getenv("BB_ACCESS_TOKEN"); $objects = Account::getAll($at); $this->assertContainsOnlyInstancesOf('\\ClausConrad\\BillysBilling\\Account', $objects, 'Getting all returns only objects of this type.'); return $objects; }
public function testSuperUserAllDefaultControllerActions() { // key used to test persistance of user settings $configKey = 'rollup'; //Set the current user as the super user. $super = $this->logoutCurrentUserLoginNewUserAndGetByUsername('super'); $accounts = Account::getAll(); $this->assertEquals(1, count($accounts)); $superAccountId = self::getModelIdByModelNameAndName('Account', 'superAccount'); //Load Details view to generate the portlets. $this->setGetArray(array('id' => $superAccountId)); $this->resetPostArray(); $this->runControllerWithNoExceptionsAndGetContent('accounts/default/details'); //Find the LatestActivity portlet. $portletToUse = null; $portlets = Portlet::getAll(); foreach ($portlets as $portlet) { if ($portlet->viewType == 'AccountLatestActivitiesForPortlet') { $portletToUse = $portlet; break; } } $this->assertNotNull($portletToUse); $this->assertEquals('AccountLatestActivitiesForPortletView', get_class($portletToUse->getView())); //Load the portlet details for latest activity $getData = array('id' => $superAccountId, 'portletId' => $portletToUse->id, 'uniqueLayoutId' => 'AccountDetailsAndRelationsView_' . $portletToUse->id, 'LatestActivitiesConfigurationForm' => array('filteredByModelName' => 'all', 'rollup' => '')); $this->setGetArray($getData); $this->resetPostArray(); $content = $this->runControllerWithNoExceptionsAndGetContent('accounts/defaultPortlet/details'); $this->assertTrue(LatestActivitiesPortletPersistentConfigUtil::getForCurrentUserByPortletIdAndKey($getData['portletId'], $configKey) === ''); //Now add roll up $getData['LatestActivitiesConfigurationForm']['rollup'] = '1'; $this->setGetArray($getData); $content = $this->runControllerWithNoExceptionsAndGetContent('accounts/defaultPortlet/details'); $this->assertTrue(LatestActivitiesPortletPersistentConfigUtil::getForCurrentUserByPortletIdAndKey($getData['portletId'], $configKey) === '1'); //Now filter by meeting, task, and note $getData['LatestActivitiesConfigurationForm']['filteredByModelName'] = 'Meeting'; $this->setGetArray($getData); $content = $this->runControllerWithNoExceptionsAndGetContent('accounts/defaultPortlet/details'); $getData['LatestActivitiesConfigurationForm']['filteredByModelName'] = 'Note'; $this->setGetArray($getData); $content = $this->runControllerWithNoExceptionsAndGetContent('accounts/defaultPortlet/details'); $getData['LatestActivitiesConfigurationForm']['filteredByModelName'] = 'Task'; $this->setGetArray($getData); $content = $this->runControllerWithNoExceptionsAndGetContent('accounts/defaultPortlet/details'); //Now do the same thing with filtering but turn off rollup. $getData['LatestActivitiesConfigurationForm']['rollup'] = ''; $getData['LatestActivitiesConfigurationForm']['filteredByModelName'] = 'Meeting'; $this->setGetArray($getData); $content = $this->runControllerWithNoExceptionsAndGetContent('accounts/defaultPortlet/details'); $this->assertTrue(LatestActivitiesPortletPersistentConfigUtil::getForCurrentUserByPortletIdAndKey($getData['portletId'], $configKey) === ''); $getData['LatestActivitiesConfigurationForm']['filteredByModelName'] = 'Note'; $this->setGetArray($getData); $content = $this->runControllerWithNoExceptionsAndGetContent('accounts/defaultPortlet/details'); $getData['LatestActivitiesConfigurationForm']['filteredByModelName'] = 'Task'; $this->setGetArray($getData); $content = $this->runControllerWithNoExceptionsAndGetContent('accounts/defaultPortlet/details'); }
public function teardown() { $super = User::getByUsername('super'); Yii::app()->user->userModel = $super; $accounts = Account::getAll(); foreach ($accounts as $account) { $account->delete(); } parent::teardown(); }
public function testSuperUserDerivedExplicitReadWriteModelPermissionsEditExistingAccount() { //Set the current user as the super user. $super = $this->logoutCurrentUserLoginNewUserAndGetByUsername('super'); $accounts = Account::getAll(); $this->assertEquals(1, count($accounts[0])); $this->assertEquals(0, count($accounts[0]->permissions)); $superAccountId = self::getModelIdByModelNameAndName('Account', 'superAccount'); $group1 = Group::getByName('Group1'); $everyoneGroup = Group::getByName(Group::EVERYONE_GROUP_NAME); //Save account and add a non-everyone group permission. //Permissions is the only thing changing on the account. $this->setGetArray(array('id' => $superAccountId)); $postData = array('type' => ExplicitReadWriteModelPermissionsUtil::MIXED_TYPE_NONEVERYONE_GROUP, 'nonEveryoneGroup' => $group1->id); $this->setPostArray(array('Account' => array('explicitReadWriteModelPermissions' => $postData))); //Make sure the redirect is to the details view and not the list view. $this->runControllerWithRedirectExceptionAndGetContent('accounts/default/edit', Yii::app()->createUrl('accounts/default/details', array('id' => $superAccountId))); //Confirm the permissions are set right based on how the account was saved. $accounts[0]->forget(); $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem(Account::getById($superAccountId)); $readWritePermitables = $explicitReadWriteModelPermissions->getReadWritePermitables(); $readOnlyPermitables = $explicitReadWriteModelPermissions->getReadOnlyPermitables(); $this->assertEquals(1, count($readWritePermitables)); $this->assertEquals(0, count($readOnlyPermitables)); $this->assertEquals($group1, $readWritePermitables[$group1->id]); //Change the permissions to Everyone group $this->setGetArray(array('id' => $superAccountId)); $postData = array('type' => ExplicitReadWriteModelPermissionsUtil::MIXED_TYPE_EVERYONE_GROUP); $this->setPostArray(array('Account' => array('explicitReadWriteModelPermissions' => $postData))); //Make sure the redirect is to the details view and not the list view. $this->runControllerWithRedirectExceptionAndGetContent('accounts/default/edit', Yii::app()->createUrl('accounts/default/details', array('id' => $superAccountId))); //Confirm the permissions are set right based on how the account was saved. $accounts[0]->forget(); $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem(Account::getById($superAccountId)); $readWritePermitables = $explicitReadWriteModelPermissions->getReadWritePermitables(); $readOnlyPermitables = $explicitReadWriteModelPermissions->getReadOnlyPermitables(); $this->assertEquals(1, count($readWritePermitables)); $this->assertEquals(0, count($readOnlyPermitables)); $this->assertEquals($everyoneGroup, $readWritePermitables[$everyoneGroup->id]); //Remove all explicit permissions. $this->setGetArray(array('id' => $superAccountId)); $postData = array('type' => null); $this->setPostArray(array('Account' => array('explicitReadWriteModelPermissions' => $postData))); //Make sure the redirect is to the details view and not the list view. $this->runControllerWithRedirectExceptionAndGetContent('accounts/default/edit', Yii::app()->createUrl('accounts/default/details', array('id' => $superAccountId))); //Confirm the permissions are set right based on how the account was saved. $accounts[0]->forget(); $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem(Account::getById($superAccountId)); $readWritePermitables = $explicitReadWriteModelPermissions->getReadWritePermitables(); $readOnlyPermitables = $explicitReadWriteModelPermissions->getReadOnlyPermitables(); $this->assertEquals(0, count($readWritePermitables)); $this->assertEquals(0, count($readOnlyPermitables)); }
public function testAddingMapPortletToAccountsDetailView() { //Lougout previous use and log in as super user $super = $this->logoutCurrentUserLoginNewUserAndGetByUsername('super'); //Retriving the super account id. $superAccountId = self::getModelIdByModelNameAndName('Account', 'superAccount'); //Create address array for the super account id. $address = array('street1' => '123 Knob Street', 'street2' => 'Apartment 4b', 'city' => 'Chicago', 'state' => 'Illinois', 'postalCode' => '60606', 'country' => 'USA'); //Assign Address to the super user account. AddressGeoCodeTestHelper::updateTestAccountsWithBillingAddress($superAccountId, $address, $super); //Fetch Latitute and Longitude values for address and save in Address. AddressMappingUtil::updateChangedAddresses(); $accounts = Account::getByName('superAccount'); $this->assertEquals(1, count($accounts)); $this->assertEquals(round('41.8817767', 4), round($accounts[0]->billingAddress->latitude, 4)); $this->assertEquals(round('-87.6371461', 4), round($accounts[0]->billingAddress->longitude, 4)); $this->assertEquals(0, $accounts[0]->billingAddress->invalid); $addressString = $accounts[0]->billingAddress->makeAddress(); $this->setGetArray(array('addressString' => $addressString, 'latitude' => $accounts[0]->billingAddress->latitude, 'longitude' => $accounts[0]->billingAddress->longitude)); $content = $this->runControllerWithNoExceptionsAndGetContent('maps/default/mapAndPoint'); $this->assertContains('plotMap', $content); $accounts = Account::getAll(); $this->assertEquals(1, count($accounts)); //Load Model Detail Views $this->setGetArray(array('id' => $superAccountId, 'lockPortlets' => '0')); $this->resetPostArray(); $this->runControllerWithNoExceptionsAndGetContent('accounts/default/details'); $portlets = Portlet::getByLayoutIdAndUserSortedByColumnIdAndPosition('AccountDetailsAndRelationsView', $super->id, array()); $this->assertEquals(3, count($portlets[1])); $this->assertFalse(array_key_exists(3, $portlets)); $this->assertEquals(4, count($portlets[2])); foreach ($portlets[2] as $position => $portlet) { $portlet->delete(); } $portlets = Portlet::getByLayoutIdAndUserSortedByColumnIdAndPosition('AccountDetailsAndRelationsView', $super->id, array()); $this->assertFalse(array_key_exists(2, $portlets)); $this->setGetArray(array('modelId' => $superAccountId, 'uniqueLayoutId' => 'AccountDetailsAndRelationsView', 'portletType' => 'MapForAccountAddress', 'redirect' => '0')); $this->resetPostArray(); $this->runControllerWithNoExceptionsAndGetContent('accounts/defaultPortlet/add', true); $portlets = Portlet::getByLayoutIdAndUserSortedByColumnIdAndPosition('AccountDetailsAndRelationsView', $super->id, array()); $this->assertEquals(1, count($portlets[2])); //Load Model Detail Views $this->setGetArray(array('id' => $superAccountId, 'lockPortlets' => '0')); $this->resetPostArray(); $this->runControllerWithNoExceptionsAndGetContent('accounts/default/details'); }
public function overwriteForm($return, $returnfull) { $r = new Role(); $arr = $r->getAll(); foreach ($arr as $rol) { if ($rol->role_active) { $arrNew[$rol->role_id] = $rol->role_id; } } $acc = new Account(); $acc->default_read_coloms = "admin_id,admin_nama_depan,admin_aktiv"; $arr = $acc->getAll(); foreach ($arr as $ac) { if ($ac->admin_aktiv) { $arrNew2[$ac->admin_id] = $ac->admin_id . " - " . $ac->admin_nama_depan; } } $return['role_admin_id'] = new Leap\View\InputSelect($arrNew2, "role_admin_id", "role_admin_id", $this->role_admin_id); $return['role_id'] = new Leap\View\InputSelect($arrNew, "role_id", "role_id", $this->role_id); $return['account_username'] = new Leap\View\InputText("hidden", "account_username", "account_username", $this->account_username); return $return; }
public function testAdditionOfPortletsInEmptyRightPanel() { $super = $this->logoutCurrentUserLoginNewUserAndGetByUsername('super'); $superAccountId = self::getModelIdByModelNameAndName('Account', 'superAccount'); $accounts = Account::getAll(); $this->assertEquals(1, count($accounts)); //Load Model Detail Views $this->setGetArray(array('id' => $superAccountId, 'lockPortlets' => '0')); $this->resetPostArray(); $this->runControllerWithNoExceptionsAndGetContent('accounts/default/details'); $portlets = Portlet::getByLayoutIdAndUserSortedByColumnIdAndPosition('AccountDetailsAndRelationsView', $super->id, array()); $this->assertEquals(3, count($portlets[1])); $this->assertFalse(array_key_exists(3, $portlets)); $this->assertEquals(4, count($portlets[2])); foreach ($portlets[2] as $position => $portlet) { $portlet->delete(); } $this->setGetArray(array('modelId' => $superAccountId, 'uniqueLayoutId' => 'AccountDetailsAndRelationsView', 'portletType' => 'ProductsForAccountRelatedList', 'redirect' => '0')); $this->resetPostArray(); $this->runControllerWithNoExceptionsAndGetContent('accounts/defaultPortlet/add', true); $portlets = Portlet::getByLayoutIdAndUserSortedByColumnIdAndPosition('AccountDetailsAndRelationsView', $super->id, array()); $this->assertEquals(1, count($portlets[2])); }
public function testExportWithSelectAllForMoreThan10Records() { $super = $this->logoutCurrentUserLoginNewUserAndGetByUsername('super'); $accounts = Account::getAll(); foreach ($accounts as $account) { $account->delete(); } $exportItems = ExportItem::getAll(); foreach ($exportItems as $exportItem) { $exportItem->delete(); } $numberOfRecords = rand(12, 100); ExportModule::$asynchronusThreshold = $numberOfRecords - 1; for ($i = 1; $i <= $numberOfRecords; $i++) { $randomData = RandomDataUtil::getRandomDataByModuleAndModelClassNames('AccountsModule', 'Account'); AccountTestHelper::createAccountByNameForOwner($randomData['names'][$i], $super); } $this->setGetArray(array('Account_page' => '1', 'export' => '', 'selectAll' => '1', 'selectedIds' => '', 'ajax' => '')); $this->runControllerWithRedirectExceptionAndGetUrl('accounts/default/export'); // Start background job $job = new ExportJob(); $this->assertTrue($job->run()); $exportItems = ExportItem::getAll(); $this->assertEquals(1, count($exportItems)); $fileModel = $exportItems[0]->exportFileModel; $this->assertEquals(1, $exportItems[0]->isCompleted); $this->assertEquals('csv', $exportItems[0]->exportFileType); $this->assertEquals('accounts', $exportItems[0]->exportFileName); $this->assertTrue($fileModel instanceof ExportFileModel); for ($i = 1; $i <= $numberOfRecords; $i++) { $this->assertContains($randomData['names'][$i], $fileModel->fileContent->content); } }
public function testOnCreateOwnerChangeAndDeleteAccountModel() { $super = User::getByUsername('super'); $billy = self::$billy; Yii::app()->user->userModel = $super; $job = new ReadPermissionSubscriptionUpdateForAccountFromBuildTableJob(); Yii::app()->jobQueue->deleteAll(); // Clean contact table $sql = "SELECT * FROM account_read_subscription"; $rows = ZurmoRedBean::getAll($sql); $this->assertTrue(empty($rows)); $account1 = AccountTestHelper::createAccountByNameForOwner('First Account', $super); sleep(1); $queuedJobs = Yii::app()->jobQueue->getAll(); $this->assertEquals(1, count($queuedJobs[5])); $this->assertEquals('ReadPermissionSubscriptionUpdateForAccountFromBuildTable', $queuedJobs[5][0]['jobType']); Yii::app()->jobQueue->deleteAll(); $this->assertTrue($job->run()); $sql = "SELECT * FROM account_read_subscription order by userid"; $rows = ZurmoRedBean::getAll($sql); $this->assertEquals(2, count($rows)); $this->assertEquals($super->id, $rows[0]['userid']); $this->assertEquals($account1->id, $rows[0]['modelid']); $this->assertEquals(ReadPermissionsSubscriptionUtil::TYPE_ADD, $rows[0]['subscriptiontype']); $this->assertEquals($billy->id, $rows[1]['userid']); $this->assertEquals($account1->id, $rows[1]['modelid']); $this->assertEquals(ReadPermissionsSubscriptionUtil::TYPE_ADD, $rows[1]['subscriptiontype']); sleep(1); // Test deletion $account1->delete(); sleep(1); $queuedJobs = Yii::app()->jobQueue->getAll(); $this->assertEquals(1, count($queuedJobs[5])); $this->assertEquals('ReadPermissionSubscriptionUpdateForAccountFromBuildTable', $queuedJobs[5][0]['jobType']); Yii::app()->jobQueue->deleteAll(); $this->assertTrue($job->run()); $sql = "SELECT * FROM account_read_subscription order by userid"; $rows2 = ZurmoRedBean::getAll($sql); $this->assertEquals(2, count($rows2)); $this->assertEquals($super->id, $rows2[0]['userid']); $this->assertEquals($account1->id, $rows2[0]['modelid']); $this->assertEquals(ReadPermissionsSubscriptionUtil::TYPE_DELETE, $rows2[0]['subscriptiontype']); $this->assertNotEquals($rows[0]['modifieddatetime'], $rows2[0]['modifieddatetime']); $this->assertEquals($billy->id, $rows2[1]['userid']); $this->assertEquals($account1->id, $rows2[1]['modelid']); $this->assertEquals(ReadPermissionsSubscriptionUtil::TYPE_DELETE, $rows2[1]['subscriptiontype']); $this->assertNotEquals($rows[1]['modifieddatetime'], $rows2[1]['modifieddatetime']); // Test owner change, but when both users have permissions to access the account $sql = "DELETE FROM account_read_subscription"; ZurmoRedBean::exec($sql); $sql = "SELECT * FROM account_read_subscription"; $rows = ZurmoRedBean::getAll($sql); $this->assertTrue(empty($rows)); $account2 = AccountTestHelper::createAccountByNameForOwner('Second Account', $super); sleep(1); $queuedJobs = Yii::app()->jobQueue->getAll(); $this->assertEquals(1, count($queuedJobs[5])); $this->assertEquals('ReadPermissionSubscriptionUpdateForAccountFromBuildTable', $queuedJobs[5][0]['jobType']); Yii::app()->jobQueue->deleteAll(); $this->assertTrue($job->run()); $sql = "SELECT * FROM account_read_subscription order by userid"; $rows = ZurmoRedBean::getAll($sql); $this->assertEquals(2, count($rows)); $this->assertEquals($super->id, $rows[0]['userid']); $this->assertEquals($account2->id, $rows[0]['modelid']); $this->assertEquals(ReadPermissionsSubscriptionUtil::TYPE_ADD, $rows[0]['subscriptiontype']); $this->assertEquals($billy->id, $rows[1]['userid']); $this->assertEquals($account2->id, $rows[1]['modelid']); $this->assertEquals(ReadPermissionsSubscriptionUtil::TYPE_ADD, $rows[1]['subscriptiontype']); sleep(1); $account2->owner = self::$billy; $this->assertTrue($account2->save()); sleep(1); $queuedJobs = Yii::app()->jobQueue->getAll(); $this->assertEquals(1, count($queuedJobs[5])); $this->assertEquals('ReadPermissionSubscriptionUpdateForAccountFromBuildTable', $queuedJobs[5][0]['jobType']); Yii::app()->jobQueue->deleteAll(); $this->assertTrue($job->run()); $sql = "SELECT * FROM account_read_subscription order by userid"; $rows = ZurmoRedBean::getAll($sql); $this->assertEquals(2, count($rows)); $this->assertEquals($super->id, $rows[0]['userid']); $this->assertEquals($account2->id, $rows[0]['modelid']); $this->assertEquals(ReadPermissionsSubscriptionUtil::TYPE_ADD, $rows[0]['subscriptiontype']); $this->assertEquals(self::$billy->id, $rows[1]['userid']); $this->assertEquals($account2->id, $rows[1]['modelid']); $this->assertEquals(ReadPermissionsSubscriptionUtil::TYPE_ADD, $rows[1]['subscriptiontype']); // Clean account table $accounts = Account::getAll(); foreach ($accounts as $account) { $account->delete(); } $sql = "DELETE FROM account_read_subscription"; ZurmoRedBean::exec($sql); $johnny = self::$johnny; $account3 = AccountTestHelper::createAccountByNameForOwner('Third Account', $johnny); sleep(1); $queuedJobs = Yii::app()->jobQueue->getAll(); $this->assertEquals(1, count($queuedJobs[5])); $this->assertEquals('ReadPermissionSubscriptionUpdateForAccountFromBuildTable', $queuedJobs[5][0]['jobType']); Yii::app()->jobQueue->deleteAll(); $this->assertTrue($job->run()); $sql = "SELECT * FROM account_read_subscription order by userid"; $rows = ZurmoRedBean::getAll($sql); $this->assertEquals(3, count($rows)); $this->assertEquals($super->id, $rows[0]['userid']); $this->assertEquals($account3->id, $rows[0]['modelid']); $this->assertEquals(ReadPermissionsSubscriptionUtil::TYPE_ADD, $rows[0]['subscriptiontype']); $this->assertEquals($billy->id, $rows[1]['userid']); $this->assertEquals($account3->id, $rows[1]['modelid']); $this->assertEquals(ReadPermissionsSubscriptionUtil::TYPE_ADD, $rows[1]['subscriptiontype']); $this->assertEquals($johnny->id, $rows[2]['userid']); $this->assertEquals($account3->id, $rows[2]['modelid']); $this->assertEquals(ReadPermissionsSubscriptionUtil::TYPE_ADD, $rows[2]['subscriptiontype']); $account3Id = $account3->id; $account3->forgetAll(); $account3 = Account::getById($account3Id); $this->assertTrue($account3->save()); $account3->forgetAll(); PermissionsCache::forgetAll(); $account3 = Account::getById($account3Id); $account3->owner = $super; $this->assertTrue($account3->save()); sleep(1); $queuedJobs = Yii::app()->jobQueue->getAll(); $this->assertEquals(1, count($queuedJobs[5])); $this->assertEquals('ReadPermissionSubscriptionUpdateForAccountFromBuildTable', $queuedJobs[5][0]['jobType']); Yii::app()->jobQueue->deleteAll(); $this->assertTrue($job->run()); $sql = "SELECT * FROM account_read_subscription order by userid"; $rows = ZurmoRedBean::getAll($sql); $this->assertEquals(3, count($rows)); $this->assertEquals($super->id, $rows[0]['userid']); $this->assertEquals($account3->id, $rows[0]['modelid']); $this->assertEquals(ReadPermissionsSubscriptionUtil::TYPE_ADD, $rows[0]['subscriptiontype']); $this->assertEquals($billy->id, $rows[1]['userid']); $this->assertEquals($account3->id, $rows[1]['modelid']); $this->assertEquals(ReadPermissionsSubscriptionUtil::TYPE_ADD, $rows[1]['subscriptiontype']); $this->assertEquals($johnny->id, $rows[2]['userid']); $this->assertEquals($account3->id, $rows[2]['modelid']); $this->assertEquals(ReadPermissionsSubscriptionUtil::TYPE_DELETE, $rows[2]['subscriptiontype']); }
/** * @depends testExportByModelIds */ public function testExportReportWithMultiplePagesOfData() { $super = User::getByUsername('super'); Yii::app()->user->userModel = $super; $numberOfUserNotifications = Notification::getCountByTypeAndUser('ExportProcessCompleted', Yii::app()->user->userModel); $report = new Report(); $report->setType(Report::TYPE_ROWS_AND_COLUMNS); $report->setModuleClassName('AccountsModule'); $report->setFiltersStructure(''); $displayAttribute = new DisplayAttributeForReportForm('AccountsModule', 'Account', Report::TYPE_ROWS_AND_COLUMNS); $displayAttribute->setModelAliasUsingTableAliasName('model1'); $displayAttribute->attributeIndexOrDerivedType = 'name'; $report->addDisplayAttribute($displayAttribute); $dataProvider = new RowsAndColumnsReportDataProvider($report); $exportItem = new ExportItem(); $exportItem->isCompleted = 0; $exportItem->exportFileType = 'csv'; $exportItem->exportFileName = 'rowAndColumnsTest2'; $exportItem->modelClassName = 'SavedReport'; $exportItem->serializedData = ExportUtil::getSerializedDataForExport($dataProvider); $this->assertTrue($exportItem->save()); $id = $exportItem->id; $exportItem->forget(); unset($exportItem); //Delete queued jobs from test exportItems created above Yii::app()->jobQueue->deleteAll(); ExportModule::$asynchronousPageSize = 2; $job = new ExportJob(); $this->assertEquals(0, count(Yii::app()->jobQueue->getAll())); $this->assertTrue($job->run()); $this->assertEquals(0, count(Yii::app()->jobQueue->getAll())); $exportItem = ExportItem::getById($id); $fileModel = $exportItem->exportFileModel; $this->assertEquals(1, $exportItem->isCompleted); $this->assertEquals(0, $exportItem->processOffset); $this->assertEquals('csv', $exportItem->exportFileType); $this->assertEquals('rowAndColumnsTest2', $exportItem->exportFileName); $this->assertTrue($fileModel instanceof ExportFileModel); $accounts = Account::getAll(); $headerData = array('Name'); $data = array(); foreach ($accounts as $account) { $data[] = array($account->name); } $output = ExportItemToCsvFileUtil::export($data, $headerData, 'rowAndColumnsTest2.csv', false); $this->assertEquals($output, $fileModel->fileContent->content); // Check if user got notification message, and if its type is ExportProcessCompleted $this->assertEquals($numberOfUserNotifications + 1, Notification::getCountByTypeAndUser('ExportProcessCompleted', Yii::app()->user->userModel)); //Matrix report should not paginate $report = new Report(); $report->setType(Report::TYPE_MATRIX); $report->setModuleClassName('AccountsModule'); $report->setFiltersStructure(''); $displayAttribute = new DisplayAttributeForReportForm('AccountsModule', 'Account', Report::TYPE_MATRIX); $displayAttribute->setModelAliasUsingTableAliasName('model1'); $displayAttribute->attributeIndexOrDerivedType = 'Count'; $report->addDisplayAttribute($displayAttribute); $groupBy = new GroupByForReportForm('AccountsModule', 'Account', Report::TYPE_MATRIX); $groupBy->attributeIndexOrDerivedType = 'name'; $groupBy->axis = 'y'; $report->addGroupBy($groupBy); $groupBy = new GroupByForReportForm('AccountsModule', 'Account', Report::TYPE_MATRIX); $groupBy->attributeIndexOrDerivedType = 'officePhone'; $report->addGroupBy($groupBy); $dataProvider = new MatrixReportDataProvider($report); $exportItem = new ExportItem(); $exportItem->isCompleted = 0; $exportItem->exportFileType = 'csv'; $exportItem->exportFileName = 'matrixTest1'; $exportItem->modelClassName = 'SavedReport'; $exportItem->serializedData = ExportUtil::getSerializedDataForExport($dataProvider); $this->assertTrue($exportItem->save()); $id = $exportItem->id; $exportItem->forget(); unset($exportItem); //Delete queued jobs from test exportItems created above Yii::app()->jobQueue->deleteAll(); ExportModule::$asynchronousPageSize = 2; $job = new ExportJob(); $this->assertTrue($job->run()); $exportItem = ExportItem::getById($id); $fileModel = $exportItem->exportFileModel; $this->assertEquals(1, $exportItem->isCompleted); $this->assertEquals(0, $exportItem->processOffset); $this->assertEquals('csv', $exportItem->exportFileType); $this->assertEquals('matrixTest1', $exportItem->exportFileName); $this->assertTrue($fileModel instanceof ExportFileModel); $fileContent = $fileModel->fileContent->content; $this->assertContains('Test Account', $fileContent); $this->assertContains('Test Account 2', $fileContent); $this->assertContains('Test Account 3', $fileContent); $this->assertContains('Test Account 4', $fileContent); // Check if user got notification message, and if its type is ExportProcessCompleted $this->assertEquals($numberOfUserNotifications + 2, Notification::getCountByTypeAndUser('ExportProcessCompleted', Yii::app()->user->userModel)); }
public function testChangeOwnerOfModelInReadSubscriptionTableByModelIdAndModelClassNameAndUser() { $super = User::getByUsername('super'); $billy = UserTestHelper::createBasicUser('billy'); Yii::app()->user->userModel = $super; // Clean contact table $contacts = Contact::getAll(); foreach ($contacts as $contact) { $contact->delete(); } $sql = "DELETE FROM contact_read_subscription"; ZurmoRedBean::exec($sql); $sql = "SELECT * FROM contact_read_subscription"; $rows = ZurmoRedBean::getAll($sql); $this->assertTrue(empty($rows)); $contact1 = ContactTestHelper::createContactByNameForOwner('Ray', $super); $sql = "SELECT * FROM contact_read_subscription"; $rows = ZurmoRedBean::getAll($sql); $this->assertEquals(0, count($rows)); ReadPermissionsSubscriptionUtil::updateReadSubscriptionTableByModelClassNameAndUser('Contact', $super, time(), true, new MessageLogger()); ReadPermissionsSubscriptionUtil::updateReadSubscriptionTableByModelClassNameAndUser('Contact', $billy, time(), true, new MessageLogger()); $sql = "SELECT * FROM contact_read_subscription"; $rows = ZurmoRedBean::getAll($sql); $this->assertEquals(1, count($rows)); $this->assertEquals($super->id, $rows[0]['userid']); $this->assertEquals($contact1->id, $rows[0]['modelid']); $this->assertEquals(ReadPermissionsSubscriptionUtil::TYPE_ADD, $rows[0]['subscriptiontype']); $contact1->owner = $billy; $this->assertTrue($contact1->save()); ReadPermissionsSubscriptionUtil::updateReadSubscriptionTableByModelClassNameAndUser('Contact', $super, time(), true, new MessageLogger()); ReadPermissionsSubscriptionUtil::updateReadSubscriptionTableByModelClassNameAndUser('Contact', $billy, time(), true, new MessageLogger()); $sql = "SELECT * FROM contact_read_subscription order by id"; $rows = ZurmoRedBean::getAll($sql); $this->assertEquals(2, count($rows)); $this->assertEquals($super->id, $rows[0]['userid']); $this->assertEquals($contact1->id, $rows[0]['modelid']); $this->assertEquals(ReadPermissionsSubscriptionUtil::TYPE_DELETE, $rows[0]['subscriptiontype']); $this->assertEquals($billy->id, $rows[1]['userid']); $this->assertEquals($contact1->id, $rows[1]['modelid']); $this->assertEquals(ReadPermissionsSubscriptionUtil::TYPE_ADD, $rows[1]['subscriptiontype']); // Test with accounts - in this case nothing shouldn't change directly during account save() or delete() $accounts = Account::getAll(); foreach ($accounts as $account) { $account->delete(); } $sql = "DELETE FROM account_read_subscription"; ZurmoRedBean::exec($sql); $sql = "SELECT * FROM account_read_subscription"; $rows = ZurmoRedBean::getAll($sql); $this->assertTrue(empty($rows)); $account1 = AccountTestHelper::createAccountByNameForOwner("TestAccount2", $super); $sql = "SELECT * FROM account_read_subscription"; $rows = ZurmoRedBean::getAll($sql); $this->assertTrue(empty($rows)); $account1->owner = $billy; $this->assertTrue($account1->save()); $sql = "SELECT * FROM account_read_subscription"; $rows = ZurmoRedBean::getAll($sql); $this->assertTrue(empty($rows)); }
public function testAllActions() { //Ensure that installed = false Yii::app()->setApplicationInstalled(false); //Check index action. $this->runControllerWithNoExceptionsAndGetContent('install/default'); $this->runControllerWithNoExceptionsAndGetContent('install/default/index'); //Check welcome action. $this->runControllerWithNoExceptionsAndGetContent('install/default/welcome'); //Check checkSystem action. if (isset($_SERVER['SERVER_SOFTWARE'])) { $serverSoftware = $_SERVER['SERVER_SOFTWARE']; } $_SERVER['SERVER_SOFTWARE'] = 'Apache'; $this->runControllerWithNoExceptionsAndGetContent('install/default/checkSystem'); //Check settings action. $this->runControllerWithNoExceptionsAndGetContent('install/default/settings'); //Check validateSettings action. //First validation will fail, and there should be at least validation errors. $this->setPostArray(array('ajax' => 'install-form', 'InstallSettingsForm' => array('databaseHostname' => '', 'databaseAdminUsername' => '', 'databaseAdminPassword' => '', 'databaseName' => '', 'databaseUsername' => '', 'databasePassword' => '', 'databasePort' => '', 'superUserPassword' => '', 'memcacheHostname' => '', 'memcachePortNumber' => '', 'memcacheAvailable' => '', 'databaseType' => 'mysql', 'removeExistingData' => '', 'installDemoData' => ''))); $content = $this->runControllerWithExitExceptionAndGetContent('install/default/settings'); $errors = CJSON::decode($content); $this->assertGreaterThanOrEqual(5, count($errors)); $postData = array('ajax' => 'install-form', 'InstallSettingsForm' => array('databaseHostname' => $this->databaseHostname, 'databaseAdminUsername' => '', 'databaseAdminPassword' => '', 'databaseName' => $this->databaseName, 'databaseUsername' => $this->databaseUsername, 'databasePassword' => $this->databasePassword, 'databasePort' => $this->databasePort, 'superUserPassword' => $this->superUserPassword, 'databaseType' => 'mysql', 'removeExistingData' => '1', 'installDemoData' => '')); if (MEMCACHE_ON) { $memcacheSettings = array('memcacheHostname' => 'localhost', 'memcachePortNumber' => '11211', 'memcacheAvailable' => '1'); } else { $memcacheSettings = array('memcacheHostname' => '', 'memcachePortNumber' => '', 'memcacheAvailable' => '0'); } $postData['InstallSettingsForm'] = array_merge($postData['InstallSettingsForm'], $memcacheSettings); $this->setPostArray($postData); $content = $this->runControllerWithExitExceptionAndGetContent('install/default/settings'); $errors = CJSON::decode($content); $this->assertEquals(1, count($errors)); $postData['InstallSettingsForm']['hostInfo'] = 'http://www.example.com'; $this->setPostArray($postData); $content = $this->runControllerWithExitExceptionAndGetContent('install/default/settings'); $errors = CJSON::decode($content); $this->assertEquals(0, count($errors)); //Run installation. $this->setPostArray(array('InstallSettingsForm' => array('databaseHostname' => $this->databaseHostname, 'databaseAdminUsername' => '', 'databaseAdminPassword' => '', 'databaseName' => $this->databaseName, 'databaseUsername' => $this->databaseUsername, 'databasePassword' => $this->databasePassword, 'databasePort' => $this->databasePort, 'superUserPassword' => $this->superUserPassword, 'memcacheHostname' => 'localhost', 'memcachePortNumber' => '11211', 'memcacheAvailable' => '1', 'databaseType' => 'mysql', 'removeExistingData' => '1', 'installDemoData' => '', 'hostInfo' => 'http://www.example.com'))); //Close db connection(new will be created during installation process). RedBeanDatabase::close(); $this->runControllerWithExitExceptionAndGetContent('install/default/settings'); $industryFieldData = CustomFieldData::getByName('Industries'); $this->assertGreaterThan('0', count(unserialize($industryFieldData->serializedData))); //Check installDemoData action. RedBeanDatabase::close(); DemoDataUtil::unsetLoadedModules(); $this->runControllerWithNoExceptionsAndGetContent('install/default/installDemoData'); $this->assertGreaterThan('0', Account::getAll()); $this->assertGreaterThan('0', Contact::getAll()); //Restore $_SERVER['SERVER_SOFTWARE'] if (isset($serverSoftware)) { $_SERVER['SERVER_SOFTWARE'] = $serverSoftware; } else { unset($_SERVER['SERVER_SOFTWARE']); } }
/** * @depends testParentAccountHasCorrectAttributeImportType */ public function testSimpleUserImportWhereAllRowsSucceed() { Yii::app()->user->userModel = User::getByUsername('super'); $parentAccount = AccountTestHelper::createAccountByNameForOwner('parentAccount', Yii::app()->user->userModel); $parentAccountId = $parentAccount->id; $accounts = Account::getAll(); $this->assertEquals(1, count($accounts)); $import = new Import(); $serializedData['importRulesType'] = 'Accounts'; $serializedData['firstRowIsHeaderRow'] = true; $import->serializedData = serialize($serializedData); $this->assertTrue($import->save()); ImportTestHelper::createTempTableByFileNameAndTableName('importTest.csv', $import->getTempTableName(), Yii::getPathOfAlias('application.modules.accounts.tests.unit.files')); //update the ids of the account column to match the parent account. R::exec("update " . $import->getTempTableName() . " set column_16 = " . $parentAccount->id . " where id != 1 limit 4"); $this->assertEquals(4, ImportDatabaseUtil::getCount($import->getTempTableName())); // includes header rows. $mappingData = array('column_0' => ImportMappingUtil::makeStringColumnMappingData('name'), 'column_1' => ImportMappingUtil::makeStringColumnMappingData('officePhone'), 'column_2' => ImportMappingUtil::makeStringColumnMappingData('officeFax'), 'column_3' => ImportMappingUtil::makeIntegerColumnMappingData('employees'), 'column_4' => ImportMappingUtil::makeUrlColumnMappingData('website'), 'column_5' => ImportMappingUtil::makeFloatColumnMappingData('annualRevenue'), 'column_6' => ImportMappingUtil::makeTextAreaColumnMappingData('description'), 'column_7' => ImportMappingUtil::makeStringColumnMappingData('billingAddress__city'), 'column_8' => ImportMappingUtil::makeStringColumnMappingData('billingAddress__country'), 'column_9' => ImportMappingUtil::makeStringColumnMappingData('billingAddress__postalCode'), 'column_10' => ImportMappingUtil::makeStringColumnMappingData('billingAddress__state'), 'column_11' => ImportMappingUtil::makeStringColumnMappingData('billingAddress__street1'), 'column_12' => ImportMappingUtil::makeStringColumnMappingData('billingAddress__street2'), 'column_13' => ImportMappingUtil::makeEmailColumnMappingData('primaryEmail__emailAddress'), 'column_14' => ImportMappingUtil::makeBooleanColumnMappingData('primaryEmail__isInvalid'), 'column_15' => ImportMappingUtil::makeBooleanColumnMappingData('primaryEmail__optOut'), 'column_16' => ImportMappingUtil::makeHasOneColumnMappingData('account'), 'column_17' => ImportMappingUtil::makeDropDownColumnMappingData('industry'), 'column_18' => ImportMappingUtil::makeDropDownColumnMappingData('type')); $importRules = ImportRulesUtil::makeImportRulesByType('Accounts'); $page = 0; $config = array('pagination' => array('pageSize' => 50)); //This way all rows are processed. $dataProvider = new ImportDataProvider($import->getTempTableName(), true, $config); $dataProvider->getPagination()->setCurrentPage($page); $importResultsUtil = new ImportResultsUtil($import); $messageLogger = new ImportMessageLogger(); ImportUtil::importByDataProvider($dataProvider, $importRules, $mappingData, $importResultsUtil, new ExplicitReadWriteModelPermissions(), $messageLogger); $importResultsUtil->processStatusAndMessagesForEachRow(); //Confirm that 3 models where created. $accounts = Account::getAll(); $this->assertEquals(4, count($accounts)); $accounts = Account::getByName('account1'); $this->assertEquals(1, count($accounts[0])); $this->assertEquals(123456, $accounts[0]->officePhone); $this->assertEquals(555, $accounts[0]->officeFax); $this->assertEquals(1, $accounts[0]->employees); $this->assertEquals('http://www.account1.com', $accounts[0]->website); $this->assertEquals(100, $accounts[0]->annualRevenue); $this->assertEquals('desc1', $accounts[0]->description); $this->assertEquals('city1', $accounts[0]->billingAddress->city); $this->assertEquals('country1', $accounts[0]->billingAddress->country); $this->assertEquals('postal1', $accounts[0]->billingAddress->postalCode); $this->assertEquals('state1', $accounts[0]->billingAddress->state); $this->assertEquals('street11', $accounts[0]->billingAddress->street1); $this->assertEquals('street21', $accounts[0]->billingAddress->street2); $this->assertEquals('*****@*****.**', $accounts[0]->primaryEmail->emailAddress); $this->assertEquals(null, $accounts[0]->primaryEmail->isInvalid); $this->assertEquals(null, $accounts[0]->primaryEmail->optOut); $this->assertTrue($accounts[0]->account->isSame($parentAccount)); $this->assertEquals('Automotive', $accounts[0]->industry->value); $this->assertEquals('Prospect', $accounts[0]->type->value); $accounts = Account::getByName('account2'); $this->assertEquals(1, count($accounts[0])); $this->assertEquals(223456, $accounts[0]->officePhone); $this->assertEquals(666, $accounts[0]->officeFax); $this->assertEquals(2, $accounts[0]->employees); $this->assertEquals('http://www.account2.com', $accounts[0]->website); $this->assertEquals(200, $accounts[0]->annualRevenue); $this->assertEquals('desc2', $accounts[0]->description); $this->assertEquals('city2', $accounts[0]->billingAddress->city); $this->assertEquals('country2', $accounts[0]->billingAddress->country); $this->assertEquals('postal2', $accounts[0]->billingAddress->postalCode); $this->assertEquals('state2', $accounts[0]->billingAddress->state); $this->assertEquals('street12', $accounts[0]->billingAddress->street1); $this->assertEquals('street22', $accounts[0]->billingAddress->street2); $this->assertEquals('*****@*****.**', $accounts[0]->primaryEmail->emailAddress); $this->assertEquals('1', $accounts[0]->primaryEmail->isInvalid); $this->assertEquals('1', $accounts[0]->primaryEmail->optOut); $this->assertTrue($accounts[0]->account->isSame($parentAccount)); $this->assertEquals('Banking', $accounts[0]->industry->value); $this->assertEquals('Customer', $accounts[0]->type->value); $accounts = Account::getByName('account3'); $this->assertEquals(1, count($accounts[0])); $this->assertEquals(323456, $accounts[0]->officePhone); $this->assertEquals(777, $accounts[0]->officeFax); $this->assertEquals(3, $accounts[0]->employees); $this->assertEquals('http://www.account3.com', $accounts[0]->website); $this->assertEquals(300, $accounts[0]->annualRevenue); $this->assertEquals('desc3', $accounts[0]->description); $this->assertEquals('city3', $accounts[0]->billingAddress->city); $this->assertEquals('country3', $accounts[0]->billingAddress->country); $this->assertEquals('postal3', $accounts[0]->billingAddress->postalCode); $this->assertEquals('state3', $accounts[0]->billingAddress->state); $this->assertEquals('street13', $accounts[0]->billingAddress->street1); $this->assertEquals('street23', $accounts[0]->billingAddress->street2); $this->assertEquals('*****@*****.**', $accounts[0]->primaryEmail->emailAddress); $this->assertEquals(null, $accounts[0]->primaryEmail->isInvalid); $this->assertEquals(null, $accounts[0]->primaryEmail->optOut); $this->assertTrue($accounts[0]->account->isSame($parentAccount)); $this->assertEquals('Energy', $accounts[0]->industry->value); $this->assertEquals('Vendor', $accounts[0]->type->value); //Confirm 10 rows were processed as 'created'. $this->assertEquals(3, ImportDatabaseUtil::getCount($import->getTempTableName(), "status = " . ImportRowDataResultsUtil::CREATED)); //Confirm that 0 rows were processed as 'updated'. $this->assertEquals(0, ImportDatabaseUtil::getCount($import->getTempTableName(), "status = " . ImportRowDataResultsUtil::UPDATED)); //Confirm 2 rows were processed as 'errors'. $this->assertEquals(0, ImportDatabaseUtil::getCount($import->getTempTableName(), "status = " . ImportRowDataResultsUtil::ERROR)); $beansWithErrors = ImportDatabaseUtil::getSubset($import->getTempTableName(), "status = " . ImportRowDataResultsUtil::ERROR); $this->assertEquals(0, count($beansWithErrors)); //test the parent account has 3 children $parentAccount->forget(); $parentAccount = Account::getById($parentAccountId); $this->assertEquals(3, $parentAccount->accounts->count()); }
/** * Test Bug with mass delete and multiple pages when using select all * @depends testMassDeleteActionsForSelectedIds */ public function testMassDeletePagesProperlyAndRemovesAllSelected() { $super = $this->logoutCurrentUserLoginNewUserAndGetByUsername('super'); //MassDelete for selected Record Count $accounts = Account::getAll(); $this->assertEquals(10, count($accounts)); //save Model MassDelete for entire search result $this->setGetArray(array('selectAll' => '1', 'Account_page' => 1)); $this->setPostArray(array('selectedRecordCount' => 10)); //Run Mass Delete using progress save for page1. $pageSize = Yii::app()->pagination->getForCurrentUserByType('massDeleteProgressPageSize'); $this->assertEquals(5, $pageSize); $this->runControllerWithExitExceptionAndGetContent('accounts/default/massDelete'); //check for previous mass delete progress $accounts = Account::getAll(); $this->assertEquals(5, count($accounts)); $this->setGetArray(array('selectAll' => '1', 'Account_page' => 2)); $this->setPostArray(array('selectedRecordCount' => 10)); //Run Mass Delete using progress save for page2. $pageSize = Yii::app()->pagination->getForCurrentUserByType('massDeleteProgressPageSize'); $this->assertEquals(5, $pageSize); $this->runControllerWithNoExceptionsAndGetContent('accounts/default/massDeleteProgress'); //calculating account's count $accounts = Account::getAll(); $this->assertEquals(0, count($accounts)); }
/** *Test Bug with mass delete and multiple pages when using select all */ public function testMassDeletePagesProperlyAndRemovesAllSelected() { $super = $this->logoutCurrentUserLoginNewUserAndGetByUsername('super'); $confused = User::getByUsername('confused'); $billy = User::getByUsername('billy'); //Load MassDelete view for the 8 accounts. $accounts = Account::getAll(); $this->assertEquals(8, count($accounts)); //Deleting all accounts //mass Delete pagination scenario //Run Mass Delete using progress save for page1 $this->setGetArray(array('selectAll' => '1', 'Account_page' => 1)); $this->setPostArray(array('selectedRecordCount' => 8)); $pageSize = Yii::app()->pagination->getForCurrentUserByType('massDeleteProgressPageSize'); $this->assertEquals(5, $pageSize); $content = $this->runControllerWithExitExceptionAndGetContent('accounts/default/massDelete'); $accounts = Account::getAll(); $this->assertEquals(3, count($accounts)); //Run Mass Delete using progress save for page2 $this->setGetArray(array('selectAll' => '1', 'Account_page' => 2)); $this->setPostArray(array('selectedRecordCount' => 8)); $pageSize = Yii::app()->pagination->getForCurrentUserByType('massDeleteProgressPageSize'); $this->assertEquals(5, $pageSize); $content = $this->runControllerWithNoExceptionsAndGetContent('accounts/default/massDeleteProgress'); $accounts = Account::getAll(); $this->assertEquals(0, count($accounts)); }
function crypt() { // die("no"); $acc = new Account(); $arr = $acc->getAll(); foreach ($arr as $acc) { $username = $acc->admin_username; $password = $acc->admin_password; // A higher "cost" is more secure but consumes more processing power $cost = 10; // Create a random salt $salt = strtr(base64_encode(mcrypt_create_iv(16, MCRYPT_DEV_URANDOM)), '+', '.'); // Prefix information about the hash so PHP knows how to verify it later. // "$2a$" Means we're using the Blowfish algorithm. The following two digits are the cost parameter. $salt = sprintf("\$2a\$%02d\$", $cost) . $salt; // Value: // $2a$10$eImiTXuWVxfM37uY4JANjQ== // Hash the password with the salt $hash = crypt($password, $salt); $acc->load = 1; $acc->admin_password = $hash; $acc->save(); } }
public function testActionUnlinkWithNoHasManyAndManyManyRelation() { $super = $this->logoutCurrentUserLoginNewUserAndGetByUsername('super'); $accounts = Account::getAll(); $this->assertEquals(1, count($accounts)); $contacts = Contact::getAll(); $this->assertEquals(2, count($contacts)); $superAccountId = self::getModelIdByModelNameAndName('Account', 'superAccount'); $contactId = self::getModelIdByModelNameAndName('Contact', 'noAccountContact noAccountContactson'); $this->setGetArray(array('id' => $contactId, 'relationModelClassName' => 'Account', 'relationModelId' => $superAccountId, 'relationModelRelationName' => 'billingAddress')); $content = $this->runControllerWithNotSupportedExceptionAndGetContent('contacts/default/unlink'); }
public function testSuperUserConvertActionWithTagCloud() { $super = $this->logoutCurrentUserLoginNewUserAndGetByUsername('super'); Account::deleteAll(); DesignerTestHelper::createTagCloudAttribute('tagcloud', false, 'Account'); $this->setGetArray(array('moduleClassName' => 'AccountsModule', 'viewClassName' => 'AccountConvertToView')); $layout = array('panels' => array(array('title' => 'Panel Title', 'panelDetailViewOnly' => 1, 'rows' => array(array('cells' => array(array('element' => 'name'))), array('cells' => array(array('element' => 'tagcloudCstm'))))))); $this->setPostArray(array('save' => 'Save', 'layout' => $layout)); $content = $this->runControllerWithExitExceptionAndGetContent('designer/default/LayoutEdit'); $this->assertContains('Layout saved successfully', $content); $lead = LeadTestHelper::createLeadbyNameForOwner('convertwithtagcloud', $super); $this->setGetArray(array('id' => $lead->id)); $this->setPostArray(array('Account' => array('name' => 'mynewaccountfromleadtagcloudconvert', 'tagcloudCstm' => array('values' => 'English,French')))); $this->assertEquals(0, Account::getCount()); $this->runControllerWithRedirectExceptionAndGetContent('leads/default/convert'); $this->assertEquals(1, Account::getCount()); $accounts = Account::getAll(); $this->assertEquals('English, French', strval($accounts[0]->tagcloudCstm)); }
public function testUpdateReadSubscriptionTableForAllUsersAndModels() { $super = User::getByUsername('super'); Yii::app()->user->userModel = $super; $steven = User::getByUsername('steven'); $sql = "DELETE FROM account_read_subscription"; R::exec($sql); $accounts = Account::getAll(); foreach ($accounts as $account) { $account->delete(); $account->forgetAll(); } $account1 = AccountTestHelper::createAccountByNameForOwner('First Account', $super); sleep(1); $account2 = AccountTestHelper::createAccountByNameForOwner('First Account', $steven); ReadPermissionsSubscriptionUtil::updateAllReadSubscriptionTables(false); $sql = "SELECT * FROM account_read_subscription WHERE userid = " . $super->id; $permissionTableRows = R::getAll($sql); $this->assertEquals(2, count($permissionTableRows)); $this->assertEquals($account1->id, $permissionTableRows[0]['modelid']); $this->assertEquals($super->id, $permissionTableRows[0]['userid']); $this->assertEquals(ReadPermissionsSubscriptionUtil::TYPE_ADD, $permissionTableRows[0]['subscriptiontype']); $this->assertEquals($account2->id, $permissionTableRows[1]['modelid']); $this->assertEquals($super->id, $permissionTableRows[1]['userid']); $this->assertEquals(ReadPermissionsSubscriptionUtil::TYPE_ADD, $permissionTableRows[1]['subscriptiontype']); $sql = "SELECT * FROM account_read_subscription WHERE userid = " . $steven->id; $permissionTableRows = R::getAll($sql); $this->assertEquals(1, count($permissionTableRows)); $this->assertEquals($account2->id, $permissionTableRows[0]['modelid']); $this->assertEquals($steven->id, $permissionTableRows[0]['userid']); $this->assertEquals(ReadPermissionsSubscriptionUtil::TYPE_ADD, $permissionTableRows[0]['subscriptiontype']); }
/** * @depends testGetSubset */ public function testOwnedSecurableItemCreated() { $mungeTableRowsBefore = self::getAccountMungeRowCount(); $bobby = User::getByUsername('bobby'); $benny = User::getByUsername('benny'); // Benny is a sales person so his manager Bobby should have access // to things he creates. Yii::app()->user->userModel = $bobby; $bobbyBeforeAccounts = Account::getAll(); Yii::app()->user->userModel = $benny; $bennyBeforeAccounts = Account::getAll(); $account = new Account(); $account->name = 'Doop de doop'; $this->assertTrue($account->save()); $this->assertEquals(array(Permission::ALL, Permission::NONE), $account->getActualPermissions($benny)); $this->assertEquals(array(Permission::ALL, Permission::NONE), $account->getActualPermissions($bobby)); $this->assertEquals(Permission::ALL, $account->getEffectivePermissions($benny)); $this->assertEquals(Permission::ALL, $account->getEffectivePermissions($bobby)); //Called in OwnedSecurableItem::afterSave(); //ReadPermissionsOptimizationUtil::ownedSecurableItemCreated($account); $bennyAfterAccounts = Account::getAll(); Yii::app()->user->userModel = $bobby; $bobbyAfterAccounts = Account::getAll(); $this->assertEquals(count($bennyBeforeAccounts) + 1, count($bennyAfterAccounts)); $this->assertEquals(count($bobbyBeforeAccounts) + 1, count($bobbyAfterAccounts)); $this->assertEquals($mungeTableRowsBefore + 1, self::getAccountMungeRowCount()); $this->rebuildAndTestThatTheMungeDoesntChange(); }
public function testImportWithLatestActivityDateTime() { Yii::app()->user->userModel = User::getByUsername('super'); $accounts = Account::deleteAll(); $import = new Import(); $serializedData['importRulesType'] = 'Accounts'; $serializedData['firstRowIsHeaderRow'] = true; $import->serializedData = serialize($serializedData); $this->assertTrue($import->save()); ImportTestHelper::createTempTableByFileNameAndTableName('importWithLatestActivityDateTimeTest.csv', $import->getTempTableName(), true, Yii::getPathOfAlias('application.modules.accounts.tests.unit.files')); $mappingData = array('column_0' => ImportMappingUtil::makeStringColumnMappingData('name'), 'column_1' => ImportMappingUtil::makeDateTimeColumnMappingData('latestActivityDateTime')); $importRules = ImportRulesUtil::makeImportRulesByType('Accounts'); $page = 0; $config = array('pagination' => array('pageSize' => 50)); //This way all rows are processed. $dataProvider = new ImportDataProvider($import->getTempTableName(), true, $config); $dataProvider->getPagination()->setCurrentPage($page); $importResultsUtil = new ImportResultsUtil($import); $messageLogger = new ImportMessageLogger(); ImportUtil::importByDataProvider($dataProvider, $importRules, $mappingData, $importResultsUtil, new ExplicitReadWriteModelPermissions(), $messageLogger); $importResultsUtil->processStatusAndMessagesForEachRow(); //Confirm that 2 models where created. $accounts = Account::getAll(); $this->assertCount(2, $accounts); $accounts = Account::getByName('company1'); $this->assertEquals('2011-12-22 05:03', substr($accounts[0]->latestActivityDateTime, 0, -3)); $accounts = Account::getByName('company2'); $this->assertNull($accounts[0]->latestActivityDateTime); //Confirm 2 rows were processed as 'created'. $this->assertEquals(2, ImportDatabaseUtil::getCount($import->getTempTableName(), "status = " . ImportRowDataResultsUtil::CREATED)); //Confirm that 0 rows were processed as 'updated'. $this->assertEquals(0, ImportDatabaseUtil::getCount($import->getTempTableName(), "status = " . ImportRowDataResultsUtil::UPDATED)); //Confirm 0 rows were processed as 'errors'. $this->assertEquals(0, ImportDatabaseUtil::getCount($import->getTempTableName(), "status = " . ImportRowDataResultsUtil::ERROR)); $beansWithErrors = ImportDatabaseUtil::getSubset($import->getTempTableName(), "status = " . ImportRowDataResultsUtil::ERROR); $this->assertEquals(0, count($beansWithErrors)); }
/** * @depends testSuperUserCreateAction */ public function testSuperUserConvertAction() { $super = $this->logoutCurrentUserLoginNewUserAndGetByUsername('super'); $startingLeadState = LeadsUtil::getStartingState(); $startingContactState = ContactsUtil::getStartingState(); $leads = Contact::getByName('myNewLead myNewLeadson'); $this->assertEquals(1, count($leads)); $lead = $leads[0]; $this->assertTrue($lead->state == $startingLeadState); //Test just going to the convert page. $this->setGetArray(array('id' => $lead->id)); $this->resetPostArray(); //Test trying to convert by skipping account creation $this->runControllerWithNoExceptionsAndGetContent('leads/default/convert'); $this->setGetArray(array('id' => $lead->id)); $this->setPostArray(array('AccountSkip' => 'Not Used')); $this->runControllerWithRedirectExceptionAndGetContent('leads/default/convert'); $leadId = $lead->id; $lead->forget(); $contact = Contact::getById($leadId); $this->assertTrue($contact->state == $startingContactState); //Test trying to convert by creating a new account. $lead5 = LeadTestHelper::createLeadbyNameForOwner('superLead5', $super); $this->assertTrue($lead5->state == $startingLeadState); $this->setGetArray(array('id' => $lead5->id)); $this->setPostArray(array('Account' => array('name' => 'someAccountName'))); $this->assertEquals(0, count(Account::getAll())); $this->runControllerWithRedirectExceptionAndGetContent('leads/default/convert'); $this->assertEquals(1, count(Account::getAll())); $lead5Id = $lead5->id; $lead5->forget(); $contact5 = Contact::getById($lead5Id); $this->assertTrue($contact5->state == $startingContactState); $this->assertEquals('someAccountName', $contact5->account->name); //Test trying to convert by selecting an existing account $account = AccountTestHelper::createAccountbyNameForOwner('someNewAccount', $super); $lead6 = LeadTestHelper::createLeadbyNameForOwner('superLead6', $super); $this->assertTrue($lead6->state == $startingLeadState); $this->setGetArray(array('id' => $lead6->id)); $this->setPostArray(array('AccountSelectForm' => array('accountId' => $account->id, 'accountName' => 'someNewAccount'))); $this->assertEquals(2, count(Account::getAll())); $this->runControllerWithRedirectExceptionAndGetContent('leads/default/convert'); $this->assertEquals(2, count(Account::getAll())); $lead6Id = $lead6->id; $lead6->forget(); $contact6 = Contact::getById($lead6Id); $this->assertTrue($contact6->state == $startingContactState); $this->assertEquals($account, $contact6->account); }
protected function setSomePermissions() { if (!SECURITY_OPTIMIZED) { return; } $accounts = Account::getAll(); $account = $accounts[0]; $user = User::getByUsername('bobby'); $this->assertNotEquals($account->owner->id, $user->id); $everyone = Group::getByName('Everyone'); $account->addPermissions($user, Permission::READ); $account->addPermissions($user, Permission::WRITE, Permission::DENY); $account->addPermissions($everyone, Permission::CHANGE_OWNER); $this->assertTrue($account->save()); try { $securableItem1 = NamedSecurableItem::getByName('Account'); } catch (NotFoundException $e) { $securableItem1 = new NamedSecurableItem(); $securableItem->name = 'Account'; } $securableItem1->addPermissions($everyone, Permission::DELETE); $this->assertTrue($securableItem1->save()); try { $securableItem2 = NamedSecurableItem::getByName('Account'); } catch (NotFoundException $e) { $securableItem2 = new NamedSecurableItem(); $securableItem->name = 'AccountsModule'; } $securableItem2->addPermissions($everyone, Permission::CHANGE_PERMISSIONS); $this->assertTrue($securableItem2->save()); }
/** * @depends testEmailAndAddresses */ public function testGetAllWhenThereAreNone() { $accounts = Account::getAll(); $this->assertEquals(0, count($accounts)); }
/** * Walkthrough test for asynchronous download */ public function testAsynchronousDownloadDefaultControllerActions() { $super = $this->logoutCurrentUserLoginNewUserAndGetByUsername('super'); $notificationsBeforeCount = Notification::getCount(); $notificationMessagesBeforeCount = NotificationMessage::getCount(); $accounts = Account::getAll(); if (count($accounts)) { foreach ($accounts as $account) { $account->delete(); } } $accounts = array(); for ($i = 0; $i <= ExportModule::$asynchronousThreshold + 1; $i++) { $accounts[] = AccountTestHelper::createAccountByNameForOwner('superAccount' . $i, $super); } $this->setGetArray(array('Account_page' => '1', 'export' => '', 'selectAll' => '1', 'selectedIds' => '', 'ajax' => '')); $this->runControllerWithRedirectExceptionAndGetUrl('accounts/default/export'); // Start background job $job = new ExportJob(); $this->assertTrue($job->run()); $exportItems = ExportItem::getAll(); $this->assertEquals(1, count($exportItems)); $fileModel = $exportItems[0]->exportFileModel; $this->assertEquals(1, $exportItems[0]->isCompleted); $this->assertEquals('csv', $exportItems[0]->exportFileType); $this->assertEquals('accounts', $exportItems[0]->exportFileName); $this->assertTrue($fileModel instanceof ExportFileModel); $this->assertEquals($notificationsBeforeCount + 1, Notification::getCount()); $this->assertEquals($notificationMessagesBeforeCount + 1, NotificationMessage::getCount()); // Check export job, when many ids are selected. // This will probably never happen, but we need test for this case too. $notificationsBeforeCount = Notification::getCount(); $notificationMessagesBeforeCount = NotificationMessage::getCount(); // Now test case when multiple ids are selected $exportItems = ExportItem::getAll(); if (count($exportItems)) { foreach ($exportItems as $exportItem) { $exportItem->delete(); } } $selectedIds = ""; foreach ($accounts as $account) { $selectedIds .= $account->id . ","; // Not Coding Standard } $this->setGetArray(array('AccountsSearchForm' => array('anyMixedAttributesScope' => array(0 => 'All'), 'anyMixedAttributes' => '', 'name' => '', 'officePhone' => ''), 'multiselect_AccountsSearchForm_anyMixedAttributesScope' => 'All', 'selectAll' => '', 'selectedIds' => "{$selectedIds}", 'Account_page' => '1', 'export' => '', 'ajax' => '')); $this->runControllerWithRedirectExceptionAndGetUrl('accounts/default/export'); // Start background job $job = new ExportJob(); $this->assertTrue($job->run()); $exportItems = ExportItem::getAll(); $this->assertEquals(1, count($exportItems)); $fileModel = $exportItems[0]->exportFileModel; $this->assertEquals(1, $exportItems[0]->isCompleted); $this->assertEquals('csv', $exportItems[0]->exportFileType); $this->assertEquals('accounts', $exportItems[0]->exportFileName); $this->assertTrue($fileModel instanceof ExportFileModel); $this->assertEquals($notificationsBeforeCount + 1, Notification::getCount()); $this->assertEquals($notificationMessagesBeforeCount + 1, NotificationMessage::getCount()); }
public function testNewlyImportedDataForUpdateEmailDedupe() { $jim = User::getByUsername('jim'); Yii::app()->user->userModel = $jim; //Confirm Jim can can only view ImportModelTestItems he owns. $item = NamedSecurableItem::getByName('ImportModule'); $this->assertEquals(Permission::NONE, $item->getEffectivePermissions($jim)); $testModels = Account::getByName('abc'); $this->assertEquals(1, count($testModels)); $testModels = Account::getByName('mom'); $this->assertEquals(1, count($testModels)); $testModels = Account::getByName('hello'); $this->assertEquals(0, count($testModels)); $testModels = Account::getByName('dear'); $this->assertEquals(0, count($testModels)); $import = new Import(); $serializedData['importRulesType'] = 'Accounts'; $serializedData['firstRowIsHeaderRow'] = true; $import->serializedData = serialize($serializedData); $this->assertTrue($import->save()); ImportTestHelper::createTempTableByFileNameAndTableName('importEmailUpdateDedupeTest.csv', $import->getTempTableName(), true); $this->assertEquals(3, ImportDatabaseUtil::getCount($import->getTempTableName())); // includes header rows. $emailMappingData = ImportMappingUtil::makeEmailColumnMappingData('primaryEmail__emailAddress'); $emailMappingData['mappingRulesData']['EmailModelAttributeDedupeMappingRuleForm'] = array('dedupeRule' => ImportDedupeRulesRadioDropDownElement::UPDATE_ROW_ON_MATCH_FOUND); $mappingData = array('column_0' => ImportMappingUtil::makeStringColumnMappingData('name'), 'column_1' => $emailMappingData); $importRules = ImportRulesUtil::makeImportRulesByType('Accounts'); $page = 0; $config = array('pagination' => array('pageSize' => 50)); //This way all rows are processed. $dataProvider = new ImportDataProvider($import->getTempTableName(), true, $config); $dataProvider->getPagination()->setCurrentPage($page); $importResultsUtil = new ImportResultsUtil($import); $messageLogger = new ImportMessageLogger(); ImportUtil::importByDataProvider($dataProvider, $importRules, $mappingData, $importResultsUtil, new ExplicitReadWriteModelPermissions(), $messageLogger); $importResultsUtil->processStatusAndMessagesForEachRow(); //Confirm that 3 models where created. $testModels = Account::getAll(); $this->assertEquals(3, count($testModels)); $testModels = Account::getByName('abc'); $this->assertEquals(0, count($testModels)); $testModels = Account::getByName('mom'); $this->assertEquals(0, count($testModels)); $testModels = Account::getByName('hello'); $this->assertEquals(1, count($testModels)); $testModels = Account::getByName('dear'); $this->assertEquals(1, count($testModels)); }
public function testPermissionsPropagationViaRolesWhenChildRoleHaveNoUsers() { $childRole = Role::getByName('Sales Person'); foreach ($childRole->users as $user) { $childRole->users->remove($user); $this->assertTrue($childRole->save()); } $parentRole = Role::getByName('Sales Manager'); $childChildRole = Role::getByName('Junior Sales Person'); $userInParentRole = $parentRole->users[0]; $userInChildChildRole = $childChildRole->users[0]; $this->assertEquals(0, count($childRole->users)); Permission::removeAll(); $accounts = Account::getAll(); $account = $accounts[0]; $this->assertEquals(Permission::ALL, $account->getEffectivePermissions($account->owner)); $this->assertEquals(Permission::NONE, $account->getEffectivePermissions($userInParentRole)); $this->assertEquals(Permission::NONE, $account->getEffectivePermissions($userInChildChildRole)); $account->addPermissions($userInChildChildRole, Permission::READ); $this->assertTrue($account->save()); $this->assertEquals(Permission::READ, $account->getEffectivePermissions($userInParentRole)); $this->assertEquals(Permission::READ, $account->getEffectivePermissions($userInChildChildRole)); }