Completed
Push — master ( 0ac209...7b7af5 )
by
unknown
13:18
created

CustomerRFMProviderTest::dataValue()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 15
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 1 Features 0
Metric Value
dl 0
loc 15
rs 9.4285
c 1
b 1
f 0
cc 1
eloc 9
nc 1
nop 0
1
<?php
2
3
namespace OroCRM\Bundle\MagentoBundle\Tests\Provider\Analytics;
4
5
use Oro\Bundle\TestFrameworkBundle\Test\WebTestCase;
6
use OroCRM\Bundle\ChannelBundle\Entity\Channel;
7
use OroCRM\Bundle\MagentoBundle\Entity\Customer;
8
use OroCRM\Bundle\MagentoBundle\Provider\Analytics\CustomerFrequencyProvider;
9
use OroCRM\Bundle\MagentoBundle\Provider\Analytics\CustomerMonetaryProvider;
10
use OroCRM\Bundle\MagentoBundle\Provider\Analytics\CustomerRecencyProvider;
11
12
/**
13
 * @dbIsolation
14
 */
15
class CustomerRFMProviderTest extends WebTestCase
16
{
17
    protected function setUp()
18
    {
19
        $this->initClient();
20
        $this->loadFixtures([
21
            'OroCRM\Bundle\MagentoBundle\Tests\Functional\Fixture\LoadRFMOrderData',
22
            'OroCRM\Bundle\MagentoBundle\Tests\Functional\Fixture\LoadRFMCategoryData'
23
        ]);
24
    }
25
26
    /**
27
     * @dataProvider dataValue
28
     * @param string $dataChannelRef
29
     * @param array $expectedValue
30
     */
31
    public function testAnalyticsProviderValues($dataChannelRef, array $expectedValue)
32
    {
33
        $doctrineHelper = $this->getContainer()->get('oro_entity.doctrine_helper');
34
        /** @var Channel $dataChannel */
35
        $dataChannel = $this->getReference($dataChannelRef);
36
        $className = 'OroCRM\Bundle\MagentoBundle\Entity\Customer';
37
        $recencyProvider = new CustomerRecencyProvider($doctrineHelper, $className);
38
        $frequencyProvider = new CustomerFrequencyProvider($doctrineHelper, $className);
39
        $monetaryProvider = new CustomerMonetaryProvider($doctrineHelper, $className);
40
41
        $recencyData = $recencyProvider->getValues($dataChannel);
42
        $this->assertCount(1, $recencyData);
43
        $frequencyData = $frequencyProvider->getValues($dataChannel);
44
        $this->assertCount(1, $frequencyData);
45
        $monetaryData = $monetaryProvider->getValues($dataChannel);
46
        $this->assertCount(1, $monetaryData);
47
48
        foreach ($expectedValue as $customerReference => $data) {
49
            /** @var Customer $customer */
50
            $customer = $this->getReference($customerReference);
51
            $this->assertEquals($data['recency'], $recencyData[$customer->getId()]);
52
            $this->assertEquals($data['frequency'], $frequencyData[$customer->getId()]);
53
            $this->assertEquals($data['monetary'], $monetaryData[$customer->getId()]);
54
        }
55
    }
56
57
    /**
58
     * @return array
59
     */
60
    public function dataValue()
61
    {
62
        return [
63
            'Providers Customer 1' => [
64
                'dataChannelRef' => 'default_channel',
65
                'expectedValue' => [
66
                    'customer' => [
67
                        'recency' => 2,
68
                        'frequency' => 2,
69
                        'monetary' => 22.2, // (15.5 - 4.40) + (15.5 - 4.40)]
70
                    ],
71
                ]
72
            ],
73
        ];
74
    }
75
}
76