Skip to content

Commit

Permalink
Merge remote-tracking branch 'remotes/dev/master'
Browse files Browse the repository at this point in the history
  • Loading branch information
orocrmdeployer committed Mar 2, 2018
2 parents 42047e0 + 878b194 commit d0fae3b
Show file tree
Hide file tree
Showing 6 changed files with 322 additions and 3 deletions.
@@ -0,0 +1,47 @@
<?php

namespace Oro\Bundle\ReportCRMBundle\Tests\Behat\Context;

use Behat\Symfony2Extension\Context\KernelAwareContext;
use Behat\Symfony2Extension\Context\KernelDictionary;
use Doctrine\ORM\Mapping\ClassMetadataInfo;
use Oro\Bundle\SalesBundle\Entity\Lead;
use Oro\Bundle\TestFrameworkBundle\Behat\Context\OroFeatureContext;
use Oro\Bundle\TestFrameworkBundle\Behat\Fixtures\FixtureLoaderAwareInterface;
use Oro\Bundle\TestFrameworkBundle\Behat\Fixtures\FixtureLoaderDictionary;

class FeatureContext extends OroFeatureContext implements KernelAwareContext, FixtureLoaderAwareInterface
{
use KernelDictionary;
use FixtureLoaderDictionary;

/**
* Load "LeadsByDateReportFixture.yml" alice fixture from ReportCRMBundle suite
*
* PrePersist lifecycleCallback will override createdAt and updatedAt fields passed from fixture.
* So, we should disable this callback to save original values.
*
* @Given /^leads by date report fixture loaded$/
*/
public function bestSellingFixtureLoaded()
{
$metadata = $this->getMetadata();

$events = $metadata->lifecycleCallbacks;
$metadata->setLifecycleCallbacks([]);

$this->fixtureLoader->loadFixtureFile('OroReportCRMBundle:LeadsByDateReportFixture.yml');

$metadata->setLifecycleCallbacks($events);
}

/**
* @return ClassMetadataInfo
*/
private function getMetadata()
{
$manager = $this->getContainer()->get('doctrine')->getManagerForClass(Lead::class);

return $manager->getClassMetadata(Lead::class);
}
}
@@ -0,0 +1,159 @@
Oro\Bundle\ContactBundle\Entity\ContactEmail:
contactEmail{1..16}:
email: '<email()>'

Oro\Bundle\ContactBundle\Entity\Contact:
contact{1..16}:
firstName: 'firstName<current()>'
lastName: 'lastName<current()>'
addEmail: ['@contactEmail<current()>']
owner: '@admin'
organization: '@organization'

Oro\Bundle\AccountBundle\Entity\Account:
account{1..16}:
name: 'Customer <current()>'
organization: '@organization'

Oro\Bundle\SalesBundle\Entity\B2bCustomer:
b2bcustomer{1..16}:
name: 'B2bCustomer <current()>'
account: '@account<current()>'
contact: '@contact<current()>'
owner: '@admin'
organization: '@organization'

Oro\Bundle\SalesBundle\Entity\Customer:
customer{1..16}:
account: '@account<current()>'
customerTarget: '@b2bcustomer<current()>'

