Passed
Push — master ( f0002b...c777f5 )
by Aimeos
08:04 queued 04:27
created

StandardTest   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 161
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 73
dl 0
loc 161
rs 10
c 0
b 0
f 0
wmc 9

5 Methods

Rating   Name   Duplication   Size   Complexity  
A testProcess() 0 40 2
A tearDown() 0 3 1
A setUp() 0 10 2
A testProcessDelete() 0 40 2
A testProcessUpdate() 0 48 2
1
<?php
2
3
/**
4
 * @license LGPLv3, http://opensource.org/licenses/LGPL-3.0
5
 * @copyright Aimeos (aimeos.org), 2019-2023
6
 */
7
8
9
namespace Aimeos\Controller\Jobs\Common\Import\Xml\Processor\Lists\Media;
10
11
12
class StandardTest extends \PHPUnit\Framework\TestCase
13
{
14
	private $context;
15
	private $object;
16
17
18
	protected function setUp() : void
19
	{
20
		$this->context = \TestHelper::context();
21
22
		$fs = $this->context->fs( 'fs-media' );
23
		$fs->has( 'path/to' ) ?: $fs->mkdir( 'path/to' );
24
		$fs->write( 'path/to/file2.jpg', 'test2' );
25
		$fs->write( 'path/to/file.jpg', 'test' );
26
27
		$this->object = new \Aimeos\Controller\Jobs\Common\Import\Xml\Processor\Lists\Media\Standard( $this->context );
28
	}
29
30
31
	protected function tearDown() : void
32
	{
33
		unset( $this->object, $this->context );
34
	}
35
36
37
	public function testProcess()
38
	{
39
		$dom = new \DOMDocument();
40
		$product = \Aimeos\MShop::create( $this->context, 'product' )->create();
41
42
		$dom->loadXML( '<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
43
<media>
44
	<mediaitem lists.type="default">
45
		<media.type><![CDATA[test]]></media.type>
46
		<media.languageid><![CDATA[de]]></media.languageid>
47
		<media.url><![CDATA[path/to/file.jpg]]></media.url>
48
		<media.preview><![CDATA[path/to/preview.jpg]]></media.preview>
49
	</mediaitem>
50
	<mediaitem lists.type="test">
51
		<media.type><![CDATA[default]]></media.type>
52
		<media.languageid><![CDATA[]]></media.languageid>
53
		<media.url><![CDATA[path/to/file2.jpg]]></media.url>
54
		<media.previews><![CDATA[{"1":"path/to/preview.jpg"}]]></media.previews>
55
	</mediaitem>
56
</media>' );
57
58
		$product = $this->object->process( $product, $dom->firstChild );
59
60
		$pos = 0;
61
		$expected = [
62
			['default', 'test', 'de', 'path/to/file.jpg', [1 => 'path/to/preview.jpg']],
63
			['test', 'default', '', 'path/to/file2.jpg', [1 => 'path/to/preview.jpg']],
64
		];
65
66
		$listItems = $product->getListItems( 'media' );
67
		$this->assertEquals( 2, count( $listItems ) );
68
69
		foreach( $listItems as $listItem )
70
		{
71
			$this->assertEquals( $expected[$pos][0], $listItem->getType() );
72
			$this->assertEquals( $expected[$pos][1], $listItem->getRefItem()->getType() );
73
			$this->assertEquals( $expected[$pos][2], $listItem->getRefItem()->getLanguageId() );
74
			$this->assertEquals( $expected[$pos][3], $listItem->getRefItem()->getUrl() );
75
			$this->assertEquals( $expected[$pos][4], $listItem->getRefItem()->getPreviews() );
76
			$pos++;
77
		}
78
	}
79
80
81
	public function testProcessUpdate()
82
	{
83
		$dom = new \DOMDocument();
84
		$manager = \Aimeos\MShop::create( $this->context, 'media' );
85
		$listManager = \Aimeos\MShop::create( $this->context, 'product/lists' );
86
		$product = \Aimeos\MShop::create( $this->context, 'product' )->create();
87
88
		$product->addListItem( 'media',
89
			$listManager->create()->setType( 'default' )->setId( 1 ),
90
			$manager->create()->setType( 'test' )->setLanguageId( 'de' )->setUrl( 'path/to/file.jpg' )
91
		);
92
		$product->addListItem( 'media',
93
			$listManager->create()->setType( 'test' )->setId( 2 ),
94
			$manager->create()->setType( 'default' )->setLanguageId( '' )->setUrl( 'path/to/file2.jpg' )
95
		);
96
97
		$dom->loadXML( '<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
98
<media>
99
	<mediaitem lists.type="test">
100
		<media.type><![CDATA[default]]></media.type>
101
		<media.languageid><![CDATA[]]></media.languageid>
102
		<media.url><![CDATA[path/to/file2.jpg]]></media.url>
103
	</mediaitem>
104
	<mediaitem lists.type="default">
105
		<media.type><![CDATA[test]]></media.type>
106
		<media.languageid><![CDATA[de]]></media.languageid>
107
		<media.url><![CDATA[path/to/file.jpg]]></media.url>
108
	</mediaitem>
109
</media>' );
110
111
		$product = $this->object->process( $product, $dom->firstChild );
112
113
		$pos = 0;
114
		$expected = [
115
			['test', 'default', '', 'path/to/file2.jpg'],
116
			['default', 'test', 'de', 'path/to/file.jpg'],
117
		];
118
119
		$listItems = $product->getListItems();
120
		$this->assertEquals( 2, count( $listItems ) );
121
122
		foreach( $listItems as $listItem )
123
		{
124
			$this->assertEquals( $expected[$pos][0], $listItem->getType() );
125
			$this->assertEquals( $expected[$pos][1], $listItem->getRefItem()->getType() );
126
			$this->assertEquals( $expected[$pos][2], $listItem->getRefItem()->getLanguageId() );
127
			$this->assertEquals( $expected[$pos][3], $listItem->getRefItem()->getUrl() );
128
			$pos++;
129
		}
130
	}
131
132
133
	public function testProcessDelete()
134
	{
135
		$dom = new \DOMDocument();
136
		$manager = \Aimeos\MShop::create( $this->context, 'media' );
137
		$listManager = \Aimeos\MShop::create( $this->context, 'product/lists' );
138
		$product = \Aimeos\MShop::create( $this->context, 'product' )->create();
139
140
		$product->addListItem( 'media',
141
			$listManager->create()->setType( 'default' )->setId( 1 ),
142
			$manager->create()->setType( 'test' )->setLanguageId( 'de' )->setUrl( 'path/to/file.jpg' )
143
		);
144
		$product->addListItem( 'media',
145
			$listManager->create()->setType( 'test' )->setId( 2 ),
146
			$manager->create()->setType( 'default' )->setLanguageId( '' )->setUrl( 'path/to/file2.jpg' )
147
		);
148
149
		$dom->loadXML( '<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
150
<media>
151
	<mediaitem lists.type="test">
152
		<media.type><![CDATA[default]]></media.type>
153
		<media.languageid><![CDATA[]]></media.languageid>
154
		<media.url><![CDATA[path/to/file2.jpg]]></media.url>
155
	</mediaitem>
156
</media>' );
157
158
		$product = $this->object->process( $product, $dom->firstChild );
159
160
		$pos = 0;
161
		$expected = [['test', 'default', '', 'path/to/file2.jpg']];
162
163
		$listItems = $product->getListItems();
164
		$this->assertEquals( 1, count( $listItems ) );
165
166
		foreach( $listItems as $listItem )
167
		{
168
			$this->assertEquals( $expected[$pos][0], $listItem->getType() );
169
			$this->assertEquals( $expected[$pos][1], $listItem->getRefItem()->getType() );
170
			$this->assertEquals( $expected[$pos][2], $listItem->getRefItem()->getLanguageId() );
171
			$this->assertEquals( $expected[$pos][3], $listItem->getRefItem()->getUrl() );
172
			$pos++;
173
		}
174
	}
175
}
176