Completed
Pull Request — master (#49)
by Nic
09:03
created

DiscountHelperTest   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 79
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 3
eloc 37
dl 0
loc 79
rs 10
c 1
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A setUp() 0 14 1
A testGetProduct() 0 6 1
A testGetDiscountedPrice() 0 22 1
1
<?php
2
3
namespace Dynamic\Foxy\Discounts\Tests;
4
5
use Dynamic\Foxy\Discounts\DiscountHelper;
6
use Dynamic\Foxy\Discounts\Extension\ProductDataExtension;
7
use Dynamic\Foxy\Discounts\Model\Discount;
8
use Dynamic\Foxy\Discounts\Tests\TestOnly\Page\ProductPage;
9
use Dynamic\Foxy\Extension\Purchasable;
10
use SilverStripe\Dev\SapphireTest;
11
use SilverStripe\Versioned\Versioned;
12
13
/**
14
 * Class DiscountHelperTest
15
 * @package Dynamic\Foxy\Discounts\Tests
16
 */
17
class DiscountHelperTest extends SapphireTest
18
{
19
    /**
20
     * @var string[]
21
     */
22
    protected static $fixture_file = [
23
        'products.yml',
24
        'discounts.yml',
25
    ];
26
27
    /**
28
     * @var string[]
29
     */
30
    protected static $extra_dataobjects = [
31
        ProductPage::class,
32
    ];
33
34
    /**
35
     * @var \string[][]
36
     */
37
    protected static $required_extensions = [
38
        ProductPage::class => [
39
            Purchasable::class,
40
            ProductDataExtension::class,
41
        ],
42
    ];
43
44
    /**
45
     *
46
     */
47
    protected function setUp()
48
    {
49
        parent::setUp();
50
51
        $product = $this->objFromFixture(ProductPage::class, 'productthree');
52
        $product->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE);
53
        $discountOne = $this->objFromFixture(Discount::class, 'simplediscountpercentage');
54
        $discountOne->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE);
55
        $discountTwo = $this->objFromFixture(Discount::class, 'tierdiscountpercentage');
56
        $discountTwo->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE);
57
        $discountThree = $this->objFromFixture(Discount::class, 'tierdiscountamount');
58
        $discountThree->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE);
59
60
        Versioned::set_stage(Versioned::LIVE);
61
    }
62
63
    public function testGetProduct()
64
    {
65
        $product = $this->objFromFixture(ProductPage::class, 'productthree');
66
        $helper = DiscountHelper::create($product);
67
68
        $this->assertEquals($product->ID, $helper->getProduct()->ID);
69
    }
70
71
    /**
72
     *
73
     */
74
    public function testGetDiscountedPrice()
75
    {
76
        $product = $this->objFromFixture(ProductPage::class, 'productthree');
77
        $helper = DiscountHelper::create($product);
78
79
        $this->assertEquals(75, $helper->getDiscountedPrice()->getValue());
80
81
        $helper->setQuantity(25);
82
        $this->assertEquals(70, $helper->getDiscountedPrice()->getValue());
83
84
        $discountOne = $this->objFromFixture(Discount::class, 'simplediscountpercentage');
85
        $discountOne->doUnpublish();
86
87
        $helper->setDiscountTier();
88
        $helper->setQuantity(1);
89
        $this->assertEquals(95, $helper->getDiscountedPrice()->getValue());
90
91
        $helper->setQuantity(6);
92
        $this->assertEquals(88, $helper->getDiscountedPrice()->getValue());
93
94
        $helper->setQuantity(23);
95
        $this->assertEquals(70, $helper->getDiscountedPrice()->getValue());
96
    }
97
}
98