[ null, true ], 'empty' => [ '', true ], 'ipv4' => [ '10.0.0.1', true ], 'ipv6' => [ '2001:db8:1::', true ], ]; } /** * Test that constructing a RateLimitSubject with different IPs and then fetching properties through getters * returns the values passed to the constructor. * @dataProvider provideIp */ public function testConstructorAndGetters( $ip, $expected ) { $actor = new UserIdentityValue( 12, 'Test' ); $flags = [ 'foo' => true, 'bar' => false ]; $subject = new RateLimitSubject( $actor, $ip, $flags ); $this->assertInstanceOf( RateLimitSubject::class, $subject ); $this->assertSame( $actor, $subject->getUser(), 'The getUser method did not return the expected actor.' ); $this->assertSame( $expected ? $ip : null, $subject->getIp(), 'The getIp method did not return the expected IP.' ); $this->assertTrue( $subject->is( 'foo' ), 'The is method did not return true for flag "foo".' ); $this->assertFalse( $subject->is( 'bar' ), 'The is method did not return false for flag "bar".' ); $this->assertFalse( $subject->is( 'baz' ), 'The is method returned true for an undefined flag "baz", expected false.' ); } }