Completed
Push — locale-in-url ( 151bbf...6507a9 )
by Kamil
20:45
created

SequentialOrderNumberGeneratorSpec::let()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 7
rs 9.4285
cc 1
eloc 5
nc 1
nop 3
1
<?php
2
3
/*
4
 * This file is a part of the Sylius package.
5
 *
6
 * (c) Paweł Jędrzejewski
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace spec\Sylius\Bundle\CoreBundle\Order\NumberGenerator;
13
14
use Doctrine\DBAL\LockMode;
15
use Doctrine\ORM\EntityManagerInterface;
16
use PhpSpec\ObjectBehavior;
17
use Sylius\Bundle\CoreBundle\Order\NumberGenerator\SequentialOrderNumberGenerator;
18
use Sylius\Bundle\OrderBundle\NumberGenerator\OrderNumberGeneratorInterface;
19
use Sylius\Bundle\ResourceBundle\Doctrine\ORM\EntityRepository;
20
use Sylius\Component\Core\Model\OrderInterface;
21
use Sylius\Component\Core\Model\OrderSequenceInterface;
22
use Sylius\Component\Resource\Factory\FactoryInterface;
23
24
/**
25
 * @author Grzegorz Sadowski <[email protected]>
26
 */
27
final class SequentialOrderNumberGeneratorSpec extends ObjectBehavior
28
{
29
    function let(
30
        EntityRepository $sequenceRepository,
31
        FactoryInterface $sequenceFactory,
32
        EntityManagerInterface $sequenceManager
33
    ) {
34
        $this->beConstructedWith($sequenceRepository, $sequenceFactory, $sequenceManager);
35
    }
36
37
    function it_is_initializable()
38
    {
39
        $this->shouldHaveType(SequentialOrderNumberGenerator::class);
40
    }
41
42
    function it_implements_an_order_number_generator_interface()
43
    {
44
        $this->shouldImplement(OrderNumberGeneratorInterface::class);
45
    }
46
47
    function it_generates_an_order_number(
48
        EntityRepository $sequenceRepository,
49
        EntityManagerInterface $sequenceManager,
50
        OrderSequenceInterface $sequence,
51
        OrderInterface $order
52
    ) {
53
        $sequence->getIndex()->willReturn(6);
54
        $sequence->getVersion()->willReturn(7);
55
56
        $sequenceRepository->findOneBy([])->willReturn($sequence);
57
58
        $sequenceManager->lock($sequence, LockMode::OPTIMISTIC, 7)->shouldBeCalled();
59
60
        $sequence->incrementIndex()->shouldBeCalled();
61
62
        $this->generate($order)->shouldReturn('000000007');
63
    }
64
65
    function it_generates_an_order_number_when_sequence_is_null(
66
        EntityRepository $sequenceRepository,
67
        FactoryInterface $sequenceFactory,
68
        EntityManagerInterface $sequenceManager,
69
        OrderSequenceInterface $sequence,
70
        OrderInterface $order
71
    ) {
72
        $sequence->getIndex()->willReturn(0);
73
        $sequence->getVersion()->willReturn(1);
74
75
        $sequenceRepository->findOneBy([])->willReturn(null);
76
77
        $sequenceFactory->createNew()->willReturn($sequence);
78
        $sequenceManager->persist($sequence)->shouldBeCalled();
79
80
        $sequenceManager->lock($sequence, LockMode::OPTIMISTIC, 1)->shouldBeCalled();
81
82
        $sequence->incrementIndex()->shouldBeCalled();
83
84
        $this->generate($order)->shouldReturn('000000001');
85
    }
86
}
87