Skip to content

Commit

Permalink
Merge branch 'master' into feature/BB-7505_UI_UX_Updates_on_Shipping_…
Browse files Browse the repository at this point in the history
…Rule_page

# Conflicts:
#	package/commerce/UPGRADE-1.3.md
  • Loading branch information
Oleksandr Nechyporenko committed Jun 1, 2017
2 parents ac4e80a + b8b81e2 commit dac2ba2
Show file tree
Hide file tree
Showing 27 changed files with 1,074 additions and 553 deletions.
736 changes: 429 additions & 307 deletions UPGRADE-2.2.md

Large diffs are not rendered by default.

Expand Up @@ -95,7 +95,7 @@ public function inlineEditRecordInGridWithClickOnEmptySpace($field, $value, $ent
$row->setCellValue($field, $value);
// click any where on the page
$this->getPage()->find('css', '#container')->click();
$this->oroMainContext->iShouldSeeFlashMessage('Inline edits are being saved');
$this->oroMainContext->iShouldSeeFlashMessage('Record has been succesfully updated');
}

/**
Expand Down Expand Up @@ -148,7 +148,7 @@ public function inlineEditField($field, $value, $entityTitle = null)
$row = $this->getGridRow($entityTitle);

$row->setCellValueAndSave($field, $value);
$this->oroMainContext->iShouldSeeFlashMessage('Inline edits are being saved');
$this->oroMainContext->iShouldSeeFlashMessage('Record has been succesfully updated');
}

/**
Expand Down
4 changes: 1 addition & 3 deletions src/Oro/Bundle/EmailBundle/Resources/config/services.yml
Expand Up @@ -1059,9 +1059,7 @@ services:

oro_email.autocomplete.mailbox_user_search_handler:
class: %oro_email.autocomplete.mailbox_user_search_handler.class%
parent: oro_user.autocomplete.user.search_handler
calls:
- [setSecurityFacade, ['@oro_security.security_facade']]
parent: oro_user.autocomplete.user.organization_search_handler

oro_email.listener.mailbox.authorization:
class: %oro_email.listener.mailbox.authorization.class%
Expand Down
Expand Up @@ -125,7 +125,7 @@ public function iDownloadDataTemplateFile($entity)
}

/**
* This method compares data from the downloaded file
* This method strictly compares data from the downloaded file
*
* @Given /^Exported file for "(?P<entity>([\w\s]+))" contains the following data:$/
*
Expand All @@ -134,34 +134,7 @@ public function iDownloadDataTemplateFile($entity)
*/
public function exportedFileContainsFollowingData($entity, TableNode $expectedEntities)
{
$entityClass = $this->aliasResolver->getClassByAlias($this->convertEntityNameToAlias($entity));
$processors = $this->processorRegistry->getProcessorAliasesByEntity('export', $entityClass);

self::assertCount(1, $processors, sprintf(
'Too many processors ("%s") for export "%s" entity',
implode(', ', $processors),
$entity
));

$processorName = array_shift($processors);
$jobExecutor = $this->getContainer()->get('oro_importexport.job_executor');
$filePath = FileManager::generateTmpFilePath(
FileManager::generateFileName($processorName, 'csv')
);

$jobResult = $jobExecutor->executeJob(
'export',
'entity_export_to_csv',
[
'export' => [
'processorAlias' => $processorName,
'entityName' => $entityClass,
'filePath' => $filePath,
]
]
);

static::assertTrue($jobResult->isSuccessful());
$filePath = $this->performExport($entity);

try {
$handler = fopen($filePath, 'rb');
Expand Down Expand Up @@ -191,6 +164,49 @@ public function exportedFileContainsFollowingData($entity, TableNode $expectedEn
static::assertCount($i, $expectedEntities->getRows());
}

/**
* This method makes non-strict comparison of data from the downloaded file.
*
* Checks whether the listed columns (in any order) and corresponding data is present.
*
* @Given /^Exported file for "(?P<entity>([\w\s]+))" contains at least the following columns:$/
*
* @param string $entity
* @param TableNode $expectedEntities
*/
public function exportedFileContainsAtLeastFollowingColumns($entity, TableNode $expectedEntities)
{
$filePath = $this->performExport($entity);

try {
$exportedFile = new \SplFileObject($filePath, 'rb');
// Treat file as CSV, skip empty lines.
$exportedFile->setFlags(\SplFileObject::READ_CSV
| \SplFileObject::READ_AHEAD
| \SplFileObject::SKIP_EMPTY
| \SplFileObject::DROP_NEW_LINE);

$headers = $exportedFile->current();
$expectedHeaders = $expectedEntities->getRow(0);

foreach ($exportedFile as $line => $data) {
$entityDataFromCsv = array_combine($headers, array_values($data));
$expectedEntityData = array_combine($expectedHeaders, array_values($expectedEntities->getRow($line)));

// Ensure that at least expected data is present.
foreach ($expectedEntityData as $property => $value) {
static::assertEquals($value, $entityDataFromCsv[$property]);
}
}

static::assertCount($exportedFile->key(), $expectedEntities->getRows());
} finally {
// We have to release SplFileObject before trying to delete the underlying file.
$exportedFile = null;
unlink($filePath);
}
}

/**
* @param string $entityName
* @return string
Expand Down Expand Up @@ -355,4 +371,43 @@ public function iShouldSeeValidationMessage($validationMessage)
implode('", "', $existedErrors)
));
}

/**
* @param string $entity Entity class alias.
*
* @return string Filepath to exported file.
*/
private function performExport($entity)
{
$entityClass = $this->aliasResolver->getClassByAlias($this->convertEntityNameToAlias($entity));
$processors = $this->processorRegistry->getProcessorAliasesByEntity('export', $entityClass);

self::assertCount(1, $processors, sprintf(
'Too many processors ("%s") for export "%s" entity',
implode(', ', $processors),
$entity
));

$processorName = array_shift($processors);
$jobExecutor = $this->getContainer()->get('oro_importexport.job_executor');
$filePath = FileManager::generateTmpFilePath(
FileManager::generateFileName($processorName, 'csv')
);

$jobResult = $jobExecutor->executeJob(
'export',
'entity_export_to_csv',
[
'export' => [
'processorAlias' => $processorName,
'entityName' => $entityClass,
'filePath' => $filePath,
]
]
);

static::assertTrue($jobResult->isSuccessful());

return $filePath;
}
}
Expand Up @@ -103,6 +103,7 @@ public function getSegmentByEntityName($entityName, $term, $page = 1, $skippedSe
$segments = $queryBuilder
->setFirstResult($this->getOffset($page))
->setMaxResults(self::PER_PAGE + 1)
->orderBy('segment.id')
->getQuery()
->getResult();

Expand Down
51 changes: 13 additions & 38 deletions src/Oro/Bundle/UserBundle/Autocomplete/OrganizationUsersHandler.php
Expand Up @@ -5,6 +5,7 @@
use Doctrine\ORM\QueryBuilder;

use Oro\Bundle\SecurityBundle\SecurityFacade;
use Oro\Bundle\UserBundle\Autocomplete\QueryCriteria\SearchCriteria;

/**
* This user search handler return users that was assigned to current organization and limit by search string
Expand All @@ -19,6 +20,9 @@ class OrganizationUsersHandler extends UserSearchHandler
/** @var SecurityFacade */
protected $securityFacade;

/** @var SearchCriteria */
protected $searchUserCriteria;

/**
* @param SecurityFacade $securityFacade
*/
Expand All @@ -27,6 +31,14 @@ public function setSecurityFacade(SecurityFacade $securityFacade)
$this->securityFacade = $securityFacade;
}

/**
* @param SearchCriteria $searchCriteria
*/
public function setSearchUserCriteria(SearchCriteria $searchCriteria)
{
$this->searchUserCriteria = $searchCriteria;
}

/**
* {@inheritdoc}
*/
Expand All @@ -47,7 +59,7 @@ protected function searchEntities($search, $firstResult, $maxResults)
{
$queryBuilder = $this->getBasicQueryBuilder();
if ($search) {
$this->addSearchCriteria($queryBuilder, $search);
$this->searchUserCriteria->addSearchCriteria($queryBuilder, $search);
}
$queryBuilder
->setFirstResult($firstResult)
Expand Down Expand Up @@ -75,41 +87,4 @@ protected function getBasicQueryBuilder()

return $queryBuilder;
}

/**
* Adds a search criteria to the given query builder based on the given query string
*
* @param QueryBuilder $queryBuilder The query builder
* @param string $search The search string
*/
protected function addSearchCriteria(QueryBuilder $queryBuilder, $search)
{
$queryBuilder
->andWhere(
$queryBuilder->expr()->orX(
$queryBuilder->expr()->like(
$queryBuilder->expr()->concat(
'u.firstName',
$queryBuilder->expr()->concat(
$queryBuilder->expr()->literal(' '),
'u.lastName'
)
),
':search'
),
$queryBuilder->expr()->like(
$queryBuilder->expr()->concat(
'u.lastName',
$queryBuilder->expr()->concat(
$queryBuilder->expr()->literal(' '),
'u.firstName'
)
),
':search'
),
$queryBuilder->expr()->like('u.username', ':search')
)
)
->setParameter('search', '%' . str_replace(' ', '%', $search) . '%');
}
}
@@ -0,0 +1,20 @@
<?php

