null //Test both normal name and constants $this->assertNull( $embed->getPermissionValue(PermissionsEmbed::PARTS, 0)); $this->assertEquals(null, $embed->getPermissionValue(PermissionsEmbed::CONFIG, 0)); $this->assertEquals(null, $embed->getPermissionValue(PermissionsEmbed::ATTACHMENT_TYPES, 0)); $this->assertEquals(null, $embed->getPermissionValue(PermissionsEmbed::CATEGORIES, 0)); $this->assertEquals(null, $embed->getPermissionValue(PermissionsEmbed::DATABASE, 0)); $this->assertEquals(null, $embed->getPermissionValue(PermissionsEmbed::DEVICE_PARTS, 0)); $this->assertEquals(null, $embed->getPermissionValue(PermissionsEmbed::DEVICES, 0)); $this->assertEquals(null, $embed->getPermissionValue(PermissionsEmbed::FOOTRPINTS, 0)); $this->assertEquals(null, $embed->getPermissionValue(PermissionsEmbed::GROUPS, 0)); $this->assertEquals(null, $embed->getPermissionValue(PermissionsEmbed::DATABASE, 0)); $this->assertEquals(null, $embed->getPermissionValue(PermissionsEmbed::LABELS, 0)); $this->assertEquals(null, $embed->getPermissionValue(PermissionsEmbed::MANUFACTURERS, 0)); $this->assertEquals(null, $embed->getPermissionValue(PermissionsEmbed::PARTS_ATTACHMENTS, 0)); $this->assertEquals(null, $embed->getPermissionValue(PermissionsEmbed::PARTS_COMMENT, 0)); $this->assertEquals(null, $embed->getPermissionValue(PermissionsEmbed::PARTS_DESCRIPTION, 0)); $this->assertEquals(null, $embed->getPermissionValue(PermissionsEmbed::PARTS_FOOTPRINT, 0)); $this->assertEquals(null, $embed->getPermissionValue(PermissionsEmbed::PARTS_MANUFACTURER, 0)); $this->assertEquals(null, $embed->getPermissionValue(PermissionsEmbed::PARTS_MINAMOUNT, 0)); $this->assertEquals(null, $embed->getPermissionValue(PermissionsEmbed::PARTS_NAME, 0)); $this->assertEquals(null, $embed->getPermissionValue(PermissionsEmbed::PARTS_ORDER, 0)); $this->assertEquals(null, $embed->getPermissionValue(PermissionsEmbed::PARTS_ORDERDETAILS, 0)); $this->assertEquals(null, $embed->getPermissionValue(PermissionsEmbed::USERS, 0)); //Set a value for testing to the part property $reflection = new \ReflectionClass($embed); $property = $reflection->getProperty('parts'); $property->setAccessible(true); $property->setValue($embed, 0b11011000); // 11 01 10 00 //Test if function is working correctly $this->assertNull($embed->getPermissionValue(PermissionsEmbed::PARTS, 0)); $this->assertFalse($embed->getPermissionValue(PermissionsEmbed::PARTS, 2)); $this->assertTrue($embed->getPermissionValue(PermissionsEmbed::PARTS, 4)); // 11 is reserved, but it should be also treat as INHERIT. $this->assertNull($embed->getPermissionValue(PermissionsEmbed::PARTS, 6)); } public function testGetBitValue() { $embed = new PermissionsEmbed(); //Set a value for testing to the part property $reflection = new \ReflectionClass($embed); $property = $reflection->getProperty('parts'); $property->setAccessible(true); $property->setValue($embed, 0b11011000); // 11 01 10 00 //Test if function is working correctly $this->assertEquals(PermissionsEmbed::INHERIT ,$embed->getBitValue(PermissionsEmbed::PARTS, 0)); $this->assertEquals(PermissionsEmbed::DISALLOW ,$embed->getBitValue(PermissionsEmbed::PARTS, 2)); $this->assertEquals(PermissionsEmbed::ALLOW ,$embed->getBitValue(PermissionsEmbed::PARTS, 4)); // 11 is reserved, but it should be also treat as INHERIT. $this->assertEquals(0b11 ,$embed->getBitValue(PermissionsEmbed::PARTS, 6)); } public function testInvalidPermissionName() { $embed = new PermissionsEmbed(); //When encoutering an unknown permission name the class must throw an exception $this->expectException(\InvalidArgumentException::class); $embed->getPermissionValue('invalid', 0); } public function testInvalidBit1() { $embed = new PermissionsEmbed(); //When encoutering an negative bit the class must throw an exception $this->expectException(\InvalidArgumentException::class); $embed->getPermissionValue('parts', -1); } public function testInvalidBit2() { $embed = new PermissionsEmbed(); //When encoutering an odd bit number it must throw an error. $this->expectException(\InvalidArgumentException::class); $embed->getPermissionValue('parts', 1); } public function testInvalidBit3() { $embed = new PermissionsEmbed(); //When encoutering an too high bit number it must throw an error. $this->expectException(\InvalidArgumentException::class); $embed->getPermissionValue('parts', 32); } public function getStatesBINARY() { return [ 'ALLOW' => [PermissionsEmbed::ALLOW], 'DISALLOW' => [PermissionsEmbed::DISALLOW], 'INHERIT' => [PermissionsEmbed::INHERIT], '0b11' => [0b11] ]; } public function getStatesBOOL() { return [ 'ALLOW' => [true], 'DISALLOW' => [false], 'INHERIT' => [null], '0b11' => [null] ]; } /** * @dataProvider getStatesBINARY */ public function testsetBitValue($value) { $embed = new PermissionsEmbed(); //Check if it returns itself, for chaining. $this->assertEquals($embed, $embed->setBitValue(PermissionsEmbed::PARTS, 0, $value)); $this->assertEquals($value, $embed->getBitValue(PermissionsEmbed::PARTS, 0)); } /** * @dataProvider getStatesBOOL */ public function testSetPermissionValue($value) { $embed = new PermissionsEmbed(); //Check if it returns itself, for chaining. $this->assertEquals($embed, $embed->setPermissionValue(PermissionsEmbed::PARTS, 0, $value)); $this->assertEquals($value, $embed->getPermissionValue(PermissionsEmbed::PARTS, 0)); } }