Merge "Add UserMailerTransformX and UserMailerSplitTo hooks"
[lhc/web/wiklou.git] / tests / phpunit / includes / ImportTest.php
1 <?php
2
3 /**
4 * Test class for Import methods.
5 *
6 * @group Database
7 *
8 * @author Sebastian Brückner < sebastian.brueckner@student.hpi.uni-potsdam.de >
9 */
10 class ImportTest extends MediaWikiLangTestCase {
11
12 private function getInputStreamSource( $xml ) {
13 if ( ini_get( 'allow_url_fopen' ) != 1 ) {
14 $this->markTestSkipped( 'bug 73283: this test needs allow_url_fopen to be enabled' );
15 }
16 $file = 'data:application/xml,' . $xml;
17 $status = ImportStreamSource::newFromFile( $file );
18 if ( !$status->isGood() ) {
19 throw new MWException( "Cannot create InputStreamSource." );
20 }
21 return $status->value;
22 }
23
24 /**
25 * @covers WikiImporter::handlePage
26 * @dataProvider getRedirectXML
27 * @param string $xml
28 * @param string|null $redirectTitle
29 */
30 public function testHandlePageContainsRedirect( $xml, $redirectTitle ) {
31 $source = $this->getInputStreamSource( $xml );
32
33 $redirect = null;
34 $callback = function ( Title $title, ForeignTitle $foreignTitle, $revCount,
35 $sRevCount, $pageInfo ) use ( &$redirect ) {
36 if ( array_key_exists( 'redirect', $pageInfo ) ) {
37 $redirect = $pageInfo['redirect'];
38 }
39 };
40
41 $importer = new WikiImporter(
42 $source,
43 ConfigFactory::getDefaultInstance()->makeConfig( 'main' )
44 );
45 $importer->setPageOutCallback( $callback );
46 $importer->doImport();
47
48 $this->assertEquals( $redirectTitle, $redirect );
49 }
50
51 public function getRedirectXML() {
52 // @codingStandardsIgnoreStart Generic.Files.LineLength
53 return array(
54 array(
55 <<< EOF
56 <mediawiki xmlns="http://www.mediawiki.org/xml/export-0.10/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.10/ http://www.mediawiki.org/xml/export-0.10.xsd" version="0.10" xml:lang="en">
57 <page>
58 <title>Test</title>
59 <ns>0</ns>
60 <id>21</id>
61 <redirect title="Test22"/>
62 <revision>
63 <id>20</id>
64 <timestamp>2014-05-27T10:00:00Z</timestamp>
65 <contributor>
66 <username>Admin</username>
67 <id>10</id>
68 </contributor>
69 <comment>Admin moved page [[Test]] to [[Test22]]</comment>
70 <model>wikitext</model>
71 <format>text/x-wiki</format>
72 <text xml:space="preserve" bytes="20">#REDIRECT [[Test22]]</text>
73 <sha1>tq456o9x3abm7r9ozi6km8yrbbc56o6</sha1>
74 </revision>
75 </page>
76 </mediawiki>
77 EOF
78 ,
79 'Test22'
80 ),
81 array(
82 <<< EOF
83 <mediawiki xmlns="http://www.mediawiki.org/xml/export-0.9/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.9/ http://www.mediawiki.org/xml/export-0.9.xsd" version="0.9" xml:lang="en">
84 <page>
85 <title>Test</title>
86 <ns>0</ns>
87 <id>42</id>
88 <revision>
89 <id>421</id>
90 <timestamp>2014-05-27T11:00:00Z</timestamp>
91 <contributor>
92 <username>Admin</username>
93 <id>10</id>
94 </contributor>
95 <text xml:space="preserve" bytes="4">Abcd</text>
96 <sha1>n7uomjq96szt60fy5w3x7ahf7q8m8rh</sha1>
97 <model>wikitext</model>
98 <format>text/x-wiki</format>
99 </revision>
100 </page>
101 </mediawiki>
102 EOF
103 ,
104 null
105 ),
106 );
107 // @codingStandardsIgnoreEnd
108 }
109
110 /**
111 * @covers WikiImporter::handleSiteInfo
112 * @dataProvider getSiteInfoXML
113 * @param string $xml
114 * @param array|null $namespaces
115 */
116 public function testSiteInfoContainsNamespaces( $xml, $namespaces ) {
117 $source = $this->getInputStreamSource( $xml );
118
119 $importNamespaces = null;
120 $callback = function ( array $siteinfo, $innerImporter ) use ( &$importNamespaces ) {
121 $importNamespaces = $siteinfo['_namespaces'];
122 };
123
124 $importer = new WikiImporter(
125 $source,
126 ConfigFactory::getDefaultInstance()->makeConfig( 'main' )
127 );
128 $importer->setSiteInfoCallback( $callback );
129 $importer->doImport();
130
131 $this->assertEquals( $importNamespaces, $namespaces );
132 }
133
134 public function getSiteInfoXML() {
135 // @codingStandardsIgnoreStart Generic.Files.LineLength
136 return array(
137 array(
138 <<< EOF
139 <mediawiki xmlns="http://www.mediawiki.org/xml/export-0.10/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.10/ http://www.mediawiki.org/xml/export-0.10.xsd" version="0.10" xml:lang="en">
140 <siteinfo>
141 <namespaces>
142 <namespace key="-2" case="first-letter">Media</namespace>
143 <namespace key="-1" case="first-letter">Special</namespace>
144 <namespace key="0" case="first-letter" />
145 <namespace key="1" case="first-letter">Talk</namespace>
146 <namespace key="2" case="first-letter">User</namespace>
147 <namespace key="3" case="first-letter">User talk</namespace>
148 <namespace key="100" case="first-letter">Portal</namespace>
149 <namespace key="101" case="first-letter">Portal talk</namespace>
150 </namespaces>
151 </siteinfo>
152 </mediawiki>
153 EOF
154 ,
155 array(
156 '-2' => 'Media',
157 '-1' => 'Special',
158 '0' => '',
159 '1' => 'Talk',
160 '2' => 'User',
161 '3' => 'User talk',
162 '100' => 'Portal',
163 '101' => 'Portal talk',
164 )
165 ),
166 );
167 // @codingStandardsIgnoreEnd
168 }
169
170 }