Commit graph

568 commits

Author SHA1 Message Date
Kunal Mehta
72b4099727 Turn ApiPrefixUniquenessTest into a structure test
This way it gets run during extension test runs as well.

Temporarily add a hack allowing 'wbeu' duplicates until T196962 is fixed.

Change-Id: Ic89a22a2ff4525585de9e290a1d47d22cfaaac5e
2018-08-17 14:19:41 -07:00
Aryeh Gregor
e68fdb4065 Mass conversion to SpecialPageFactory service
Change-Id: Ia6e1e819ec6cbe8bf75b820109f51d47863e31fc
2018-08-17 12:03:12 -07:00
Kunal Mehta
b7b8f214bb Parser: Call firstCallInit() in getTags/getFunctionHooks
So callers don't need to do this manually. Pointed out by Tim in T201799.

Depends-On: Ia6c36d5a650095e35093bf47e275e081e89b3daf
Change-Id: Ida62767f3ca53f99609cae01d3a20051bb92ccab
2018-08-14 14:16:42 -07:00
dcot
1e01bf8a28 Add PHPUnit test to ApiQueryDisabled
This change adds a PHPUnit test to ApiQueryDisabled as requested in T183885.
A PHPUnit test for ApiDisabled was already in place.

Bug: T183885
Change-Id: I7726c27a5ca74ce26f095afd13af4a71babea82e
2018-08-02 21:44:24 -04:00
Kunal Mehta
fb73286fba Add PasswordFactory to MediaWikiServices
Instead of having basically every caller do:
 $pf = new PasswordFactory();
 $pf->init( RequestContext::getMain()->getConfig() );
Just create a single PasswordFactory via MediaWikiServices and pass that
around. Things that want to use their own config can still pass settings
via the new constructor.

This will eventually let us remove the init() function, removing the
only hard dependency upon MediaWiki, to make it easier to librarize
(T89742).

Change-Id: I0fc7520dc023b11a7fa66083eff7b88ebfe49c7b
2018-08-02 14:46:35 +01:00
jenkins-bot
62c9cce4bd Merge "Test ApiQuerySiteinfo" 2018-08-02 02:44:38 +00:00
jenkins-bot
07beacf802 Merge "Automatically reset namespace caches when needed" 2018-08-02 02:26:33 +00:00
jenkins-bot
8519fdd110 Merge "New helper ApiTestCase::setExpectedApiException()" 2018-08-02 02:10:59 +00:00
Kunal Mehta
b4ea2d8c81 Disable PHPUnit tests that fail under postgres
So we can make the job voting, preventing other tests from regressing.
These tests can be re-enabled whenever they're made to pass.

Bug: T195807
Change-Id: I58261dd70eea3581803987a4a7739c7d55558f42
2018-08-01 22:22:15 +00:00
Aryeh Gregor
27d41f442a Test ApiQuerySiteinfo
Change-Id: If48395c345624bbd447f3a2d51b7914c274633f6
2018-08-01 16:30:13 +03:00
Aryeh Gregor
63d7f2ad13 Automatically reset namespace caches when needed
This avoids error-prone code written separately in every test.  In
addition to no existing tests resetting the TitleFormatter (more
services probably need to be reset as well), they mostly reset only the
namespace cache on $wgContLang, which wouldn't help for any other
language.

The parser test runner still doesn't do this, but maybe it should.

Change-Id: I44b7a1aec48f14b0950907fa14bd0df80f674296
2018-08-01 16:30:08 +03:00
Aryeh Gregor
1aff6ffd38 New helper ApiTestCase::setExpectedApiException()
This allows setting the expected exception message by the message key,
not text, so it remains correct if the message is updated.  This
function could be defined to work with other exception types too, but it
seems useful to have shortcuts for common types like ApiUsageException
or MWException.

Change-Id: Ic86278e9e1e91eea0c045d2b93342f018e1d8e66
2018-08-01 14:13:23 +03:00
Kunal Mehta
b92565ca18 Disable PHPUnit tests that fail under sqlite
So we can make the job voting, preventing other tests from regressing.
These tests can be re-enabled whenever they're made to pass.

Change-Id: I959710138e1e1b37b6ba69561c2920a78208bf12
2018-08-01 00:19:43 -07:00
jenkins-bot
fb1b454e6a Merge "API: Update query modules for MCR" 2018-07-30 22:40:40 +00:00
Aryeh Gregor
05d78a6c71 Move utility methods from ApiTestCase to MediaWikiTestCase
Change-Id: I79c4e37092958c63a693194b27a9eafae70cb2f8
2018-07-29 12:47:45 +03:00
Brad Jorsch
07842be379 API: Update query modules for MCR
MCR deprecated the Revision class in favor of the broadly similar
RevisionRecord, and more interestingly added the concept of multiple
content "slots" to revisions.

Thus, prop=revisions, prop=deletedrevisions, and so on gain a parameter
to specify which slots are wanted. When this new parameter is not
specified (and any content-related props are specified), a warning about
the legacy format will be issued.

