Rector: PHPUnit 8 rector fail on assertArraySubset()

Created on 7 Nov 2019  路  6Comments  路  Source: rectorphp/rector

| Subject | Details |
| :------------- | :----------------------------------------------------------- |
| Rector version | v0.5.21 |
| PHP version | PHP 7.3 |
| Full Command | vendor/bin/rector process --set phpunit80 tests/ |

Current Behavior

        $this->assertArraySubset([
            static::KEY_RESPONSE_BAD_REQUEST => static::VALUE_RESPONSE_BAD_REQUEST,
            static::KEY_RESPONSE_NOT_FOUND => static::VALUE_RESPONSE_NOT_FOUND,
        ], $parameters->getGetResourceById()->getResponses());
        $this->assertNotEmpty($parameters->getPost()->getResponseAttributesClassName());
        $this->assertEquals(static::ALTERNATIVE_RESPONSE_CLASS, $parameters->getPost()->getResponseAttributesClassName());
        $this->assertArraySubset([
            static::KEY_RESPONSE_BAD_REQUEST => static::VALUE_RESPONSE_BAD_REQUEST,
        ], $parameters->getPost()->getResponses());

gets wrongly fixed to

        $this->assertArrayHasKey(static::KEY_RESPONSE_BAD_REQUEST, $parameters->getGetResourceById()->getResponses());
        $this->assertArrayHasKey(static::KEY_RESPONSE_NOT_FOUND, $parameters->getGetResourceById()->getResponses());
        $this->assertSame(static::VALUE_RESPONSE_BAD_REQUEST, $parameters->getGetResourceById()->getResponses()['static::KEY_RESPONSE_BAD_REQUEST']);
        $this->assertSame(static::VALUE_RESPONSE_NOT_FOUND, $parameters->getGetResourceById()->getResponses()['static::KEY_RESPONSE_NOT_FOUND']);
        $this->assertNotEmpty($parameters->getPost()->getResponseAttributesClassName());
        $this->assertEquals(static::ALTERNATIVE_RESPONSE_CLASS, $parameters->getPost()->getResponseAttributesClassName());
        $this->assertArrayHasKey(static::KEY_RESPONSE_BAD_REQUEST, $parameters->getPost()->getResponses());
        $this->assertSame(static::VALUE_RESPONSE_BAD_REQUEST, $parameters->getPost()->getResponses()['static::KEY_RESPONSE_BAD_REQUEST']);

[PHPUnitFrameworkException] Undefined index: static::KEY_RESPONSE_BAD_REQUEST

Expected Behavior

The string 'static::KEY_RESPONSE_BAD_REQUEST' should be proper const access
static::KEY_RESPONSE_BAD_REQUEST to function and not introduce fail

bug

All 6 comments

The string 'static::KEY_RESPONSE_BAD_REQUEST' should be proper const access

Could you put that into one line, in diff format? The snippet is hard to read for me

@@ -79,15 +79,14 @@ public function testGetResourceParametersFromPluginWillReturnCorrectParameters()
         $this->assertNotEmpty($parameters->getGetResourceById()->getParameters());
         $this->assertEquals(static::HEADER_ACCEPT_LANGUAGE, $parameters->getGetResourceById()->getParameters()[0]->getName());
         $this->assertNotEmpty($parameters->getGetResourceById()->getResponses());
-        $this->assertArraySubset([
-            static::KEY_RESPONSE_BAD_REQUEST => static::VALUE_RESPONSE_BAD_REQUEST,
-            static::KEY_RESPONSE_NOT_FOUND => static::VALUE_RESPONSE_NOT_FOUND,
-        ], $parameters->getGetResourceById()->getResponses());
+        $this->assertArrayHasKey(static::KEY_RESPONSE_BAD_REQUEST, $parameters->getGetResourceById()->getResponses());
+        $this->assertArrayHasKey(static::KEY_RESPONSE_NOT_FOUND, $parameters->getGetResourceById()->getResponses());
+        $this->assertSame(static::VALUE_RESPONSE_BAD_REQUEST, $parameters->getGetResourceById()->getResponses()['static::KEY_RESPONSE_BAD_REQUEST']);
+        $this->assertSame(static::VALUE_RESPONSE_NOT_FOUND, $parameters->getGetResourceById()->getResponses()['static::KEY_RESPONSE_NOT_FOUND']);
         $this->assertNotEmpty($parameters->getPost()->getResponseAttributesClassName());
         $this->assertEquals(static::ALTERNATIVE_RESPONSE_CLASS, $parameters->getPost()->getResponseAttributesClassName());
-        $this->assertArraySubset([
-            static::KEY_RESPONSE_BAD_REQUEST => static::VALUE_RESPONSE_BAD_REQUEST,
-        ], $parameters->getPost()->getResponses());
+        $this->assertArrayHasKey(static::KEY_RESPONSE_BAD_REQUEST, $parameters->getPost()->getResponses());
+        $this->assertSame(static::VALUE_RESPONSE_BAD_REQUEST, $parameters->getPost()->getResponses()['static::KEY_RESPONSE_BAD_REQUEST']);
     }

Just 1 line with generic code to show the problem would be better. E.g.

-$this->assertArraySubset(['A' => 'B', $items);
+$this->assertArrayHasKey('A', $items);

What is expected?

I am sure this is specific to the static::CLASS_CONST usage (here static::KEY_RESPONSE_BAD_REQUEST).

BROKEN

@@ -79,15 +79,14 @@
-        $this->assertArraySubset([
-            static::KEY_RESPONSE_BAD_REQUEST => static::VALUE_RESPONSE_BAD_REQUEST,
-        ], $parameters->getPost()->getResponses());
+        $this->assertArrayHasKey(static::KEY_RESPONSE_BAD_REQUEST, $parameters->getPost()->getResponses());
+        $this->assertSame(static::VALUE_RESPONSE_BAD_REQUEST, $parameters->getPost()->getResponses()['static::KEY_RESPONSE_BAD_REQUEST']);
     }

CORRECT would be

@@ -79,15 +79,14 @@
-        $this->assertArraySubset([
-            static::KEY_RESPONSE_BAD_REQUEST => static::VALUE_RESPONSE_BAD_REQUEST,
-        ], $parameters->getPost()->getResponses());
+        $this->assertArrayHasKey(static::KEY_RESPONSE_BAD_REQUEST, $parameters->getPost()->getResponses());
+        $this->assertSame(static::VALUE_RESPONSE_BAD_REQUEST, $parameters->getPost()->getResponses()[static::KEY_RESPONSE_BAD_REQUEST]);
     }

Great, that's more clear to me :+1:

Fixed :+1: , thanks for reporting

Was this page helpful?
0 / 5 - 0 ratings