Commit graph

532 commits

Author SHA1 Message Date
jenkins-bot
9a987e3c44 Merge "Xml.php: Do not escape double quotes in $contents of Xml::element()" 2018-05-29 19:26:33 +00:00
Brad Jorsch
24be43b9aa API: ApiBase::getParameter() shouldn't throw on other params' errors
This regression was introduced in Ia19a1617b7.

Bug: T195777
Change-Id: I1e1eb3861ced83f79e56d2325ab693ef4e393999
2018-05-28 18:45:24 -04:00
Reedy
0be39da9b0 Rename ApiQueryContributions to ApiQueryUserContribs to match api module name
Change-Id: I865628b87eda7be349522fcfaf94f5563142026e
2018-05-26 23:07:15 +00:00
jenkins-bot
b37772a991 Merge "Add ability to filter based on rc_title in API" 2018-05-24 10:13:06 +00:00
Fomafix
37789ebf45 Xml.php: Do not escape double quotes in $contents of Xml::element()
There is no need to escape double quotes in content of XML.
Html::element() also does not escape double quotes in content.

ENT_NOQUOTES escapes '<', '>' and '&' but not "'" and '"'.
https://secure.php.net/manual/en/function.htmlspecialchars.php

Change-Id: I3b585c43e532cca1a8951d6c9e8b4825fc3b012d
2018-05-23 20:03:54 +00:00
Brad Jorsch
a1cec32953 API: Raise an error when too many values are passed
Since 2008 the API has truncated with a warning when too many values are
passed to a multi-valued parameter. It's long past time to make this an
error.

Bug: T41936
Change-Id: I0f9efbdf9230373fa0c175a7fcacbca68225cf40
2018-05-21 18:46:43 -04:00
Brad Jorsch
91c385e138 API: Use User::getCanonicalName() when validating user names
This is a bit more interoperable than trying to roll our own by using
Title::makeTitleSafe().

We still need to handle IP addresses separately, of course.

Bug: T194916
Change-Id: Ie3900d768cbe15aef079b97d91f7fd23dc7c3e26
2018-05-18 11:59:04 +02:00
Brad Jorsch
78d1b8ebba API: Introduce "templated parameters"
With MCR coming up, ApiEditPage is going to need to be able to take
"text" and "contentmodel" parameters for each slot-role, and enumerating
such parameters for every possible slot would probably get rather
confusing as to what is required when, or at least long-winded in
repeating the exact same thing for every possible role.

So let's abstract it: we'll have an "editroles" parameter to specify which
slots are being edited, and ApiEditPage will just declare that
"text-{role}" and "contentmodel-{role}" parameters should exist for each
value of "editroles" in the submission.

Note this patch doesn't introduce anything that uses templated
parameters, just the functionality itself. For testing purposes you
might cherry pick I2d658e9a.

Bug: T174032
Change-Id: Ia19a1617b73067bfb1f0f16ccc57d471778b7361
2018-05-16 16:19:31 -04:00
Timo Tijhof
05da60c447 API: Add ApiParseTest case for 'styles' in getDefaultModules
Follows-up a01d8be82c.

Bug: T140664
Change-Id: Ic4151a548884d10a2302af49d89e9e36fd6766fd
2018-05-04 01:03:47 +01:00
Timo Tijhof
9ded02ec8e API: Remove 1e3>1 test case from ApiBaseTest
Follows-up d3da5e08d3, which broke PHP 7.1 and PHP 7.2 test jobs.

This isn't about logic in ApiBase, but about PHP's str-to-int
logic which actually varies between PHP5 and PHP7.

One maps it to 1000, the other as strict int 1 (with non-numerical
text chopped off, the same as it would for 1foo).

If we want to support 1e3 as part of the API itself, then we'd
need to parse it ourselves and then add the test back.

Bug: T192425
Change-Id: I6fc43f29425749a1abe785fefa312db6a98ea7cd
2018-04-18 23:12:06 +00:00
jenkins-bot
d79a73f3e9 Merge "Test ApiMove" 2018-04-18 18:47:13 +00:00
James D. Forrester
225b462a50 Drop deprecated EnableAPI and EnableWriteAPI settings
The siteinfo API response's 'writeapi' value is now hard-set to true,
as are the ResourceLoader variables wgEnableAPI and wgEnableWriteAPI,
to be deprecated later.

