l10n = $this->getMockBuilder(IL10N::class) ->disableOriginalConstructor()->getMock(); $this->l10n->expects($this->any()) ->method('t') ->willReturnCallback(function ($message, array $replace) { return vsprintf($message, $replace); }); $this->urlGenerator = $this->createMock(IURLGenerator::class); $this->checker = $this->createMock(Checker::class); } public function testSkipOnDisabled(): void { $this->checker->expects($this->atLeastOnce()) ->method('isCodeCheckEnforced') ->willReturn(false); $check = new CodeIntegrity( $this->l10n, $this->urlGenerator, $this->checker, ); $this->assertEquals(SetupResult::INFO, $check->run()->getSeverity()); } public function testSuccessOnEmptyResults(): void { $this->checker->expects($this->atLeastOnce()) ->method('isCodeCheckEnforced') ->willReturn(true); $this->checker->expects($this->atLeastOnce()) ->method('getResults') ->willReturn([]); $this->checker->expects(($this->atLeastOnce())) ->method('hasPassedCheck') ->willReturn(true); $check = new CodeIntegrity( $this->l10n, $this->urlGenerator, $this->checker, ); $this->assertEquals(SetupResult::SUCCESS, $check->run()->getSeverity()); } public function testCheckerIsReRunWithoutResults(): void { $this->checker->expects($this->atLeastOnce()) ->method('isCodeCheckEnforced') ->willReturn(true); $this->checker->expects($this->atLeastOnce()) ->method('getResults') ->willReturn(null); $this->checker->expects(($this->atLeastOnce())) ->method('hasPassedCheck') ->willReturn(true); // This is important and must be called $this->checker->expects($this->once()) ->method('runInstanceVerification'); $check = new CodeIntegrity( $this->l10n, $this->urlGenerator, $this->checker, ); $this->assertEquals(SetupResult::SUCCESS, $check->run()->getSeverity()); } public function testCheckerIsNotReReInAdvance(): void { $this->checker->expects($this->atLeastOnce()) ->method('isCodeCheckEnforced') ->willReturn(true); $this->checker->expects($this->atLeastOnce()) ->method('getResults') ->willReturn(['mocked']); $this->checker->expects(($this->atLeastOnce())) ->method('hasPassedCheck') ->willReturn(true); // There are results thus this must never be called $this->checker->expects($this->never()) ->method('runInstanceVerification'); $check = new CodeIntegrity( $this->l10n, $this->urlGenerator, $this->checker, ); $this->assertEquals(SetupResult::SUCCESS, $check->run()->getSeverity()); } public function testErrorOnMissingIntegrity(): void { $this->checker->expects($this->atLeastOnce()) ->method('isCodeCheckEnforced') ->willReturn(true); $this->checker->expects($this->atLeastOnce()) ->method('getResults') ->willReturn(['mocked']); $this->checker->expects(($this->atLeastOnce())) ->method('hasPassedCheck') ->willReturn(false); $check = new CodeIntegrity( $this->l10n, $this->urlGenerator, $this->checker, ); $this->assertEquals(SetupResult::ERROR, $check->run()->getSeverity()); } }