Commit graph

32 commits

Author SHA1 Message Date
Máté Szabó
344481f60d Move trivially compatible tests to the unit tests suite
This changeset resumes work on T89432 and related tickets
by porting an initial set of tests to the new unit test suite
separated out in I69b92db3e70093570e05cc0a64c7780a278b321a.
The tests were only ported if they worked immediately without
requiring any changes other than changing the test case class
to MediaWikiUnitTestCase and moving the test to the new suite.
If a test failed for any reason (even trivial misconfiguration),
it was NOT ported.

With this change, the unit tests suite now consits of a total
of 455 tests. As before, you can run these tests via the following
command:
$ composer phpunit:unit

Bug: T84948
Bug: T89432
Bug: T87781
Change-Id: Ibb8175981092d7f41864e641cc3c118af70a5c76
2019-06-30 15:23:53 +02:00
Legoktm
4e35134f7a Revert "Separate MediaWiki unit and integration tests"
This reverts commit 0a2b996278.

Reason for revert: Broke postgres tests.

Change-Id: I27d8e0c807ad5f0748b9611a4f3df84cc213fbe1
2019-06-13 23:00:08 +00:00
Máté Szabó
0a2b996278 Separate MediaWiki unit and integration tests
This changeset implements T89432 and related tickets and is based on exploration
done at the Prague Hackathon. The goal is to identify tests in MediaWiki core
that can be run without having to install & configure MediaWiki and its dependencies,
and provide a way to execute these tests via the standard phpunit entry point,
allowing for faster development and integration with existing tooling like IDEs.

The initial set of tests that met these criteria were identified using the work Amir did in
I88822667693d9e00ac3d4639c87bc24e5083e5e8. These tests were then moved into a new subdirectory
under phpunit/ and organized into a separate test suite. The environment for this suite
is set up via a PHPUnit bootstrap file without a custom entry point.

You can execute these tests by running:
$ vendor/bin/phpunit -d memory_limit=512M -c tests/phpunit/unit-tests.xml

Bug: T89432
Bug: T87781
Bug: T84948
Change-Id: Iad01033a0548afd4d2a6f2c1ef6fcc9debf72c0d
2019-06-13 22:56:31 +02:00
Thiemo Kreuz
8a4e15db7f Add missing newline between <?php and namespace/use section
The rest of the codebase is using this code formatting standard.

Change-Id: I4d2ba61757a7e28d40096d9dc5915005c340d4f2
2019-06-03 13:36:48 +00:00
jenkins-bot
fdf9662c81 Merge "WatchedItemStore: Remove deprecated Title param to getNextRevision()" 2019-05-29 17:48:23 +00:00
Roan Kattouw
24a38d1c5a WatchedItemStore: Remove deprecated Title param to getNextRevision()
This was deprecated in I76bc6fd6ee, but somehow this usage was missed,
maybe the commit that added it went through review in parallel with that
one.

Change-Id: I8131f360f4300f62d56be64fda117038f51e693b
2019-05-19 15:09:13 +02:00
Thiemo Kreuz
e9044fe58d Remove covers validator trait where it is not needed
MediaWikiTestCase already contains this trait.

Change-Id: I08224ac12a58b41121697ab71d5c54ddbdd060ec
2019-05-17 16:49:31 +02:00
Aryeh Gregor
761e704d6e Convert WatchedItem and friends to LinkTarget
There is no longer any reference to Title in WatchedItem classes or
their unit tests except for one hook that keeps Title for compat. Happy
side effects include getting rid of $revisionGetTimestampFromIdCallback,
and a net reduction of 143 LOC.

Change-Id: Id998c6f336ed808f7259e4f8359bcf8d6c0210d6
2019-05-06 15:30:45 +00:00
Aryeh Gregor
f7201e3b9b Convert WatchedItem and friends to UserIdentity
I wasn't able to port some places that rely on isAllowed, getOption, or
related methods.

This adds isRegistered() to UserIdentity, which works like
User::isLoggedIn() but with a better name.

I also cleaned up User mocks in WatchedItemQueryServiceUnitTest in the
course of debugging test failures when switching them to
UserIdentityValue instead of mock Users where possible. They now specify
explicitly which methods are allowed to be called on their User objects,
which I believe is good practice for mocks (and unfortunately PHPUnit
makes it awkward).