Bug: T115414
Change-Id: I54ff9428b247ba203d67aba079149393f323d5a9
2018-04-18 00:30:34 +00:00
Aryeh Gregor
80c7158f06 Test ApiMove
One bug caught: the watch and unwatch params were not being honored.
They have now been removed.

Depends-On: Ia21a974f2b463afc9324182137b95c80db86a6aa
Change-Id: I0e214339c9ae3f0fb5a40c88a84190bc32503151
2018-04-15 14:13:08 +03:00
jenkins-bot
54d50ef392 Merge "Test ApiUserrights" 2018-04-12 19:54:51 +00:00
Aryeh Gregor
5ab1bee6bc Test ApiUserrights
Fixed bug: in PHP versions less than 5.6.0, any request that didn't
attempt to add any groups would warn, because it would call array_fill()
with the second argument (num) equal to 0.  From PHP 5.6.0, the num
argument to array_fill() is allowed to be 0.

Change-Id: I0c5772f15d8f550dc43fb37c3c58d15dd73ea584
2018-04-12 21:26:02 +03:00
Brad Jorsch
4d2ab8d30f ApiMainTest: Fix typo
The mock wants to mock getRawIP, not getIP.

Change-Id: Id7febba6ba6a6762ebdd273fc882330c65882cd6
2018-04-12 13:00:35 -04:00
Aryeh Gregor
84db63aa6f Improve test coverage for ApiParse
Also removed a sketchy-looking usage of ?: with a string in
ApiParse.php.  In this case I think it was fine, because it would only
cause a bug if a page's display title was '0' but its actual title was
not '0', which is only possible if $wgRestrictDisplayTitle is false,
which is broken by design anyway and I don't think is worth testing.
But ?: used for something that should be interpreted as a string is
generally not a good idea.

One bug fixed: an error message that used an undefined variable.

Depends-On: Id0e6184aff8f9d7e8f32558e1de14faa0168cc1d
Change-Id: I0904bff0f9d80892d0db2ebb590c24fb862f2418
2018-04-12 15:59:54 +03:00
Aryeh Gregor
ed40e8ec53 Get rid of ApiTestCase::doLogin
The function is entirely unnecessary.

Change-Id: I805520e5355119e872e602d0bfc93be26f227128
2018-04-11 20:17:52 +03:00
jenkins-bot
79aa5a3fe4 Merge "Refactor ApiTestCase to get token from ApiQueryTokens" 2018-04-10 19:39:45 +00:00
jenkins-bot
e9edf8e6ac Merge "Improve test coverage for ApiBase.php" 2018-04-10 18:46:34 +00:00
Aryeh Gregor
767042c3e6 Refactor ApiTestCase to get token from ApiQueryTokens
Depends-On: I9375bc5f40268fd681a2d447c66a03f40b23390a
Change-Id: Ia21a974f2b463afc9324182137b95c80db86a6aa
2018-04-10 20:45:32 +03:00
jenkins-bot
579319d960 Merge "Improve test coverage for ApiMain.php" 2018-04-10 17:03:47 +00:00
Aryeh Gregor
be391449ae Improve test coverage for ApiMain.php
One bug fixed: if ApiCheckCanExecute returned false but didn't set
$message, we would try to output a message of false, which would throw
an exception.

Change-Id: Ib06970e280d750ff57d81672f1b365167b93aa3e
2018-04-08 21:15:37 +03:00
Aryeh Gregor
d3da5e08d3 Improve test coverage for ApiBase.php
One bug fixed: a timestamp of '00' or similar would get interpreted as
'now' by mistake instead of Unix timestamp 0, without throwing the
warning for using 0 instead of 'now'.  This is because it called
wfTimestamp() once to parse the input date, got a Unix timestamp of 0
back, and then tried passing that 0 back to wfTimestamp again to
reformat as a wiki date, but it got reinterpreted as 'now'.

Also fixed parameters with type "user" to validate usernames more
correctly.  This might be risky, though, if I missed any valid
usernames, or if API clients were for some reason relying on passing in
invalid usernames.  If we don't actually want to do this, we should add
a comment explaining why we're allowing any title without a fragment
rather than validating properly.

Still lots more work to do here.