The rest of the modules just needed to call methods or use constants on
RevisionRecord instead of Revision. ApiQueryDeletedrevs wasn't touched,
since it has been deprecated since 1.25 anyway.

This also updates a few non-query modules that don't depend on details
of editing, diffing, or viewing MCR revisions that haven't been figured
out yet.

Bug: T200568
Change-Id: I1327d1784f5cedb006cd74df834cf9a560a77a5d
2018-07-27 23:33:45 +00:00
Aryeh Gregor
355e21590a Use setContentLang() instead of setMwGlobals()
This changes behavior in some tests by making them set $wgLanguageCode
as well as $wgContLang, but that seems like a good thing.

Bug: T200246
Change-Id: I936888f46ff9fefe2707efba837e2ce3a7ca5e3f
2018-07-26 11:35:58 +00:00
Bill Pirkle
807125abdb Deprecate $wgShowSQLErrors and $wgShowDBErrorBacktrace and make nonfunctional
Clarify and simplify exception output by deprecating
$wgShowSQLErrors and wgShowDBErrorBacktrace.
$wgShowExceptionDetails will now control most related output.
$wgShowHostnames will now solely control output of
MWExceptionRenderer::reportOutageHTML.

Bug: T165768
Change-Id: Idead2c11c499463dfa6293c3d4b33be3bde92e1a
2018-07-25 10:38:19 -05:00
jenkins-bot
4c8b3cc04c Merge "ApiBase: Use prefixed parameter name for 'missingparam' error" 2018-07-25 05:29:12 +00:00
jenkins-bot
4533986087 Merge "Avoid a redirect loop when the request URL is not normalized" 2018-07-24 16:13:39 +00:00
Brad Jorsch
c72a5e5ef4 ApiBase: Use prefixed parameter name for 'missingparam' error
Similar errors use the prefixed parameter name, this one should too.

Bug: T200155
Change-Id: Ia14d6a9c457af06e72428c1eae14bd3849b4595a
2018-07-23 11:44:09 -04:00
Brad Jorsch
78955203c3 ApiMain: Always create a new printer in getPrinterByName()
ApiMain already caches the printer in ->mPrinter, so if
getPrinterByName() is being called more than once that's because we
really want a new printer instance, without any cached errors or other
behavior that results from reusing the same instance.

Bug: T199949
Change-Id: I779cbbaa8aab9b049a8eed732416edd828121ec4
2018-07-19 10:45:28 -04:00
Max Semenik
e6b4944dbf Introduce preference filters
This normalizes handling of transformations on the boundaries between
preferences and generic form controls and removes the special case
where email-blacklist is passed around as an array internally, leaking
into the API.

As a result of this normalization, meta=userinfo no longer returns an
array of users, using the internal representation like action=options.

Bug: T198935
Change-Id: Iff63da0d215585cfcf083e7f7ec8ed45d5b77301
2018-07-17 13:19:14 -07:00
Tim Starling
f6d582a91e Avoid a redirect loop when the request URL is not normalized
If the request URL was not normalized, for example having a double slash
in it, this could cause it to fail to match in the PathRouter. But the
canonicalizing redirect was using the normalized URL, causing a redirect
loop exception.

So:

* If the PathRouter fails to match with the original URL, try matching
  against the normalized URL. This allows it to still work for
  normalized URLs with a double slash in the title part of the path.
* Have WebRequest::getFullRequestURL() always return the URL without
  removing dot segments or interpreting double slashes. Just append
  the path to the server.
* Make MediaWikiTest.php use WebRequest instead of FauxRequest, allowing
  it to reproduce the exception in question. Add relevant test.
* Add tests for the new PathRouter behaviour.

Bug: T100782
Change-Id: Ic0f3a0060904abc364f75dae920480b81175d52f
2018-07-16 15:55:59 +10:00
Umherirrender
130ec2523d Fix PhanTypeMismatchDeclaredParam
Auto fix MediaWiki.Commenting.FunctionComment.DefaultNullTypeParam sniff

Change-Id: I865323fd0295aabd06f3e3c75e0e5043fb31069e
2018-07-07 00:34:30 +00:00
Fomafix
125cbd8c01 Use \u{00A0} instead of   or  
Directly use the UTF-8 encoding of the 'NO-BREAK SPACE' (U+00A0) instead of
the HTML/XML entities   or   or  .

With the UTF-8 character the generated HTML is shorter and better to read.

Also change the special value for the label in HTMLForm from   to
U+00A0 but also support   for backward compability.

Bug: T154300
Change-Id: I882599ac1120789bb4e524c4394870680caca4f4
2018-06-24 01:20:13 +00:00
Brad Jorsch
d927830935 API: Check assert parameters earlier in the request
Specifically, check the assert and assertuser parameters before setting
up the action module, so errors in parsing the module's parameters due
to being logged out don't override the client's intended "am I logged
in?" check.

