Completed
Pull Request — master (#336)
by Stefan
05:11
created

ImageImportTest   A

Complexity

Total Complexity 12

Size/Duplication

Total Lines 121
Duplicated Lines 2.48 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

Changes 0
Metric Value
wmc 12
lcom 1
cbo 2
dl 3
loc 121
rs 10
c 0
b 0
f 0

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

1
<?php
2
3
namespace Tests\ShopwarePlugins\Connect;
4
5
use Shopware\Models\Article\Supplier;
6
7
class ImageImportTest extends ConnectTestHelper
8
{
9
    public function testGetProductsNeedingImageImport()
10
    {
11
        $ids = $this->insertOrUpdateProducts(10, false, false);
12
13
        $result = $this->getImageImport()->getProductsNeedingImageImport();
14
15
        $this->assertNotEmpty($result);
16
    }
17
18
    public function testHasArticleMainImage()
19
    {
20
        $result = $this->getImageImport()->hasArticleMainImage(2);
21
22
        $this->assertTrue($result);
23
    }
24
25
    public function testImportImagesForArticle()
26
    {
27
        $images = array();
28
        for ($i=0; $i<10; $i++) {
29
            $images[] = self::IMAGE_PROVIDER_URL . '?' . $i;
30
        }
31
32
        /** @var \Shopware\Models\Article\Article $model */
33
        $model = Shopware()->Models()->find('Shopware\Models\Article\Article', 2);
34
        $model->getImages()->clear();
35
        $this->getImageImport()->importImagesForArticle($images, $model);
36
37
        // reload article model after image import otherwise model contains only old images
38
        $model = Shopware()->Models()->find('Shopware\Models\Article\Article', 2);
39
        $this->assertEquals(10, $model->getImages()->count());
40
    }
41
42
    public function testImportDifferentImagesForEachVariant()
43
    {
44
        $articleImages = array(
45
            self::IMAGE_PROVIDER_URL . '?0'
46
        );
47
        $variantImages = array();
48
        for ($i=1; $i<10; $i++) {
49
            $variantImages[] = self::IMAGE_PROVIDER_URL . '?' . $i;
50
        }
51
52
        $expectedVariantImages = $variantImages;
53
        /** @var \Shopware\Models\Article\Article $article */
54
        $article = Shopware()->Models()->find('Shopware\Models\Article\Article', 2);
55
        $article->getImages()->clear();
56
57
        $this->getImageImport()->importImagesForArticle($articleImages, $article);
58
59
        /** @var \Shopware\Models\Article\Detail $detail */
60
        foreach ($article->getDetails() as $detail) {
61
            //clear all imported images before test
62
            foreach ($detail->getImages() as $image) {
63
                Shopware()->Models()->remove($image);
64
            }
65
            Shopware()->Models()->flush();
66
            $this->getImageImport()->importImagesForDetail(array_splice($variantImages, 0, 3), $detail);
67
        }
68
69
        // reload article model after image import otherwise model contains only old images
70
        $article = Shopware()->Models()->find('Shopware\Models\Article\Article', 2);
71
        // article must contain 1 global and 9 specific variant images
72
        $this->assertEquals(10, $article->getImages()->count());
73
74
        $importedArticleImages = $article->getImages();
75
        /** @var \Shopware\Models\Article\Image $mainImage */
76
        $mainImage = $importedArticleImages[0];
77
        $this->assertEmpty($mainImage->getMappings());
78
        $media = $mainImage->getMedia();
79
        $mediaAttribute = $media->getAttribute();
80
81
        $this->assertEquals($articleImages[0], $mediaAttribute->getConnectHash());
82
83
        unset($importedArticleImages[0]);
84
        foreach ($importedArticleImages as $image) {
85
            /** @var \Shopware\Models\Article\Image $image */
86
            $this->assertNotEmpty($image->getMappings());
87
            $this->assertEquals(array_shift($expectedVariantImages), $image->getMedia()->getAttribute()->getConnectHash());
88
        }
89
90
        /** @var \Shopware\Models\Article\Detail $detail */
91
        foreach ($article->getDetails() as $detail) {
92
            $this->assertEquals(3, $detail->getImages()->count());
93
        }
94
    }
95
96
    public function testImportImagesForSupplier()
97
    {
98
        /* @var Supplier $supplier*/
99
        $supplier = Shopware()->Models()->find('Shopware\Models\Article\Supplier', 1);
100
        $supplier->setImage('');
101
102
        $this->getImageImport()->importImageForSupplier(self::IMAGE_PROVIDER_URL, $supplier);
103
104
        $this->assertNotEmpty($supplier->getImage());
105
    }
106
107
    public function testBatchImport()
108
    {
109
        Shopware()->Db()->executeQuery('UPDATE s_plugin_connect_items SET last_update_flag = 0');
110
        $this->insertOrUpdateProducts(1, true, true);
111
112
        $result = $this->getImageImport()->getProductsNeedingImageImport();
113
        $articleId = reset($result);
114
        /** @var \Shopware\Models\Article\Article $article */
115
        $article = Shopware()->Models()->find('Shopware\Models\Article\Article', $articleId);
116
117
        $this->assertEmpty($article->getImages());
118
        $this->getImageImport()->import(1);
119
120
        /** @var \Shopware\Models\Article\Article $article */
121
        $article = Shopware()->Models()->find('Shopware\Models\Article\Article', $articleId);
122
        $this->assertEquals(2, $article->getImages()->count());
123
        $this->assertEquals(1, $article->getMainDetail()->getImages()->count());
124
125
        $this->assertEmpty($this->getImageImport()->getProductsNeedingImageImport());
126
    }
127
}