Change-Id: I56b4290263df8698efdbddda71a7eabd9e303abc
2018-04-08 15:51:42 +03:00
addshore
41b2cb25bd Api requests can throw a ApiUsageException, and that should be expected
Change-Id: I4aa6e7511747c0d811e2e617b88e681a6eda875d
2018-04-05 08:41:32 +00:00
Amir Sarabadani
728321e113 Make autopatrol third option in rc_patrolled and use it in API
Bug: T184791
Change-Id: If64ba8b845b122a87f20646dddf72ef257b793cb
2018-04-03 18:44:37 +02:00
Umherirrender
69dbaf3f88 build: Updating mediawiki/mediawiki-codesniffer to 17.0.0
Change-Id: Ib494b47c54fe6354d166055b1e1b31d3583bb992
2018-03-29 21:53:10 +02:00
Aryeh Gregor
0b9edb467b Get ~100% test coverage for ApiEditPage.php and fix a couple of bugs
Bugs fixed:

* The major one was that appendtext and prependtext seemingly didn't
  work at all on empty pages in the MediaWiki namespace, because
  $this->getTitle() was being used in place of $titleObj.
* Negative undo/undoafter were not rejected in a correct fashion.
* If a logged-in user who was not allowed to upload images tried to
  create an image redirect, the error message used a nonexistent key.

I also replaced assertEquals with assertSame.

I also removed a bit of clearly dead code.  This includes a "break"
following dieStatus().  If we actually want this break so that nobody
adds a case after the default and then removes the dieStatus() so the
switch incorrectly falls through, it could be re-added with
@codeCoverageIgnore.

I put the fixes in the same commit as the test changes because I like to
keep fixes together with the tests for those fixes.

All code now shows up as covered locally, except for one line that seems
to be a PHPUnit bug.

Change-Id: I9375bc5f40268fd681a2d447c66a03f40b23390a
2018-03-28 15:33:24 +03:00
Aryeh Gregor
3c290c6b96 Stop test from randomly failing
The difference between two integers is less than 1 only if it's 0, so
the test as-is will fail whenever the second changes between when '1
day' is evaluated when inserting the block, and when time() is called
for the assert.

Change-Id: Ic76ff05729129b74345696879a934253525213fa
2018-03-26 20:08:22 +03:00
jenkins-bot
51eba1974c Merge "Improve test coverage for ApiBlock.php to 100%" 2018-03-26 16:42:04 +00:00
jenkins-bot
b9c46d28ff Merge "Improve test coverage for ApiDelete.php" 2018-03-26 15:18:31 +00:00
Aryeh Gregor
6e93b3bfaa Improve test coverage for ApiBlock.php to 100%
The code coverage tool still reports that line 50 ("$status,") is not
covered, but this is just a parameter to a function that is in fact
called and does show up as covered, so I'm pretty sure it's a bug.

I replaced a couple of sanity checks that reported "incomplete" on
failure with actual assertions so that the test would fail properly if
the sanity check failed.

The testing could still probably be expanded considerably.

Change-Id: Ib6ba7227af23bcb50c7e3bafb0b51395e8acf03f
2018-03-26 18:17:32 +03:00
Aryeh Gregor
a15339a9b5 Improve test coverage for ApiDelete.php
Still missing a test for file deletion, because I didn't figure out a
simple way to create a file page that I can test on.

Change-Id: I276e84b4f7777e5dd5be5520e572b9b9bb0c0633
2018-03-26 14:36:11 +03:00
jenkins-bot
2a9814f00e Merge "Improve test coverage for ApiLogin.php" 2018-03-23 17:34:10 +00:00
jenkins-bot
e7038cda80 Merge "Uncomment and fix a test" 2018-03-23 10:51:03 +00:00
jenkins-bot
c97a962bdb Merge "Convert OutputHandler functions to a class" 2018-03-21 20:56:22 +00:00
Aryeh Gregor
c7778c31d5 Improve test coverage for ApiLogin.php
I only made one small addition, because I don't understand login/session
code well enough to easily do more.

Change-Id: I36c5ea8e31fb00d75da24c38381f74ba8a15f31a
2018-03-21 19:57:27 +02:00
jenkins-bot
d4939862cf Merge "Test ApiDisabled.php" 2018-03-21 17:04:20 +00:00
Timo Tijhof
665e9b7bf2 Convert OutputHandler functions to a class
* Convert OutputHandler.php from global functions to a class.

  - wfOutputHandler → OutputHandler::handle
    (no alias, no usage outside core)
  - wfGzipHandler → OutputHandler::handleGzip
    (private, no usage outside class)
  - wfRequestExtension → OutputHandler::findUriExtension
    (private, no usage outside class)
  - wfMangleFlashPolicy → OutputHandler::mangleFlashPolicy
    (private, no usage outside class)
  - wfDoContentLength → OutputHandler::emitContentLength
    (private, no usage outside class)
  - wfHtmlValidationHandler → OutputHandler::validateAllHtml
    (private, no usage outside class)