namespace Oro\Bundle\UserBundle\Autocomplete\QueryCriteria;

use Doctrine\ORM\QueryBuilder;

/**
* Class SearchUserCriteria
* @package Oro\Bundle\UserBundle\Autocomplete
*/
abstract class SearchCriteria
{
/**
* Adds a search criteria to the given query builder based on the given query string
*
* @param QueryBuilder $queryBuilder The query builder
* @param string $search The search string
*/
abstract public function addSearchCriteria(QueryBuilder $queryBuilder, $search);
}
@@ -0,0 +1,46 @@
<?php

namespace Oro\Bundle\UserBundle\Autocomplete\QueryCriteria;

use Doctrine\ORM\QueryBuilder;

/**
* Class SearchUserCriteria
* @package Oro\Bundle\UserBundle\Autocomplete
*/
class SearchUserCriteria extends SearchCriteria
{
/**
* {@inheritdoc}
*/
public function addSearchCriteria(QueryBuilder $queryBuilder, $search)
{
$queryBuilder
->andWhere(
$queryBuilder->expr()->orX(
$queryBuilder->expr()->like(
$queryBuilder->expr()->concat(
'u.firstName',
$queryBuilder->expr()->concat(
$queryBuilder->expr()->literal(' '),
'u.lastName'
)
),
':search'
),
$queryBuilder->expr()->like(
$queryBuilder->expr()->concat(
'u.lastName',
$queryBuilder->expr()->concat(
$queryBuilder->expr()->literal(' '),
'u.firstName'
)
),
':search'
),
$queryBuilder->expr()->like('u.username', ':search')
)
)
->setParameter('search', '%' . str_replace(' ', '%', $search) . '%');
}
}

0 comments on commit dac2ba2

Please sign in to comment.