Oro\Bundle\SalesBundle\Entity\Lead:
lead1:
customerAssociation: '@customer1'
name: 'Lead 1'
status: new
owner: '@admin'
organization: '@organization'
createdAt: '<(new DateTime("2016-01-01 11:00:00 UTC"))>'
updatedAt: '<(new DateTime("2016-01-01 11:00:00 UTC"))>'
lead2:
customerAssociation: '@customer2'
name: 'Lead 2'
status: new
owner: '@admin'
organization: '@organization'
createdAt: '<(new DateTime("2016-01-01 11:00:00 UTC"))>'
updatedAt: '<(new DateTime("2016-01-01 11:00:00 UTC"))>'
lead3:
customerAssociation: '@customer3'
name: 'Lead 3'
status: new
owner: '@admin'
organization: '@organization'
createdAt: '<(new DateTime("2016-01-01 13:00:00 UTC"))>'
updatedAt: '<(new DateTime("2016-01-01 13:00:00 UTC"))>'
lead4:
customerAssociation: '@customer4'
name: 'Lead 4'
status: new
owner: '@admin'
organization: '@organization'
createdAt: '<(new DateTime("2016-01-01 13:00:00 UTC"))>'
updatedAt: '<(new DateTime("2016-01-01 13:00:00 UTC"))>'
lead5:
customerAssociation: '@customer5'
name: 'Lead 5'
status: new
owner: '@admin'
organization: '@organization'
createdAt: '<(new DateTime("2016-01-02 11:00:00 UTC"))>'
updatedAt: '<(new DateTime("2016-01-02 11:00:00 UTC"))>'
lead6:
customerAssociation: '@customer6'
name: 'Lead 6'
status: new
owner: '@admin'
organization: '@organization'
createdAt: '<(new DateTime("2016-01-03 11:00:00 UTC"))>'
updatedAt: '<(new DateTime("2016-01-03 11:00:00 UTC"))>'
lead7:
customerAssociation: '@customer7'
name: 'Lead 7'
status: new
owner: '@admin'
organization: '@organization'
createdAt: '<(new DateTime("2016-01-03 11:00:00 UTC"))>'
updatedAt: '<(new DateTime("2016-01-03 11:00:00 UTC"))>'
lead8:
customerAssociation: '@customer8'
name: 'Lead 8'
status: new
owner: '@admin'
organization: '@organization'
createdAt: '<(new DateTime("2016-01-03 11:00:00 UTC"))>'
updatedAt: '<(new DateTime("2016-01-03 11:00:00 UTC"))>'
lead9:
customerAssociation: '@customer9'
name: 'Lead 9'
status: new
owner: '@admin'
organization: '@organization'
createdAt: '<(new DateTime("2016-02-01 11:00:00 UTC"))>'
updatedAt: '<(new DateTime("2016-02-01 11:00:00 UTC"))>'
lead10:
customerAssociation: '@customer10'
name: 'Lead 10'
status: new
owner: '@admin'
organization: '@organization'
createdAt: '<(new DateTime("2016-02-01 11:00:00 UTC"))>'
updatedAt: '<(new DateTime("2016-02-01 11:00:00 UTC"))>'
lead11:
customerAssociation: '@customer11'
name: 'Lead 11'
status: new
owner: '@admin'
organization: '@organization'
createdAt: '<(new DateTime("2016-05-01 11:00:00 UTC"))>'
updatedAt: '<(new DateTime("2016-05-01 11:00:00 UTC"))>'
lead12:
customerAssociation: '@customer12'
name: 'Lead 12'
status: new
owner: '@admin'
organization: '@organization'
createdAt: '<(new DateTime("2016-05-01 11:00:00 UTC"))>'
updatedAt: '<(new DateTime("2016-05-01 11:00:00 UTC"))>'
lead13:
customerAssociation: '@customer13'
name: 'Lead 13'
status: new
owner: '@admin'
organization: '@organization'
createdAt: '<(new DateTime("2016-06-01 11:00:00 UTC"))>'
updatedAt: '<(new DateTime("2016-06-01 11:00:00 UTC"))>'
lead14:
customerAssociation: '@customer14'
name: 'Lead 14'
status: new
owner: '@admin'
organization: '@organization'
createdAt: '<(new DateTime("2016-06-01 11:00:00 UTC"))>'
updatedAt: '<(new DateTime("2016-06-01 11:00:00 UTC"))>'
lead15:
customerAssociation: '@customer15'
name: 'Lead 15'
status: new
owner: '@admin'
organization: '@organization'
createdAt: '<(new DateTime("2017-01-01 11:00:00 UTC"))>'
updatedAt: '<(new DateTime("2017-01-01 11:00:00 UTC"))>'
lead16:
customerAssociation: '@customer16'
name: 'Lead 16'
status: new
owner: '@admin'
organization: '@organization'
createdAt: '<(new DateTime("2017-01-01 11:00:00 UTC"))>'
updatedAt: '<(new DateTime("2017-01-01 11:00:00 UTC"))>'
@@ -0,0 +1,18 @@
@ticket-BAP-12348

Feature: Leads by date report
In order to understand leads count in specific periods of time
As an Administrator
I want to have ability to build Leads By Date Report

