Passed
Pull Request — develop (#1)
by Andreas
03:30
created

getProductDataWithMissingAttribute()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 33
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 4
Bugs 0 Features 1
Metric Value
c 4
b 0
f 1
dl 0
loc 33
rs 8.8571
cc 1
eloc 6
nc 1
nop 0
1
<?php
2
use Wambo\Catalog\Mapper\ContentMapper;
3
use Wambo\Catalog\Mapper\ProductMapper;
4
use Wambo\Catalog\Model\Content;
5
6
/**
7
 * Class ProductMapperTest tests the Wambo\Catalog\Mapper\ProductMapper class.
8
 */
9
class ProductMapperTest extends PHPUnit_Framework_TestCase
0 ignored issues
show
Coding Style Compatibility introduced by
PSR1 recommends that each class must be in a namespace of at least one level to avoid collisions.

You can fix this by adding a namespace to your class:

namespace YourVendor;

class YourClass { }

When choosing a vendor namespace, try to pick something that is not too generic to avoid conflicts with other libraries.

Loading history...
10
{
11
    /**
12
     * If all required fields are given and the validation passes a product should be returned
13
     *
14
     * @test
15
     */
16 View Code Duplication
    public function getProduct_AllRequiredFieldsPresent_ValidationPasses_ProductIsReturned()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
17
    {
18
        // arrange
19
        $contentMapperMock = $this->createMock(ContentMapper::class);
20
        $contentMapperMock->method("getContent")->willReturn(new Content("Title", "Summary", "..."));
21
22
        /** @var ContentMapper $contentMapperMock */
23
        $productMapper = new ProductMapper($contentMapperMock);
24
25
        $productData = array(
26
            "sku" => "a-product",
27
            "slug" => "A-Product",
28
            "title" => "Super fancy product",
29
            "summary" => "A super fancy product",
30
        );
31
32
        // act
33
        $product = $productMapper->getProduct($productData);
34
35
        // assert
36
        $this->assertNotNull($product, "getProduct() should have returned a product");
37
    }
38
39
    /**
40
     * If given product data is missing one of the mandatory fields and exception should be thrown.
41
     *
42
     * @param array $productData Unstructured product data
43
     *
44
     * @test
45
     *
46
     * @expectedException \Wambo\Catalog\Error\ProductException
47
     * @expectedExceptionMessageRegExp /The field '\w+' is missing in the given product data/
48
     * @dataProvider                   getProductDataWithMissingAttribute
49
     */
50
    public function getProduct_RequiredFieldMissing_ProductExceptionIsThrown(array $productData)
51
    {
52
        // arrange
53
        $contentMapperMock = $this->createMock(ContentMapper::class);
54
        $contentMapperMock->method("getContent")->willReturn(new Content("Title", "Summary", "Description"));
55
56
        /** @var ContentMapper $contentMapperMock */
57
        $productMapper = new ProductMapper($contentMapperMock);
58
59
        // act
60
        $productMapper->getProduct($productData);
61
    }
62
63
    /**
64
     * If the SKU validation fails and exception should be thrown
65
     *
66
     * @test
67
     * @expectedException Wambo\Catalog\Error\ProductException
68
     */
69 View Code Duplication
    public function getProduct_AllRequiredFieldsPresent_SkuValidationFails_ProductIsReturned()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
70
    {
71
        // arrange
72
        $contentMapperMock = $this->createMock(ContentMapper::class);
73
        $contentMapperMock->method("getContent")->willReturn(new Content("Title", "Summary", "..."));
74
75
        /** @var ContentMapper $contentMapperMock */
76
        $productMapper = new ProductMapper($contentMapperMock);
77
78
        $productData = array(
79
            "sku" => "a",
80
            "slug" => "A-Product",
81
            "title" => "Super fancy product",
82
            "summary" => "A super fancy product",
83
        );
84
85
        // act
86
        $productMapper->getProduct($productData);
87
    }
88
89
    /**
90
     * If the Slug validation fails and exception should be thrown
91
     *
92
     * @test
93
     * @expectedException Wambo\Catalog\Error\ProductException
94
     */
95 View Code Duplication
    public function getProduct_AllRequiredFieldsPresent_SlugValidationFails_ProductIsReturned()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
96
    {
97
        // arrange
98
        $contentMapperMock = $this->createMock(ContentMapper::class);
99
        $contentMapperMock->method("getContent")->willReturn(new Content("Title", "A super fancy product", "..."));
100
101
        /** @var ContentMapper $contentMapperMock */
102
        $productMapper = new ProductMapper($contentMapperMock);
103
104
        $productData = array(
105
            "sku" => "a-product",
106
            "slug" => "A/Product",
107
            "title" => "Super fancy product",
108
            "summary" => "A super fancy product",
109
        );
110
111
        // act
112
        $productMapper->getProduct($productData);
113
    }
114
115
    /**
116
     * Get product data with one or more missing attributes.
117
     */
118
    public static function getProductDataWithMissingAttribute()
119
    {
120
        return [
121
122
            // empty
123
            [
124
                []
125
            ],
126
127
            // wrong casing
128
            [
129
                [
130
                    "SKU" => "a-product",
131
                    "SLUG" => "A-Product",
132
                ]
133
            ],
134
135
            // slug missing
136
            [
137
                [
138
                    "sku" => "a-product",
139
                ]
140
            ],
141
142
            // sku missing
143
            [
144
                [
145
                    "slug" => "A-Product",
146
                ]
147
            ]
148
149
        ];
150
    }
151
}
152