* Add the class to autoload.php for exposure outside WebStart.
  Specifically, for use in ApiFormatPhpTest. This also removes the
  need to manually load the class because this code runs after
  Setup.php loads AutoLoader.php.

Bug: T189966
Change-Id: I27a41ec0ae0ee30aeb313a616323b967605c4055
2018-03-20 21:11:32 -07:00
Timo Tijhof
14644a2fb0 phpunit: Add some @covers and @large/@medium to integration tests
- @small: single class, no I/O (unit test).
- @medium: multi-class (partial or no mocks), no I/O (unit/integration test).
- @large: multi-class, I/O allowed (integration test).

Change-Id: I09317e6dd9b0ee34b7467fbffdd07957ef55dc04
2018-03-20 09:14:34 -07:00
Aryeh Gregor
05d01e51ca Test ApiDisabled.php
Locally this reports that everything is covered, although the get*()
functions are not registering at all (white backgrounds).

Change-Id: I73fabfb33b329dc3416368fda52d35f7ee6a4a18
2018-03-20 18:01:07 +02:00
Max Semenik
1a7e87726f Uncomment and fix a test
Change-Id: I78524b01aac514f5fc54152ddeed59169b7e04fc
2018-03-17 00:42:25 -07:00
Umherirrender
040063a4ba Rename ApiTestCaseUpload
Having *TestCase at end of the class name makes it easier to detect it
as TestCase class

Change-Id: Ic7ae7328e729c0f2d97afcf7c5be793d6a8df58f
2018-03-16 18:40:38 +01:00
Amir Sarabadani
4158cb5b9b Add ability to filter based on rc_title in API
Bug: T57377
Change-Id: I0b14bde58a4012816f2998d663d88ab035c927b7
2018-03-16 14:58:52 +01:00
Brad Jorsch
4c7b35105c Allow querying contributions of interwiki usernames
Both for Special:Contributions and ApiQueryUserContributions.

Bug: T187079
Change-Id: I4398e473b90172851e875b3f219f7076dceda66c
2018-03-06 13:28:30 -05:00
Brad Jorsch
27c61fb1e9 Add actor table and code to start using it
Storing the user name or IP in every row in large tables like revision
and logging takes up space and makes operations on these tables slower.
This patch begins the process of moving those into one "actor" table
which other tables can reference with a single integer field.

A subsequent patch will remove the old columns.

Bug: T167246
Depends-On: I9293fd6e0f958d87e52965de925046f1bb8f8a50
Change-Id: I8d825eb02c69cc66d90bd41325133fd3f99f0226
2018-02-23 10:06:20 -08:00
Umherirrender
63d96c15fd build: Updating mediawiki/mediawiki-codesniffer to 16.0.0
Change-Id: I59b59f79bbf3ce4feff3b3a20c1c31bc16370531
2018-02-17 13:29:13 +01:00
Reedy
39f0f919c5 Update suppressWarning()/restoreWarning() calls
Bug: T182273
Change-Id: I9e1b628fe5949ca54258424c2e45b2fb6d491d0f
2018-02-10 08:50:12 +00:00
Brad Jorsch
7bc541a4a7 ApiFormatBase: Encode filenames in Content-Disposition
The return value for ApiFormatBase::getFilename() was formerly
documented as "must be encoded for inclusion in a Content-Disposition
header's filename parameter." While this is ok for the common use case
where the module is returning a constant string or can assume whatever
it gets back from getExtensionsForType() is ok, it's not in general a
good idea to make all callers handle that.

Further, it's not possible to represent characters outside of the
ISO-8859-1 character set in a 'filename' parameter. You have to use
'filename*' to do that (see RFC 5987 and RFC 6266).

So, this patch changes the definition of getFilename() to remove the
encoding requirement, and adds code to properly convert and escape the
value for the 'filename' and (if necessary) 'filename*' parameters.

Note this may give unexpected results (double encoding) if any module
actually is returning an encoded filename. I don't see any such cases in
core or in extensions in Gerrit.