Scenario: Check report
Given leads by date report fixture loaded
And I login as administrator
And I go to Reports & Segments/ Reports/ Leads/ Leads By Date
When I filter Created Date as between "Jan 1, 2016 11:30 AM" and "Jan 3, 2016 11:30 AM"
Then number of records should be 3
And I should see following grid:
| Created Date | Leads Count |
| Jan 1, 2016 | 4 |
| Jan 2, 2016 | 1 |
| Jan 3, 2016 | 3 |
10 changes: 10 additions & 0 deletions src/Oro/Bundle/ReportCRMBundle/Tests/Behat/behat.yml
@@ -0,0 +1,10 @@
oro_behat_extension:
suites:
OroReportCRMBundle:
contexts:
- Oro\Bundle\TestFrameworkBundle\Tests\Behat\Context\OroMainContext
- OroFormBundle::FormContext
- OroDataGridBundle::GridContext
- OroReportCRMBundle::FeatureContext
paths:
- '@OroReportCRMBundle/Tests/Behat/Features'
@@ -0,0 +1,83 @@
<?php

namespace Oro\Bundle\ReportCRMBundle\Tests\Functional\DatagridReport;

use Oro\Bundle\ReportCRMBundle\Tests\Functional\DataFixtures\LoadLeadsData;
use Oro\Bundle\ReportCRMBundle\Tests\Functional\DataFixtures\LoadLeadSourceData;
use Oro\Bundle\TestFrameworkBundle\Test\WebTestCase;

class LeadsByDateReportTest extends WebTestCase
{
protected function setUp()
{
$this->initClient([], $this->generateBasicAuthHeader());
$this->loadFixtures(
[
LoadLeadSourceData::class,
LoadLeadsData::class,
]
);
}

public function testDatagridReport()
{
$currentDate = new \DateTime('now');
$currentDate = $currentDate->format('Y-m-d');

$response = $this->client->requestGrid(
'oro_reportcrm-leads-by_date',
[
'oro_reportcrm-leads-by_date[_filter][createdDate][type]' => 1,
'oro_reportcrm-leads-by_date[_filter][createdDate][value][start]' => $currentDate,
'oro_reportcrm-leads-by_date[_filter][createdDate][value][end]' => $currentDate,
'oro_reportcrm-leads-by_date[_filter][leadsCount][type]' => 7,
'oro_reportcrm-leads-by_date[_filter][leadsCount][value]' => 2,
'oro_reportcrm-leads-by_date[_filter][leadsCount][value_end]' => 2,
],
true
);
$result = self::getJsonResponseContent($response, 200);

$valuableResultData = $this->getValuableDataFromResult($result, ['createdDate', 'leadsCount']);

$this->assertEquals(
[
'rows' => [
[
'createdDate' => $currentDate,
'leadsCount' => 2,
]
],
'totals' => [
'createdDate' => 'Grand Total',
'leadsCount' => 2,
]
],
$valuableResultData
);
}

/**
* @param array $response
* @param array $keys
*
* @return array
*/
protected function getValuableDataFromResult(array $response, array $keys)
{
return [
'rows' => array_map(
function ($item) use ($keys) {
return array_intersect_key($item, array_flip($keys));
},
$response['data']
),
'totals' => array_map(
function ($item) {
return $item['total'] ?? $item['label'];
},
array_intersect_key($response['options']['totals']['grand_total']['columns'], array_flip($keys))
)
];
}
}
8 changes: 5 additions & 3 deletions src/Oro/Bundle/SalesBundle/Entity/Lead.php
Expand Up @@ -16,9 +16,7 @@
use Oro\Bundle\UserBundle\Entity\User;

/**
* @SuppressWarnings(PHPMD.ExcessivePublicCount)
* @SuppressWarnings(PHPMD.ExcessiveClassComplexity)
* @SuppressWarnings(PHPMD.TooManyFields)
* Entity holds information about lead
*
* @ORM\Table(
* name="orocrm_sales_lead",
Expand Down Expand Up @@ -71,7 +69,11 @@
* }
* )
*
* @SuppressWarnings(PHPMD.ExcessiveClassComplexity)
* @SuppressWarnings(PHPMD.ExcessiveClassLength)
* @SuppressWarnings(PHPMD.ExcessivePublicCount)
* @SuppressWarnings(PHPMD.TooManyFields)
* @SuppressWarnings(PHPMD.TooManyPublicMethods)
*/
class Lead extends ExtendLead implements
FullNameInterface,
Expand Down

0 comments on commit d0fae3b

Please sign in to comment.