Bug: T207972
Depends-On: I883d506197a011fe4c102b72df4d9deb58ab5ca2
Change-Id: Iadbf7bc31a496899dbef44e49065ff89f37aea89
2019-05-05 14:35:52 +03:00
Umherirrender
c6fe2baea9 Mock IDatabase::class instead of Database::class
Change-Id: I960bfdd5c9738c201a1be3ccaae05efc3d176ea8
2019-05-02 15:28:41 +00:00
Aryeh Gregor
7b4489e019 Get rid of unnecessary func_get_args() and friends
HHVM does not support variadic arguments with type hints.  This is
mostly not a big problem, because we can just drop the type hint, but
for some reason PHPUnit adds a type hint of "array" when it creates
mocks, so a class with a variadic method can't be mocked (at least in
some cases).  As such, I left alone all the classes that seem like
someone might like to mock them, like Title and User.  If anyone wants
to mock them in the future, they'll have to switch back to
func_get_args().  Some of the changes are definitely safe, like
functions and test classes.

In most cases, func_get_args() (and/or func_get_arg(), func_num_args() )
were only present because the code was written before we required PHP
5.6, and writing them as variadic functions is strictly superior. In
some cases I left them alone, aside from HHVM compatibility:

* Forwarding all arguments to another function. It's useful to keep
  func_get_args() here where we want to keep the list of expected
  arguments and their meanings in the function signature line for
  documentation purposes, but don't want to copy-paste a long line of
  argument names.
* Handling deprecated calling conventions.
* One or two miscellaneous cases where we're basically using the
  arguments individually but want to use them as an array as well for
  some reason.

Change-Id: I066ec95a7beb7c0665146195a08e7cce1222c788
2019-04-12 20:17:01 +00:00
Roan Kattouw
1da7573bb7 WatchedItemStore: Use batching in setNotificationTimestampsForUser
Update rows in batches, using the same logic as is used by
removeWatchBatchForUser().

Also remove the functionality for updating all rows, and move that to
resetAllNotificationTimestampsForUser() instead. To that end, add a
timestamp parameter to that method and to the job it uses, and make
setNotificationTimestampsForUser() behave like a backwards-compatibility
wrapper around resetAllNotificationTimestampsForUser() when no list of
titles is specified.

Bug: T207941
Change-Id: I58342257395de6fcfb4c392b3945b12883ca1680
Follows-Up: I2008ff89c95fe6f66a3fd789d2cef0e8fe52bd93
2019-03-21 04:41:42 +00:00
Aaron Schulz
588a464682 Fix WatchedItemStore last-seen stashing logic
This should be the "last revision seen" timestamp, which is
different than the "first revision not seen" timestamp in the DB.

Also make sure that SpecialWatchlist accounts for the stash values.

Relatedly, better document the callback usage in BagOStuff::merge().

Change-Id: I98b03a5cd40fec5b4a2633d499ff77079d264e3c
2019-03-14 14:52:29 -07:00
jenkins-bot
c2cedf71ee Merge "Stash WatchedItem changes so that the jobs run from the queue" 2019-03-06 21:18:00 +00:00
Aaron Schulz
cb15755e92 Normalize use of "INNER JOIN" to "JOIN" in database queries
The ANSI SQL default join type is INNER and this might save
some line breaks here and there.

Change-Id: Ibd39976f46ca3f9b71190d3b60b76ca085787a00
2019-03-06 09:17:30 -08:00
Aaron Schulz
7c12727fff Stash WatchedItem changes so that the jobs run from the queue
Previously, the jobs ran at post-send instead of via runners.
The stash is still written to immediately and will quickly
replicate to all datacenters. Since the stash and DB data is
merged on access, users should still almost always see their
changes on the next request. There is still the small chance
of unusually high latency at the in-memory stash layer, which
should be rare.

Also inject the JobQueueGroup into the store instance instead
of adding more singleton references.

Bug: T188801
Change-Id: Ic1c2b5a3592469b5b8386012a9c3365fdcf5b8e1
2019-02-28 09:46:00 -08:00
Kosta Harlan
05b490bc4a Watchlist: Commit after each batch watchlist insertion and removal
With this change, adding large numbers (500+) of items to one's Watchlist via
Special:EditWatchlist/raw will no longer trigger DBPerformance warnings
for "max affected rows expectation not met". The same code mechanism is added
for bulk removal of watchlist items.