Change-Id: I0c2749a847b639f228efff4e1917a61612a1f7d1
2018-02-07 15:12:33 -05:00
jenkins-bot
4eff5204d9 Merge "API: Allow to pass whitespaces in MultiValue" 2018-01-29 15:31:43 +00:00
Fomafix
b8f97035ce API: Allow to pass whitespaces in MultiValue
This allows to response with an invalidreason instead silently ignore
the parameter.

Example request: api.php?format=json&action=query&titles=%20

Response before this change:
{
  "batchcomplete": ""
}

Response with this change:
{
  "batchcomplete": "",
  "query": {
    "pages": {
      "-1": {
        "title": " ",
        "invalidreason": "The requested page title is empty or contains only the name of a namespace.",
        "invalid": ""
      }
    }
  }
}

Bug: T185846
Change-Id: I6fdaf32792a0e6e37b08176f975c10607093351b
2018-01-28 19:05:07 +01:00
Umherirrender
c9d303d39e Remove "Created on" from file header comments
It is the job of git and svn to provide this information/metadata.
The form was different, some with short, some with long month name
some with leading zero at the day, some without.
The year is also present in the Copyright clause

Change-Id: If006907b82b9e45f13cfa2e45d41107a95570e1a
2018-01-26 23:12:40 +00:00
Umherirrender
45da581551 Use ::class to resolve class names in tests
This helps to find renamed or misspelled classes earlier.
Phan will check the class names

Change-Id: Ie541a7baae10ab6f5c13f95ac2ff6598b8f8950c
2018-01-26 22:49:13 +01:00
Yifei He
1891a1e972 Add PHPUnit tests for ApiDelete
This covers deleting non-file pages.

Bug: T183886
Change-Id: I31c27786b16b55f8bf4cf528bf4c1ea49075e02e
2018-01-18 18:09:46 +05:30
jenkins-bot
afe317e26d Merge "Add tests for ApiFormatRaw" 2018-01-04 21:05:29 +00:00
jenkins-bot
dcf3a3be60 Merge "Add tests for ApiFormatBase" 2018-01-04 21:01:12 +00:00
Phantom42
92e249c4dc Add tests for ApiFormatRaw
Bug: T183767
Change-Id: I63ce42dd61f6e47f7278c436cad1e4f05e287b04
2018-01-04 19:28:27 +02:00
jenkins-bot
ba00b23a1d Merge "ApiComparePages: Add 'fromsection' and 'tosection' parameters" 2018-01-04 07:01:31 +00:00
Brad Jorsch
a8f5964cfe Add tests for ApiFormatBase
Ensuring proper behavior of the base class lets comprehensive tests of
subclasses be simpler.

This also adjusts ApiFormatTestBase to be a bit more usable, passing an
array of options through to encodeData() instead of just a class name.
And removes the unused 'SKIP' from testGeneralEncoding, but allows
expecting an exception (for use in I63ce42dd).

Change-Id: Ib2a1fa0b04860b09105376881ff8411f9534c453
2018-01-03 16:08:12 -05:00
Phantom42
55a12fcfa7 Add message to the assert of ApiClearHasMsgTest
This adds 'sanity check' message for one of asserts so it is more
clear that it is asserting a precondition.

Change-Id: I10d36c1bf69effd7bd83f4a2259144e9f6e114fc
2018-01-03 04:29:23 +02:00
jenkins-bot
08324f14b4 Merge "build: Updating mediawiki/mediawiki-codesniffer to 15.0.0" 2018-01-02 10:12:27 +00:00
Phantom42
a6dad54007 Add test for ApiClearHasMsg
Bug: T183769
Change-Id: I60c66a7cddaf03a83afd29e536281916ef3eb6d5
2018-01-01 21:19:52 -08:00
Umherirrender
255d76f2a1 build: Updating mediawiki/mediawiki-codesniffer to 15.0.0
Clean up use of @codingStandardsIgnore
- @codingStandardsIgnoreFile -> phpcs:ignoreFile
- @codingStandardsIgnoreLine -> phpcs:ignore
- @codingStandardsIgnoreStart -> phpcs:disable
- @codingStandardsIgnoreEnd -> phpcs:enable

For phpcs:disable always the necessary sniffs are provided.
Some start/end pairs are changed to line ignore

