Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
23 / 23
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
MediaInfoChangeOpDeserializer
100.00% covered (success)
100.00%
23 / 23
100.00% covered (success)
100.00%
2 / 2
7
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
1
 createEntityChangeOp
100.00% covered (success)
100.00%
20 / 20
100.00% covered (success)
100.00%
1 / 1
6
1<?php
2
3namespace Wikibase\MediaInfo\ChangeOp\Deserialization;
4
5use Wikibase\Repo\ChangeOp\ChangeOp;
6use Wikibase\Repo\ChangeOp\ChangeOpDeserializer;
7use Wikibase\Repo\ChangeOp\ChangeOps;
8use Wikibase\Repo\ChangeOp\Deserialization\ChangeOpDeserializationException;
9use Wikibase\Repo\ChangeOp\Deserialization\ClaimsChangeOpDeserializer;
10use Wikibase\Repo\ChangeOp\Deserialization\DescriptionsChangeOpDeserializer;
11use Wikibase\Repo\ChangeOp\Deserialization\LabelsChangeOpDeserializer;
12
13/**
14 * Constructs ChangeOp objects for MediaInfo change requests
15 *
16 * @license GPL-2.0-or-later
17 */
18class MediaInfoChangeOpDeserializer implements ChangeOpDeserializer {
19
20    private $labelsChangeOpDeserializer;
21
22    private $descriptionsChangeOpDeserializer;
23
24    private $claimsChangeOpDeserializer;
25
26    public function __construct(
27        LabelsChangeOpDeserializer $labelsChangeOpDeserializer,
28        DescriptionsChangeOpDeserializer $descriptionsChangeOpDeserializer,
29        ClaimsChangeOpDeserializer $claimsChangeOpDeserializer
30    ) {
31        $this->labelsChangeOpDeserializer = $labelsChangeOpDeserializer;
32        $this->descriptionsChangeOpDeserializer = $descriptionsChangeOpDeserializer;
33        $this->claimsChangeOpDeserializer = $claimsChangeOpDeserializer;
34    }
35
36    /**
37     * @see ChangeOpDeserializer::createEntityChangeOp
38     *
39     * @param array[] $changeRequest
40     *
41     * @return ChangeOp
42     * @throws ChangeOpDeserializationException
43     */
44    public function createEntityChangeOp( array $changeRequest ) {
45        if ( array_key_exists( 'aliases', $changeRequest )
46            || array_key_exists( 'sitelinks', $changeRequest )
47        ) {
48            throw new ChangeOpDeserializationException(
49                'MediaInfo cannot have aliases or sitelinks',
50                'not-supported'
51            );
52        }
53
54        $changeOps = new ChangeOps();
55
56        if ( array_key_exists( 'labels', $changeRequest ) ) {
57            $changeOps->add(
58                $this->labelsChangeOpDeserializer->createEntityChangeOp( $changeRequest )
59            );
60        }
61
62        if ( array_key_exists( 'descriptions', $changeRequest ) ) {
63            $changeOps->add(
64                $this->descriptionsChangeOpDeserializer->createEntityChangeOp( $changeRequest )
65            );
66        }
67
68        if ( array_key_exists( 'claims', $changeRequest ) ) {
69            $changeOps->add(
70                $this->claimsChangeOpDeserializer->createEntityChangeOp( $changeRequest )
71            );
72        }
73
74        return $changeOps;
75    }
76
77}