assertInstanceOf( Database::class, new Database( 5 ) ); } private function getDummyLintErrors() { return [ new LintError( 'fostered', [ 0, 10 ], [] ), new LintError( 'obsolete-tag', [ 15, 20 ], [ 'name' => 'big' ] ), ]; } private function assertSetForPageResult( $result, $deleted, $added ) { $this->assertArrayHasKey( 'deleted', $result ); $this->assertEquals( $deleted, $result['deleted'] ); $this->assertArrayHasKey( 'added', $result ); $this->assertEquals( $added, $result['added'] ); } private function assertLintErrorsEqual( $expected, $actual ) { $expectedIds = array_map( function ( LintError $error ) { return $error->id(); }, $expected ); $actualIds = array_map( function ( LintError $error ) { return $error->id(); }, $actual ); $this->assertArrayEquals( $expectedIds, $actualIds ); } public function testSetForPage() { $lintDb = new Database( 5 ); $dummyErrors = $this->getDummyLintErrors(); $result = $lintDb->setForPage( $dummyErrors ); $this->assertSetForPageResult( $result, [], [ 'fostered' => 1, 'obsolete-tag' => 1 ] ); $this->assertLintErrorsEqual( $dummyErrors, $lintDb->getForPage() ); // Should delete the second error $result2 = $lintDb->setForPage( [ $dummyErrors[0] ] ); $this->assertSetForPageResult( $result2, [ 'obsolete-tag' => 1 ], [] ); $this->assertLintErrorsEqual( [ $dummyErrors[0] ], $lintDb->getForPage() ); // Insert the second error, delete the first $result3 = $lintDb->setForPage( [ $dummyErrors[1] ] ); $this->assertSetForPageResult( $result3, [ 'fostered' => 1 ], [ 'obsolete-tag' => 1 ] ); $this->assertLintErrorsEqual( [ $dummyErrors[1] ], $lintDb->getForPage() ); // Delete the second (only) error $result4 = $lintDb->setForPage( [] ); $this->assertSetForPageResult( $result4, [ 'obsolete-tag' => 1 ], [] ); $this->assertLintErrorsEqual( [], $lintDb->getForPage() ); } }