Change-Id: I92ef235849bcc349c69e53504e664a155dd162c8
2018-01-01 14:10:16 +01:00
Phantom42
1cdcef8a32 Add tests for ApiCheckToken
Bug: T183768
Change-Id: I63ab0413252c7333f73b881995869454c4881a57
2018-01-01 02:06:59 +02:00
Brad Jorsch
b7f75836ee ApiComparePages: Add 'fromsection' and 'tosection' parameters
The deprecated diffing in prop=revisions and such used a 'rvsection'
parameter. To enable migration of things using that, action=compare
needs corresponding section parameters.

Bug: T183823
Change-Id: If1a0e2df614c083b37640418c69cca367ce0e895
2017-12-30 12:59:26 -05:00
jenkins-bot
1a0474fa7b Merge "Add @covers tags API tests without them" 2017-12-28 16:53:39 +00:00
Kunal Mehta
92ee198c66 Add @coversNothing in places where @covers does not apply
These tests apply to things that are not relevant to PHP code coverage,
such as testing presence of messages, JSON files, or the PHPUnit tests
themselves.

Using @coversNothing indicates that there is no code here to be covered,
and prevents warnings when using --strict-coverage mode (T152923).

Change-Id: Id89ee2c15a3ce3f10e34b13fb677cd1af75af9e6
2017-12-28 08:53:40 +00:00
Kunal Mehta
2c2dc593d2 Add @covers tags API tests without them
Change-Id: Ida0f954cb0a44719af3a3d0c6bda4587c9ca42b6
2017-12-27 17:50:06 +00:00
jenkins-bot
8eaee6fd06 Merge "Simplify ApiQueryRecentChangesIntegrationTest" 2017-12-27 12:51:54 +00:00
jenkins-bot
0ed9e8b554 Merge "Integration tests for ApiQueryRecentChanges" 2017-12-27 12:33:27 +00:00
Thiemo Mättig
e02e140e2d Simplify ApiQueryRecentChangesIntegrationTest
This patch does two major things to the newly introduced
ApiQueryRecentChangesIntegrationTest:

* It rips the confusingly complicated assertArraySubsetsEqual appart.

* It removes all wikitext content. Note that no assertion is done on this
content (not even in the test that is about adding a category). The tests
run just fine with automatically generated content. I had to introduce the
$i counter to make sure consecutive edits are done with different content.
Otherwise the later edit is not stored.

Change-Id: Iae585be86f3fd9bff7d2b4b7b218d5b0b4258603
2017-12-27 13:23:17 +01:00
Thiemo Mättig
72fa7b9dfc Fix inconsistent capitalization of different method calls
Change-Id: I9f5b9e59e8cdadf65e80077fe2d3a9822b4592fe
2017-12-27 12:35:13 +01:00
Amir Sarabadani
b29d4e2789 Integration tests for ApiQueryRecentChanges
It looks big but it's mostly copy from ApiQueryWatchlistIntegrationTest

Change-Id: I96ccd3e2813e77f47a4432ca434c1c6a212d90ea
2017-12-25 14:13:47 +01:00
Bartosz Dziewoński
f1ca6b8ca9 ApiOptionsTest: Do not use ->at()
Quoting PHPUnit docs:

  The $index parameter for the at() matcher refers to the index,
  starting at zero, in all method invocations for a given mock object.
  Exercise caution when using this matcher as it can lead to brittle
  tests which are too closely tied to specific implementation details.

Indeed these test cases would break horribly with unintuitive error
messages ("Mocked method does not exist") if anything in preferences
or API code called any additional methods on the mocked user. For
example, it relied on the caching in Preferences::getPreferences(),
which is being removed in I92390120a16448383a25e9ba2dd35a434a2f21bf.

I'm pretty sure all that matters here is that all the setOption()
calls with different arguments happen, so let's test just that.

Change-Id: I30a814151a006e5f147eebb918344049807b2b97
2017-11-15 11:04:09 +00:00
Timo Tijhof
d5ed2785fb API: Include setupSkinUserCss in prop=modules for useskin mode
Follows-up 90c95fc7f2, which included result of Skin::getDefaultModules
in the prop=modules list. All hardcoded modules in OutputPage and Parser
were also subsequently moved into Skin::getDefaultModules.

However, a number of modules cannot be moved there because fundamentally
Skin::getDefaultModules can only load modules via OutputPage::addModules().

For style modules, addModuleStyles() must be used.