Note this means that assertion failures will no longer use custom module
output formatters. This seems like an acceptable tradeoff: on Wikimedia
sites in May 2018 there were no requests that would have been affected
by this change.

Bug: T197672
Change-Id: I02a71395d5ed9f445e57162f2136292825f8dbb5
2018-06-21 14:50:47 -04:00
daniel
e8632ab0f6 [MCR] Factor PageUpdater out of WikiPage
This introduces PageUpdater to replace WikiPage::doEditContent,
and DerivedPageDataUpdater, to replace WikiPage::doEditUpdates
and WikiPage::prepareContentForEdit.

See docs/pageupdater.txt for a description of their
functionality.

MCR migration notes:

* The interface of PageUpdater is expected to
remain mostly stable after this patch. Code that has been using
WikiPage::doEditContent can be confidently migrated to using the
new mechanism for revision creation.

* This patch keeps the code inside PageUpdater largely aligned
with the old code in WikiPage, to make review easier to to avoid
mistakes. It is intended to be refactored further, moving
application logic into stateless services.

* DerivedPageDataUpdate is intended as a stepping stone for further
refactoring. Its behavior is designed to be compatible with
callback code that currently relies on
WikiPage::prepareContentForEdit. Much of the code that currently
lives in DerivedPageDataUpdate should be factored out into
services, all behavior relevant to calling code should be exposed
via narrow interfaces.

Bug: T174038
Bug: T196653
Change-Id: If610c68f4912e89af616cdcac1d35a1be3946afa
2018-06-14 13:22:13 +00:00
daniel
e4b775acf1 Suppress addCoreDBData() in tests overriding the revision schema.
Some unit tests for the MCR schema migration change the DB schema
in the test setup. However, addCoreDBData() will not work with the
modified schema. Since these tests don't actually need addCoreDBData()
to do anything, they can simply override it to do nothing.

Without this change, tests for Ic2221da30c and Ifabf39e12ba843
fail with $wgMultiContentRevisionSchemaMigrationStage = MIGRATION_WRITE_BOTH.

Change-Id: I86e140ec981dfa4e904822b1600399c533f9e3d6
2018-06-14 07:41:28 +00:00
Erik Bernhardson
83bae78c3a Silently drop unknown titles in completion search
This mimics how full text works by silenty dropping results returned from
search that no longer exist. This could be because the search index is slightly
out of sync with reality, or the search engine could simply be broken.

Only silent from the users perspective. We maintain a count in statsd of
the number of titles dropped. This can be monitored over time to
recognize any increases.

Bug: T115756
Change-Id: I2f29d73e258cd448a14d35a2b4902a4fb6f61c68
2018-06-11 13:56:19 -07:00
Erik Bernhardson
2a43939ffb Push pagination decision for search into SearchEngine
Various code using the search engine shouldn't need to implement it's
own methods, such as over-fetching, to determine if there are more
results available. This should be knowledge internal to search that is
exposed by a boolean.

Change-Id: Ica094428700637dfdedb723b03f6aeadfe12b9f4
2018-06-11 13:35:44 -07:00
Erik Bernhardson
c2a308075f Convert SearchResultSet to typical iteration
The funky iteration here was at best annoying. Switch
it over to an iterator based approach with appropriate
BC code to simulate the old iteration style.

Depends-On: I19a8d6621a130811871dec9335038797627d9448
Change-Id: I9fccda15dd58a0dc35771d3b5cd7a6e8b02514a0
2018-06-11 13:35:41 -07:00
Bartosz Dziewoński
485f66f174 Use PHP 7 '??' operator instead of '?:' with 'isset()' where convenient
Find: /isset\(\s*([^()]+?)\s*\)\s*\?\s*\1\s*:\s*/
Replace with: '\1 ?? '

(Everywhere except includes/PHPVersionCheck.php)
(Then, manually fix some line length and indentation issues)

Then manually reviewed the replacements for cases where confusing
operator precedence would result in incorrect results
(fixing those in I478db046a1cc162c6767003ce45c9b56270f3372).

Change-Id: I33b421c8cb11cdd4ce896488c9ff5313f03a38cf
2018-05-30 18:06:13 -07:00
Bartosz Dziewoński
4fd27f006f Use PHP 5.6 '**' operator instead of 'pow()' function
Change-Id: Ieb22e1dbfcffaa4e7b3dcfabbcc999e5dd59a4bf
2018-05-30 18:05:19 -07:00
jenkins-bot
ade631c612 Merge "Call Database::timestamp in some tests" 2018-05-30 19:32:02 +00:00
Umherirrender
1cee41b9dc Call Database::timestamp in some tests
Also add non-optional database fields to insert.
The fields are defined with a default in mysql,
but not in postgres or oracle.

Bug: T195807
Change-Id: I201638e3438cb0e5004f8da121e64a770e6a8fca
2018-05-29 22:28:36 +02:00
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