Bug: T171898
Depends-On: Ia0f496b8bfb2b68217d0f45f892045538494bfdc
Change-Id: I832b1843d1341b05227cdee2549bdcefa21eb300
2018-10-18 14:33:50 -04:00
Umherirrender
98c37e1549 Pass LBFactory to WatchedItemStore
Instead of passing the LoadBalancer and than get the LBFactory from the
service,
store the LBFactory on creation

Bug: T206601
Change-Id: I4c0d3712da591b2c5ddf2a65855d2cc9142417d2
2018-10-12 12:25:28 +00:00
Umherirrender
a4caa4d0c6 build: Updating mediawiki/mediawiki-codesniffer to 22.0.0
Added spaces around .
Removed empty return statement which are not required
Removed return after phpunit markTestIncomplete,
which is throwing to exit the test, no need for a return

Change-Id: I2c80b965ee52ba09949e70ea9e7adfc58a1d89ce
2018-09-16 15:51:11 +00:00
Amir Sarabadani
6a2cd1c5c2 Use constants for rc_patrolled values instead of numbers
These are recently introduced, better to use them

Change-Id: Id904ff09081cb5a1fe2f1c24c5d415da18fd2294
2018-04-13 23:56:35 +02:00
Kunal Mehta
bfe88fd8f9 Make WatchedItemStoreUnitTest compatible with PHPUnit 6
A few tests were mocking the wrong object due to a typo, so have those
mock the correct object, and update the tests to reflect reality.

Change-Id: Ifd1e4ae8a98124b9055ec4023382305f743f9b43
2018-04-12 21:00:55 +00: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
addshore
6cf900ffb0 Add clearWatchedItems to WatchedItemStore
Change-Id: I67d1057c76ddccece4727f4df701a3ad14c3bbaa
2018-02-09 11:38:47 -08:00
addshore
d9c25c2f47 DI for CommentStore in WatchedItemQueryService
Change-Id: I93d9ed5f66297da7009d5b99aa9ed48e1b10582f
2018-02-06 16:50:16 +00:00
addshore
e5879da149 Pass $key into CommentStore methods and use MediawikiServices
This allows CommentStore to be added to MediaWikiServices
without the need of an aditional Factory.

This change includes a compatability layer to allow the behaviour
from 1.30 to continue to be used while deprecated.

CommentStore::newKey has been deprecated.
Keys are now passed into the public methods of CommentStore
where needed.
The following CommentStore methods have had their signatures changed
to introduced a $key parameter, but when used in conjunction with
CommentStore::newKey behaviour will remain unchanged:
  * CommentStore::getFields
  * CommentStore::getJoin
  * CommentStore::getComment
  * CommentStore::getCommentLegacy
  * CommentStore::insert
  * CommentStore::insertWithTemplate

Change-Id: I3abb62a5cfb0dcd456da9f4eb35583476ae41cfb
2018-02-05 15:34:12 +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
addshore
1ff58fc746 Add switch for readonly watchlists
Bug: T160062
Change-Id: I70d28df48f86e8cae4e454cf3f9097c65dc1d92b
2018-01-04 11:47:49 +00:00
Kunal Mehta
75160bdd3b Use MediaWikiCoversValidator for tests that don't use MediaWikiTestCase
Change-Id: I8c4de7e9c72c9969088666007b54c6fd23f6cc13
2018-01-01 08:28:02 +00:00
Reedy
958711a4df Remove WatchedItem constants and methods deprecated in REL1_27
Remove associated tests

Bug: T182381
Change-Id: I0214250a7cb81518074a14e35590370b13d4ba64
2017-12-15 04:53:59 +00:00
addshore
f53e975b34 WatchedItemStoreUnitTest return strings in db mocks
Change-Id: Ib74acd0e2e3a9fd94ca1b9bc06529852f770d0d1
2017-11-30 17:22:08 +01:00
addshore
0000ea39a0 Move watcheditem classes to watcheditem directory
Change-Id: If915c875380b4ecd74fad64df7833de87ea6d6f7
2017-11-09 16:16:48 +00:00