Fortunately, there is already a centralised place for that, namely
Skin::setupSkinUserCss(). Include that in the ApiParse return as well.
That should resolve the last bit of inconsistency between ApiParse
and OutputPage when it comes to the module queue.

Bug: T140664
Change-Id: I35e2e3bbdccdd1aa2a259b8e624daa80c609ba8c
2017-10-25 02:16:01 +01:00
Timo Tijhof
e8619ba749 API: Add tests for useskin parameter of ApiParse
Change-Id: If3dff7be5ccb6791f95d37c06998fcbadf1f469f
2017-10-25 02:07:59 +01:00
jenkins-bot
6f4eda1fd3 Merge "Fix inability of fetching message object" 2017-10-05 13:57:29 +00:00
Aleksey Bekh-Ivanov (WMDE)
42f822a949 Fix inability of fetching message object
Fatal error was happening due to the fact that ApiUsageException was
trying to call `getMessage()` on StatusValue which doesn't have this
method.

Change-Id: Idd9c7d47d9e24a6a32db6daf75a827bf958c9b76
2017-10-04 15:24:42 +02:00
jenkins-bot
6d3641b7a7 Merge "Improve namespace handling in tests" 2017-09-29 05:33:26 +00:00
Brad Jorsch
2d9f29a846 Improve namespace handling in tests
MWNamespace has three internal caches, only one of which can be cleared
(and that somewhat oddly by passing a boolean to
MWNamespace::getCanonicalNamespaces()).

This change introduces a MWNamespace::clearCaches() method to clear all
three caches. It also adds some resetting in tests that seemed to be
missing it.

Change-Id: I1dcfcd8713888b3ff8fc75e95329ba72bd95d0c9
2017-09-29 05:21:47 +00:00
Aleksey Bekh-Ivanov (WMDE)
cc3c0d2cdf Make ApiUploadTest up to date so it passes
Although the test is still might fail from time to time
and needs refactoring.

Bug: T28169
Change-Id: Ib27a36e0d76495a133eb8941300e4940e5eb670e
2017-09-22 20:49:08 +02:00
Brad Jorsch
11cf01dd9a Add comment table and code to start using it
A subsequent patch will remove the old columns.

Bug: T166732
Change-Id: Ic3a434c061ed6e443ea072bc62dda09acbeeed7f
2017-08-30 15:05:00 +10:00
jenkins-bot
f4a53c5406 Merge "API: Add deprecation warnings for Iae0e2ce3" 2017-07-21 21:12:10 +00:00
Umherirrender
b5cddfb27b Remove empty lines at begin of function, if, foreach, switch
Organize phpcs.xml a bit

Change-Id: Ifb767729b481b4b686e6d6444cf48b1f580cc478
2017-07-01 11:34:16 +00:00
Umherirrender
be42e09aa8 build: Prepare for mediawiki/mediawiki-codesniffer to 0.9.0
The used phpcs has a bug, so the version 0.9.0 could not be enforced at the moment.
Will be fixed in next version, see T167168

