Completed
Push — master ( 0591cb...33c12c )
by
unknown
07:17
created

testDisabledDispatchJob()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 20

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 20
rs 9.6
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
3
namespace SCI\Tests;
4
5
use SCI\CitationTextChangeUpdateJobDispatcher;
6
use SMW\DIWikiPage;
7
8
/**
9
 * @covers \SCI\CitationTextChangeUpdateJobDispatcher
10
 * @group semantic-cite
11
 *
12
 * @license GNU GPL v2+
13
 * @since 1.0
14
 *
15
 * @author mwjames
16
 */
17
class CitationTextChangeUpdateJobDispatcherTest extends \PHPUnit_Framework_TestCase {
18
19
	private $store;
20
	private $referenceBacklinksLookup;
21
22
	protected function setUp() {
23
24
		$this->store = $this->getMockBuilder( '\SMW\SQLStore\SQLStore' )
25
			->disableOriginalConstructor()
26
			->getMock();
27
28
		$this->referenceBacklinksLookup = $this->getMockBuilder( '\SCI\ReferenceBacklinksLookup' )
29
			->disableOriginalConstructor()
30
			->getMock();
31
	}
32
33
	public function testCanConstruct() {
34
35
		$this->assertInstanceOf(
36
			'\SCI\CitationTextChangeUpdateJobDispatcher',
37
			new CitationTextChangeUpdateJobDispatcher(
38
				$this->store,
39
				$this->referenceBacklinksLookup
40
			)
41
		);
42
	}
43
44
	public function testDisabledDispatchJob() {
45
46
		$instance = new CitationTextChangeUpdateJobDispatcher(
47
			$this->store,
48
			$this->referenceBacklinksLookup
49
		);
50
51
		$instance->setEnabledUpdateJobState( false );
52
53
		$compositePropertyTableDiffIterator = $this->getMockBuilder( '\SMW\SQLStore\CompositePropertyTableDiffIterator' )
54
			->disableOriginalConstructor()
55
			->getMock();
56
57
		$compositePropertyTableDiffIterator->expects( $this->never() )
58
			->method( 'getOrderedDiffByTable' );
59
60
		$subject = DIWikiPage::newFromText( __METHOD__ );
61
62
		$instance->dispatchUpdateJobFor( $subject, $compositePropertyTableDiffIterator );
63
	}
64
65
	/**
66
	 * @dataProvider compositePropertyTableDiffProvider
67
	 */
68
	public function testDispatchJobForDiffableChange( $diff ) {
69
70
		$idTable = $this->getMockBuilder( '\stdClass' )
71
			->disableOriginalConstructor()
72
			->setMethods( [ 'getDataItemPoolHashListFor' ] )
73
			->getMock();
74
75
		$idTable->expects( $this->once() )
76
			->method( 'getDataItemPoolHashListFor' )
77
			->will( $this->returnValue( [ 'Foo#0##' ] ) );
78
79
		$propertyTableInfoFetcher = $this->getMockBuilder( '\SMW\SQLStore\PropertyTableInfoFetcher' )
80
			->disableOriginalConstructor()
81
			->getMock();
82
83
		$this->store->expects( $this->once() )
84
			->method( 'getPropertyTableInfoFetcher' )
85
			->will( $this->returnValue( $propertyTableInfoFetcher ) );
86
87
		$this->store->expects( $this->once() )
88
			->method( 'getObjectIds' )
89
			->will( $this->returnValue( $idTable ) );
90
91
		$this->referenceBacklinksLookup->expects( $this->once() )
92
			->method( 'findReferenceBacklinksFor' )
93
			->will( $this->returnValue( [ new DIWikiPage( 'Bar', NS_MAIN ) ] ) );
94
95
		$instance = new CitationTextChangeUpdateJobDispatcher(
96
			$this->store,
97
			$this->referenceBacklinksLookup
98
		);
99
100
		$compositePropertyTableDiffIterator = $this->getMockBuilder( '\SMW\SQLStore\CompositePropertyTableDiffIterator' )
101
			->disableOriginalConstructor()
102
			->getMock();
103
104
		$compositePropertyTableDiffIterator->expects( $this->once() )
105
			->method( 'getOrderedDiffByTable' )
106
			->will( $this->returnValue( $diff ) );
107
108
		$subject = DIWikiPage::newFromText( __METHOD__ );
109
110
		$this->assertTrue(
111
			$instance->dispatchUpdateJobFor( $subject, $compositePropertyTableDiffIterator )
112
		);
113
	}
114
115
	public function testDispatchJobForNoValidDiff() {
116
117
		$diff = [];
118
119
		$propertyTableInfoFetcher = $this->getMockBuilder( '\SMW\SQLStore\PropertyTableInfoFetcher' )
120
			->disableOriginalConstructor()
121
			->getMock();
122
123
		$this->store->expects( $this->once() )
124
			->method( 'getPropertyTableInfoFetcher' )
125
			->will( $this->returnValue( $propertyTableInfoFetcher ) );
126
127
		$instance = new CitationTextChangeUpdateJobDispatcher(
128
			$this->store,
129
			$this->referenceBacklinksLookup
130
		);
131
132
		$compositePropertyTableDiffIterator = $this->getMockBuilder( '\SMW\SQLStore\CompositePropertyTableDiffIterator' )
133
			->disableOriginalConstructor()
134
			->getMock();
135
136
		$compositePropertyTableDiffIterator->expects( $this->once() )
137
			->method( 'getOrderedDiffByTable' )
138
			->will( $this->returnValue( $diff ) );
139
140
		$subject = DIWikiPage::newFromText( __METHOD__ );
141
142
		$this->assertFalse(
143
			$instance->dispatchUpdateJobFor( $subject, $compositePropertyTableDiffIterator )
144
		);
145
	}
146
147
	public function compositePropertyTableDiffProvider() {
148
149
		$diff = [
150
			'sci_cite_text' => [
151
				'delete' => [
152
					's_id' => 42
153
				]
154
			]
155
		];
156
157
		$provider[] = [ $diff ];
0 ignored issues
show
Coding Style Comprehensibility introduced by
$provider was never initialized. Although not strictly required by PHP, it is generally a good practice to add $provider = array(); before regardless.

Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code.

Let’s take a look at an example:

foreach ($collection as $item) {
    $myArray['foo'] = $item->getFoo();

    if ($item->hasBar()) {
        $myArray['bar'] = $item->getBar();
    }

    // do something with $myArray
}

As you can see in this example, the array $myArray is initialized the first time when the foreach loop is entered. You can also see that the value of the bar key is only written conditionally; thus, its value might result from a previous iteration.

This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop.

Loading history...
158
159
		$diff = [
160
			'sci_cite_text' => [
161
				'insert' => [
162
					's_id' => 42
163
				]
164
			]
165
		];
166
167
		$provider[] = [ $diff ];
168
169
		return $provider;
170
	}
171
172
}
173