aboutsummaryrefslogtreecommitdiffstats
path: root/tests/phpunit/includes/jobqueue/JobTest.php
Commit message (Collapse)AuthorAgeFilesLines
* Namespace all remaining files in includes/jobqueueJames D. Forrester2025-03-201-1/+6
| | | | | Bug: T353458 Change-Id: I95690a312e356c45dbeed607d32fb0e4626690cf
* Replace gettype() with get_debug_type() in debug/log/test outputBartosz Dziewoński2024-07-311-1/+1
| | | | | | | | | | | | | | | | | | | | | get_debug_type() does the same thing but better (spelling type names in the same way as in type declarations, and including names of object classes and resource types). It was added in PHP 8, but the symfony/polyfill-php80 package provides it while we still support 7.4. Also remove uses of get_class() and get_resource_type() where the new method already provides the same information. For reference: https://www.php.net/manual/en/function.get-debug-type.php https://www.php.net/manual/en/function.gettype.php In this commit I'm only changing code where it looks like the result is used only for some king of debug, log, or test output. This probably won't break anything important, but I'm not sure whether anything might depend on the exact values. Change-Id: I7c1f0a8f669228643e86f8e511c0e26a2edb2948
* Use MainConfigNames constants in tests where possiblethiemowmde2024-07-101-1/+1
| | | | | | | I believe this makes the code less brittle, and also makes it a bit more obvious what these strings are meant to represent. Change-Id: Ia39b5c80af4b495931d0a68fd091b783645dd709
* [ParsoidCachePrewarmJob] Use ParserOutputAccessC. Scott Ananian2024-06-171-1/+1
| | | | | | | | | | One more step in gradually replacing uses of ParsoidOutputAccess. This one was pretty easy, as ParsoidOutputAccess was pretty much directly calling ParserOutputAccess when provided with a ExistingPageRecord and RevisionRecord. Bug: T367074 Change-Id: I96161a64952e1809c0aec773d5a3dd4c71105657
* Move ParsoidOutputAccess::supportsContentModel() into Parsoid SiteConfigC. Scott Ananian2024-05-221-1/+2
| | | | | | | | | | The `supportsContentModel` method is really querying Parsoid for the set of content models it supports, so it makes sense to put it in the Parsoid-specific SiteConfig service. This is part of the work to deprecate and remove ParsoidOutputAccess. Change-Id: I81eb2df8cef93ede95361a4e03185b3d58e5b84b
* tests: Fix @covers and @coversDefaultClass to have leading \Reedy2024-02-161-1/+1
| | | | Change-Id: I5629f91387f2ac453ee4341bfe4bba310bd52f03
* Reorg: Move WebRequest to includes\RequestAmir Sarabadani2023-09-111-0/+1
| | | | | | | This has been approved as part of RFC T166010 Bug: T321882 Change-Id: I6bbdbbe6ea48cc1f50bc568bb8780fc7c5361a6f
* objectcache,resourceloader,rdbms,jobqueue: Widen @covers annotationsTimo Tijhof2023-04-101-19/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Follows-up I4c7d826c7ec654b, I1287f3979aba1bf1. We lose useful coverage and spend valuable time keeping these accurate through refactors (or worse, forget to do so). The theoretically "bad" accidental coverage is almost never actually bad. Having said that, I'm not removing them wholesale (yet). I've audited each of these specific files to confirm it is a general test of the specified subject class, and also kept it limited to those specified classes. That's imho more than 100% of the benefit for less than 1% of the cost (more because `@covers` is more valuable than the fragile and corrosive individual private method tracking in tests that inevitably get out of date with no local incentive to keep them up to date). Cases like structure tests keep `@coversNothing` etc and we still don't count coverage of other classes. There may be a handful of large legacy classes where some methods are effectively class-like in complexity and that's why it's good for PHPUnit to offer the precision instrument but that doesn't meant we have to use that by-default for everything. I think best practice is to write good narrow unit tests, that reflect how the code should be used in practice. Not to write bad tests and hide part of its coverage within the same class or even namespace. Fortunately, that's generally what we do already it's just that we also kept these annotations still in many cases. This wastes time to keep methods in sync, time to realize (and fix) when other people inevitably didn't keep them in sync, time to find uncovered code only to realize it is already covered, time for a less experienced engineer to feel obligate to and do write a low quality test to cover the "missing" branch in an unrealistic way, time wasted in on-boarding by using such "bad" tests as example for how to use the code and then having to unlearn it months/years later, loss of telemetry in knowing what code actually isn't propertly tested due to being masked by a bad test, and lost oppertunities to find actually ununused/unreachable code and to think about how to instead structure the code such that maybe that code can be removed. ------ Especially cases like LBFactoryTest.php were getting out of hand, and in GlobalIdGeneratorTest.php we even resorted to reminding people with inline comments to keep tags in sync. Change-Id: I69b5385868cc6b451e5f2ebec9539694968bf58c
* Reorg: Namespace the Title classJames D. Forrester2023-03-021-0/+1
| | | | | | | | | | | | | | | | | | | This is moderately messy. Process was principally: * xargs rg --files-with-matches '^use Title;' | grep 'php$' | \ xargs -P 1 -n 1 sed -i -z 's/use Title;/use MediaWiki\\Title\\Title;/1' * rg --files-without-match 'MediaWiki\\Title\\Title;' . | grep 'php$' | \ xargs rg --files-with-matches 'Title\b' | \ xargs -P 1 -n 1 sed -i -z 's/\nuse /\nuse MediaWiki\\Title\\Title;\nuse /1' * composer fix Then manual fix-ups for a few files that don't have any use statements. Bug: T166010 Follows-Up: Ia5d8cb759dc3bc9e9bbe217d0fb109e2f8c4101a Change-Id: If8fc9d0d95fc1a114021e282a706fc3e7da3524b
* Add dependency injection for Job classesdaniel2023-01-191-15/+29
| | | | | | | Introduces JobFactory Bug: T245900 Change-Id: I094cc9325e5eaf2717ae510ef988a72407195224
* tests: Set serialize_precision=-1 in TestSetupKevin Israel2022-12-141-2/+1
| | | | | | | | | | | | | | | | Starting in PHP 7.1, this is now the default[1][2], and results in the "shortest string that yields d when read in and rounded to nearest."[3] As such, it would generally be the best choice for tests. The existing value of 17 has been used only because it was the default at the time (October 2015, see commit 71443707ada05460), and -1 for "dtoa mode 0" simply was not an option yet. [1]: https://wiki.php.net/rfc/precise_float_value [2]: https://www.php.net/manual/en/migration71.other-changes.php#migration71.other-changes.ini-file-handling [3]: https://github.com/php/php-src/blob/php-8.1.13/Zend/zend_strtod.c#L3713-L3714 Change-Id: I95c3c36c90be5aa0af22c3c77ce67641b81786d7
* Miscellaneous PHP version related cleanupsTim Starling2022-11-211-4/+3
| | | | | | | | | | | | MediaWikiTitleCodec: I removed the comment about dbkey being "conveniently nullified" since that is no longer correct. The first preg_replace() can return null, and that is guarded. The second preg_replace() hopefully can't return null, because if it does, trim() will generate a deprecation notice on PHP 8.1. Some other self-explanatory changes. Change-Id: Iad0ace821eba782c3033ec8abfeac461ac4e8ace
* Revert "Reorg: Move some of request related classes to MediaWiki/Request"Zabe2022-10-271-1/+0
| | | | | | | | | This reverts commit 2bdc0b2b7209441a42a784157633a8a01b321922. Reason for revert: T166010#8349431 Bug: T166010 Change-Id: Idcd3025647aec99532f5d69b9c1718c531761283
* Reorg: Move some of request related classes to MediaWiki/RequestAmir Sarabadani2022-10-261-0/+1
| | | | | | | | | | | | | Moving: - DerivativeRequest - FauxRequest - FauxRequestUpload - PathRouter - WebRequest - WebRequestUpload Bug: T166010 Change-Id: I5ea70120d745f2876ae31d039f3f8a51e49e9ad8
* tests: don't assume wgLanguageCode is 'en'C. Scott Ananian2022-07-211-0/+3
| | | | Change-Id: Ic748489309a1c8ff0f916b3f55aacc93ca128ea3
* RefreshLinksJob: assert proper titledaniel2022-02-091-6/+6
| | | | | | | | | | | | If a RefreshLinksJob is created with an improper/invalid title, executing the job later will fail with a PageAssertionException while trying to create a WikiPage for that title. Better check the title when constructing the job, so the offending code is on the stack when it happens. Bug: T293291 Depends-On: I7dcfac0eacdd5b22bdf443e88f8e6ddb883b92cc Change-Id: I77a622591836873415f097453da01ca7e61c41be
* Replace PHPUnit ->returnValue() with ->willReturn() shortcutThiemo Kreuz2021-04-221-3/+2
| | | | | | | | | | | | It's the same and makes the test code much more readable, I would like to argue. Because of the was I split all the changes I made into smaller patches this patch contains some other changes in the same lines where I could not split them off. E.g. removal of ->any(), which is the default anyway and doesn't do anything. Change-Id: Ib297b989d4aec33b31a4e33fe9d5032865b39be0
* phpunit: Mass-replace setMethods with onlyMethods and adjustDaimona Eaytoy2021-04-161-1/+1
| | | | | | | | | | | | Ended up using grep -Prl '\->setMethods\(' . | xargs sed -r -i 's/setMethods\(/onlyMethods\(/g' special-casing setMethods( null ) -> onlyMethods( [] ) and then manual fix of failing test (from PS2 onwards). Bug: T278010 Change-Id: I012dca7ae774bb430c1c44d50991ba0b633353f1
* Tests: Mark more more closures as staticUmherirrender2021-02-091-1/+1
| | | | | | | Result of a new sniff I25a17fb22b6b669e817317a0f45051ae9c608208 Bug: T274036 Change-Id: I695873737167a75f0d94901fa40383a33984ca55
* Remove broken/outdated @param/@throws tags from @dataProvidersThiemo Kreuz2021-01-211-2/+0
| | | | | | | | | | | | | | | | My personal best practice is to not document @params when there is a @dataProvider. I mean, these test…() functions are not meant to be called from anywhere. They do not really need documentation. @param tags don't do much but duplicate what the @dataProvider does. This is error-prone, as demonstrated by the examples in this patch. This patch also removes @throws tags from tests. A test…() can never throw an exception. Otherwise the test would fail. Most of these are found by the not yet released I10559d8. Change-Id: I3782bca43f875687cd2be972144a7ab6b298454e
* MediaWikiTestCase to MediaWikiIntegrationTestCaseaddshore2020-06-301-1/+1
| | | | | | | | | | | | | The name change happened some time ago, and I think its about time to start using the name name! (Done with a find and replace) My personal motivation for doing this is that I have started trying out vscode as an IDE for mediawiki development, and right now it doesn't appear to handle php aliases very well or at all. Change-Id: I412235d91ae26e4c1c6a62e0dbb7e7cf3c5ed4a6
* Replace all `new stdClass()` with identical `(object)[]`Thiemo Kreuz2020-03-041-1/+1
| | | | | | | | | | | | This should be the exact same. Its more a style change than anything. So why do it then? * I believe this is much less confusing than code mentioning a weird "standard class". Barely anybody knows what this is, and what the difference between "object" and "stdClass" is. * The code is shorter. * It's even faster. In my micro benchmark it's twice as fast. Change-Id: I7ee0e8ae6d9264a89b6cd1dd861f0466ae620ccc
* Replace setExpectedException with two argsDaimona Eaytoy2019-10-051-1/+2
| | | | | | | | | | | Find: ^(\t*)(\$this->)setExpectedException\(\s+(\\?[a-z\\]+::class),\s+('(?:[^'\\]|\\')+'|"(?:[^"\\]|\\")+")\s+\); Replace: $1$2expectException( $3 );\n$1\$this->expectExceptionMessage( $4 ); +broke long lines manually. Bug: T192167 Change-Id: I5557b4372625def55a53ac637c2f980f51f12933
* jobqueue: Follow-up for fc5d51f12936ed (added GenericParameterJob)Timo Tijhof2019-04-251-11/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Remove duplicate $params check from Job::factory done in Job::__construct. * In Job::factory(), restore use of a valid title as default for passing as constructor arg to old job classes. Their constructor may expect it to be valid. Keep the invalid dummy in Job::__construct, and document why. * tests: Update test case for failure mode when using Job::factory with a class that requires a title. It asserted getting an invalid title. This now restores the behaviour prior to fc5d51f12936ed, which is that job classes that require a title, get a valid one. * tests: Remove test case for testToString that used an explicitly passed but invalid params value. I've converted that to expect the exception we now throw instead. * tests: Update getMockJob(), also used by testToString, which was relying on undocumented behaviour that 'new Title' is public and gets namespace=0 and title=''. Before fc5d51f12936ed, title params weren't in toString() and it asserted outputting three spaces (delimiter, empty string from formatted title, delimiter). In fc5d51f12936ed, this changed to asserting "Special:" which seems unintentional as we didn't pass it the internally reserved NS_SPECIAL/'' value, and yet was caught by the dbkey=='' check. Given this test case doesn't deal with titles, omit it for now. A job can either have a $title and title/namespace in params, or neither. This test was asserting an in-memory scenario where $title can be an object, but title/namespace absent from params. Bug: T221368 Depends-On: I89f6ad6967d6f82d87a62c15c0dded901c51b714 Change-Id: I2ec99a12ecc627359a2aae5153d5d7c54156ff46
* jobqueue: add GenericParameterJob and RunnableJob interfaceAaron Schulz2019-04-081-12/+94
| | | | | | | | | | Simplify the code of jobs that do not care about titles and removes the direct Title dependency from JobQueue. Remove getTitle() from IJobSpecification itself. Move all the Job::factory calls into a single JobQueue::factoryJob() method. Depends-on: Iee78f4baeca0c0b4d6db073f2fbcc56855114ab0 Change-Id: I9c9d0726d4066bb0aa937665847ad6042ade13ec
* Simplify strings in PHP codeFomafix2019-03-011-1/+1
| | | | Change-Id: I481810ade68b0c5a5be21d22e2a107646d5813e6
* Use ::class to resolve class names in testsUmherirrender2018-01-261-2/+2
| | | | | | | This helps to find renamed or misspelled classes earlier. Phan will check the class names Change-Id: Ie541a7baae10ab6f5c13f95ac2ff6598b8f8950c
* Fix additional usage of incorrect casemainframe982017-12-151-1/+1
| | | | | | | | Courtesy of the PhpStorm inspection Case mismatch in method call or class usage. Bug: T166759 Change-Id: I27c53658b99048fa0dd8f9d6ef1398620386e1cc
* Try to avoid bogus JobTest failures for PHP 7Aaron Schulz2017-12-021-2/+4
| | | | Change-Id: I07b4bd796a668fef83ebb3e2824ccc608781a6e8
* build: Prepare for mediawiki/mediawiki-codesniffer to 0.9.0Umherirrender2017-06-261-1/+1
| | | | | | | | | | | | 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
* Allow callback functions for creating jobsLucas Werkmeister2017-05-091-0/+37
| | | | | | | | | | | | $wgJobClasses can now specify a factory function for creating a job, instead of a class to be instantiated directly. This makes it possible to inject services in a job constructor, and register a factory function that calls the constructor with default services. This follows Ieb85493a7765 and Ia2107dc5af78, which introduced factory functions for API modules and special pages. Change-Id: I0461e59da2a8fa6681e3b1fcdfc38bfed7f3ac32
* phpunit: Avoid use of deprecated getMock for PHPUnit 5 compatTimo Tijhof2017-04-061-1/+2
| | | | | | | | | | | | | | | | | | | | | | 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
* Track which web request created a jobErik Bernhardson2016-04-131-8/+11
| | | | | | | | | | | | | | | We currently push a request id into structured logging (monolog/ logstash) to allow seeing all logs that were triggered by the same request. This extends that to pass the id through jobs so jobs triggered by a web request also share the same id and can be tracked together. This web request id will follow jobs both directly created by a request, and jobs created by those jobs. This should give us some more visibility when debugging into what started a particular job, and if a large number of jobs blowing up the job queue are somehow related. Change-Id: Iedbd031e6e9bb18fd6f7b923c8c305102255ab4b
* Make Job::toString() handle array parameters betterAaron Schulz2016-03-161-0/+23
| | | | | | Previously it would result in array(x) in fairly simple cases. Change-Id: I6bfe67faa45835babb2c7e259b5cd158e0f0a649
* Convert all array() syntax to []Kunal Mehta2016-02-171-24/+24
| | | | | | | | | | Per wikitech-l consensus: https://lists.wikimedia.org/pipermail/wikitech-l/2016-February/084821.html Notes: * Disabled CallTimePassByReference due to false positives (T127163) Change-Id: I2c8ce713ce6600a0bb7bf67537c87044c7a45c4b
* Switch name to username in @author tagsaddshore2016-01-271-1/+1
| | | | | | | From now on I will simply use addshore everywhere to keep things uniform... Change-Id: Iaf441b2d7a67a12c20529f0e9c7b47819f4abfae
* Add tests for Job::toStringaddshore2014-09-231-0/+67
Change-Id: I00f41808af42a198a1e45a93201dd7bb3e4d9c2c