Changed:
- Remove duplicate newline at end of file
- Add space between function and ( for closures
- and -> &&, or -> ||

Change-Id: I4172fb08861729bccd55aecbd07e029e2638d311
2017-06-26 17:14:31 +00:00
Brad Jorsch
efaaa2c1d6 API: Add deprecation warnings for Iae0e2ce3
Change-Id: Ib0c9d5a18803b406a1266eb24238536d122ff6e7
2017-06-22 13:21:08 -04:00
jenkins-bot
80f6b8c048 Merge "API: Restore ability for dieStatus() to be passed a non-fatal Status" 2017-06-13 23:25:35 +00:00
Brad Jorsch
e5006ce0f0 API: Restore ability for dieStatus() to be passed a non-fatal Status
This ability was accidentally removed in Iae0e2ce3.

Bug: T167690
Change-Id: I79cc9f2f8e75c3cf4e0942d17faafa84955aa020
2017-06-13 10:30:24 -04:00
Brad Jorsch
1e2b3fb37f ApiParse: Clean up parsing code
Now that ParserOptions->isSafeToCache() exists, use it where necessary.
This also moves the use inside the makeParserOptions() method so other
callers can pick it up as well.

Then pass the flag as $forceParse into WikiPage::getParserOutput()
instead of duplicating the logic in several cases, and generally clean
up the logic in the module to let WikiPage decide when to use the cache
in more cases.

Change-Id: I0079e10a40997e4a3b59ac21ef6c92246a147736
2017-06-12 12:34:17 -04:00
Brad Jorsch
c671ee1622 API: Rewrite ApiComparePages
Support diffing deleted revisions, user-supplied text, and additional
properties about the diffed revisions such as the user and edit summary.

Bug: T20189
Bug: T30047
Bug: T164529
Change-Id: I5565d717d9c2fd19da7cae02890a15e244cc238b
2017-06-05 12:23:32 -07:00
jenkins-bot
a244391c0d Merge "Fix some postgres test failures" 2017-05-10 17:25:45 +00:00
Aaron Schulz
b8340df640 Avoid assuming a user with ID 0 exists in ApiMainTest::testAssert
If the load() triggered by User method calls fails, then mId becomes 0
which means there is no "user" right set in getAutomaticGroups().

Bug: T75174
Change-Id: I2d719e4b96c0142e9d408aa2d4f7c5e7a767a754
2017-05-09 19:25:56 -07:00
Aaron Schulz
6793b60eca Fix some postgres test failures
Bug: T75174
Change-Id: If9812ae301f0af84fa012e2e980b92036c1b29b2
2017-05-10 01:59:47 +00:00
Gergő Tisza
525bfbc8df Switch to librarized version of TestingAccessWrapper
Replaces \TestingAccessWrapper (defined in core) with
\Wikimedia\TestingAccessWrapper (defined in the composer package
wikimedia/testing-access-wrapper).

See https://gerrit.wikimedia.org/r/#/q/topic:librarize-testing-access-wrapper
for downstream patches.

The core version of the class is kept around for a while to avoid
circular dependency problems.

Bug: T163434
Change-Id: I52cc257e593da3d6c3b01a909e554a950225aec8
2017-04-20 14:15:57 +00:00
jenkins-bot
4d609f015d Merge "ApiPageSet: Follow RedirectSpecialArticle redirects" 2017-04-08 09:36:21 +00:00
Timo Tijhof
447ce7e39a phpunit: Avoid use of deprecated getMock for PHPUnit 5 compat
The default will remain PHPUnit 4.x due to PHP 5.5 support.

But, we should allow developers to run tests with newer PHPUnit
versions which are noticably faster (especially for code coverage
reports).

* <https://github.com/sebastianbergmann/phpunit/wiki/Release-Announcement-for-PHPUnit-5.4.0>
  PHPUnit 5 deprecates the getMock() shortcut for getMockBuilder()->getMock().
  It instead introduces the shortcut createMock() which has better defaults
  than getMockBuilder(). For example, it sets 'disableArgumentCloning' and
  other things by default.

  Going forward, code should either use getMockBuilder directly and configure
  it using the setter methods (instead of the confusing variadic arguments
  of getMock) or simply use the new minimalistic createMock method. This patch
  backports the createMock method to MediaWikiTestCase so that we can start
  using it.

Change-Id: I091c0289b21d2b1c876adba89529dc3e72b99af2
2017-04-06 00:44:32 +00:00
Brad Jorsch
ca61e20e3d Fix ApiMainTest::testApiErrorFormatterCreation
API tests are all subclasses of MediaWikiLangTestCase, which overrides
the content language when the tests are actually running. So we need to
always use 'en' to match that.

Bug: T162007
Change-Id: Ie001576fb62ae88c9141e471fd8fcbc49592be32
2017-04-03 09:44:13 -04:00
aude
8443339411 Add missing @group Database tags in tests
Change-Id: Id92aab0b1f8cde6657d6558d0d82605109daa588
2017-03-18 19:13:18 -04:00
Brad Jorsch
2338fe08c1 ApiPageSet: Follow RedirectSpecialArticle redirects
For example Special:MyPage, Special:MyTalk, and Special:MyLanguage.

Don't follow other redirect special pages like Special:MyContributions,
though, because the following only really makes sense when the redirect
is to an article.

Bug: T145541
Change-Id: I8c8065552ed128017887e48285e359def8bd3cd3
2017-03-08 16:54:01 -05:00
Timo Tijhof
3a2a707546 Clean up remaining get_class() uses
* get_class()        -> __CLASS__ (same as self::class)
* get_called_class() -> static::class
* get_class($this)   -> static::class

Change-Id: I1888a1897ecf4548a2e5a67a942e5c080dd7e3d3
2017-03-07 22:03:47 +00:00