From d9860abd79a073e836a08758db663f5942177391 Mon Sep 17 00:00:00 2001 From: Hemachandar Date: Wed, 26 Nov 2025 16:47:10 +0530 Subject: [PATCH 1/4] Disallow assertEquals through phpstan --- composer.json | 2 +- composer.lock | 35 ++++++++++--------- phpstan.neon | 5 +++ src/phpstan/DisallowAssertEqualsExtension.php | 30 ++++++++++++++++ 4 files changed, 54 insertions(+), 18 deletions(-) create mode 100644 src/phpstan/DisallowAssertEqualsExtension.php diff --git a/composer.json b/composer.json index d32571c..5299d9a 100644 --- a/composer.json +++ b/composer.json @@ -26,6 +26,6 @@ "require-dev": { "phpunit/phpunit": "11.*", "laravel/pint": "1.*", - "phpstan/phpstan": "1.*" + "phpstan/phpstan": "2.*" } } diff --git a/composer.lock b/composer.lock index 75e7653..421ca5a 100644 --- a/composer.lock +++ b/composer.lock @@ -4,21 +4,21 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "b7e064e60d9c1bc56fb4d09cdbb3a5c7", + "content-hash": "ec4cad7b4bc55b3c78d02d8653dc4b1f", "packages": [], "packages-dev": [ { "name": "laravel/pint", - "version": "v1.25.1", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/laravel/pint.git", - "reference": "5016e263f95d97670d71b9a987bd8996ade6d8d9" + "reference": "69dcca060ecb15e4b564af63d1f642c81a241d6f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/pint/zipball/5016e263f95d97670d71b9a987bd8996ade6d8d9", - "reference": "5016e263f95d97670d71b9a987bd8996ade6d8d9", + "url": "https://api.github.com/repos/laravel/pint/zipball/69dcca060ecb15e4b564af63d1f642c81a241d6f", + "reference": "69dcca060ecb15e4b564af63d1f642c81a241d6f", "shasum": "" }, "require": { @@ -29,13 +29,13 @@ "php": "^8.2.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^3.87.2", - "illuminate/view": "^11.46.0", - "larastan/larastan": "^3.7.1", - "laravel-zero/framework": "^11.45.0", + "friendsofphp/php-cs-fixer": "^3.90.0", + "illuminate/view": "^12.40.1", + "larastan/larastan": "^3.8.0", + "laravel-zero/framework": "^12.0.4", "mockery/mockery": "^1.6.12", - "nunomaduro/termwind": "^2.3.1", - "pestphp/pest": "^2.36.0" + "nunomaduro/termwind": "^2.3.3", + "pestphp/pest": "^3.8.4" }, "bin": [ "builds/pint" @@ -61,6 +61,7 @@ "description": "An opinionated code formatter for PHP.", "homepage": "https://laravel.com", "keywords": [ + "dev", "format", "formatter", "lint", @@ -71,7 +72,7 @@ "issues": "https://github.com/laravel/pint/issues", "source": "https://github.com/laravel/pint" }, - "time": "2025-09-19T02:57:12+00:00" + "time": "2025-11-25T21:15:52+00:00" }, { "name": "myclabs/deep-copy", @@ -311,15 +312,15 @@ }, { "name": "phpstan/phpstan", - "version": "1.12.32", + "version": "2.1.32", "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/2770dcdf5078d0b0d53f94317e06affe88419aa8", - "reference": "2770dcdf5078d0b0d53f94317e06affe88419aa8", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e126cad1e30a99b137b8ed75a85a676450ebb227", + "reference": "e126cad1e30a99b137b8ed75a85a676450ebb227", "shasum": "" }, "require": { - "php": "^7.2|^8.0" + "php": "^7.4|^8.0" }, "conflict": { "phpstan/phpstan-shim": "*" @@ -360,7 +361,7 @@ "type": "github" } ], - "time": "2025-09-30T10:16:31+00:00" + "time": "2025-11-11T15:18:17+00:00" }, { "name": "phpunit/php-code-coverage", diff --git a/phpstan.neon b/phpstan.neon index 46b0f47..18363ef 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -3,3 +3,8 @@ parameters: paths: - src - tests +services: + - + class: Utopia\PHPStan\DisallowAssertEqualsExtension + tags: + - phpstan.restrictedMethodUsageExtension \ No newline at end of file diff --git a/src/phpstan/DisallowAssertEqualsExtension.php b/src/phpstan/DisallowAssertEqualsExtension.php new file mode 100644 index 0000000..5a06252 --- /dev/null +++ b/src/phpstan/DisallowAssertEqualsExtension.php @@ -0,0 +1,30 @@ +getName() !== 'assertEquals') { + return null; + } + + $declaringClass = $methodReflection->getDeclaringClass(); + if ($declaringClass->getName() !== 'PHPUnit\Framework\Assert') { + return null; + } + + return RestrictedUsage::create( + errorMessage: 'Use assertSame() instead of assertEquals()', + identifier: 'method.disallowedAssertEquals', + ); + } +} \ No newline at end of file From 71833b5d122240566744f2a1c178bd3df67141b2 Mon Sep 17 00:00:00 2001 From: Hemachandar Date: Wed, 26 Nov 2025 17:12:32 +0530 Subject: [PATCH 2/4] use assertSame --- tests/Validator/ArrayListTest.php | 10 +- tests/Validator/AssocTest.php | 2 +- tests/Validator/BooleanTest.php | 4 +- tests/Validator/DomainTest.php | 180 ++++++++++++------------- tests/Validator/FloatValidatorTest.php | 4 +- tests/Validator/HexColorTest.php | 2 +- tests/Validator/HostTest.php | 20 +-- tests/Validator/HostnameTest.php | 2 +- tests/Validator/IPTest.php | 58 ++++---- tests/Validator/IntegerTest.php | 4 +- tests/Validator/JSONTest.php | 2 +- tests/Validator/MultipleOfTest.php | 8 +- tests/Validator/NumericTest.php | 2 +- tests/Validator/RangeTest.php | 16 +-- tests/Validator/TextTest.php | 2 +- tests/Validator/URLTest.php | 28 ++-- tests/Validator/WhiteListTest.php | 8 +- tests/Validator/WildcardTest.php | 2 +- 18 files changed, 177 insertions(+), 177 deletions(-) diff --git a/tests/Validator/ArrayListTest.php b/tests/Validator/ArrayListTest.php index 3f07915..1fca894 100755 --- a/tests/Validator/ArrayListTest.php +++ b/tests/Validator/ArrayListTest.php @@ -10,11 +10,11 @@ public function testDescription(): void { $arrayList = new ArrayList(new Integer()); $this->assertFalse($arrayList->isValid(['text'])); - $this->assertEquals('Value must a valid array and Value must be a valid integer', $arrayList->getDescription()); + $this->assertSame('Value must a valid array and Value must be a valid integer', $arrayList->getDescription()); $arrayList = new ArrayList(new Integer(), 3); $this->assertFalse($arrayList->isValid(['a', 'b', 'c', 'd'])); - $this->assertEquals('Value must a valid array no longer than 3 items and Value must be a valid integer', $arrayList->getDescription()); + $this->assertSame('Value must a valid array no longer than 3 items and Value must be a valid integer', $arrayList->getDescription()); } public function testCanValidateTextValues(): void @@ -26,7 +26,7 @@ public function testCanValidateTextValues(): void $this->assertFalse($arrayList->isValid(['string', 'string', 3])); $this->assertFalse($arrayList->isValid('string')); $this->assertFalse($arrayList->isValid('string')); - $this->assertEquals(\Utopia\Validator::TYPE_STRING, $arrayList->getType()); + $this->assertSame(\Utopia\Validator::TYPE_STRING, $arrayList->getType()); $this->assertInstanceOf(Text::class, $arrayList->getValidator()); } @@ -36,7 +36,7 @@ public function testCanValidateNumericValues(): void $this->assertTrue($arrayList->isValid([1, 2, 3])); $this->assertFalse($arrayList->isValid(1)); $this->assertFalse($arrayList->isValid('string')); - $this->assertEquals(\Utopia\Validator::TYPE_MIXED, $arrayList->getType()); + $this->assertSame(\Utopia\Validator::TYPE_MIXED, $arrayList->getType()); $this->assertInstanceOf(Numeric::class, $arrayList->getValidator()); } @@ -46,7 +46,7 @@ public function testCanValidateNumericValuesWithBoundaries(): void $this->assertTrue($arrayList->isValid([1])); $this->assertTrue($arrayList->isValid([1, 2])); $this->assertFalse($arrayList->isValid([1, 2, 3])); - $this->assertEquals($arrayList->getType(), \Utopia\Validator::TYPE_MIXED); + $this->assertSame($arrayList->getType(), \Utopia\Validator::TYPE_MIXED); $this->assertInstanceOf(Numeric::class, $arrayList->getValidator()); } } diff --git a/tests/Validator/AssocTest.php b/tests/Validator/AssocTest.php index 8bf1c96..a443d48 100755 --- a/tests/Validator/AssocTest.php +++ b/tests/Validator/AssocTest.php @@ -25,7 +25,7 @@ public function testCanValidateAssocArray(): void $this->assertTrue($this->assoc->isValid([])); $this->assertTrue($this->assoc->isValid(['value' => str_repeat('-', 62000)])); $this->assertTrue($this->assoc->isArray()); - $this->assertEquals(\Utopia\Validator::TYPE_ARRAY, $this->assoc->getType()); + $this->assertSame(\Utopia\Validator::TYPE_ARRAY, $this->assoc->getType()); } public function testCantValidateSequentialArray(): void diff --git a/tests/Validator/BooleanTest.php b/tests/Validator/BooleanTest.php index b174291..288862b 100755 --- a/tests/Validator/BooleanTest.php +++ b/tests/Validator/BooleanTest.php @@ -22,7 +22,7 @@ public function testCanValidateStrictly() $this->assertFalse($boolean->isValid('string')); $this->assertFalse($boolean->isValid(1.2)); $this->assertFalse($boolean->isArray()); - $this->assertEquals($boolean->getType(), \Utopia\Validator::TYPE_BOOLEAN); + $this->assertSame($boolean->getType(), \Utopia\Validator::TYPE_BOOLEAN); } public function testCanValidateLoosely() @@ -41,6 +41,6 @@ public function testCanValidateLoosely() $this->assertFalse($boolean->isValid('string')); $this->assertFalse($boolean->isValid(1.2)); $this->assertFalse($boolean->isArray()); - $this->assertEquals(\Utopia\Validator::TYPE_BOOLEAN, $boolean->getType()); + $this->assertSame(\Utopia\Validator::TYPE_BOOLEAN, $boolean->getType()); } } diff --git a/tests/Validator/DomainTest.php b/tests/Validator/DomainTest.php index 8897b48..9ec30c8 100644 --- a/tests/Validator/DomainTest.php +++ b/tests/Validator/DomainTest.php @@ -28,34 +28,34 @@ public function setUp(): void public function testIsValid() { // Assertions - $this->assertEquals(true, $this->domain->isValid('example.com')); - $this->assertEquals(true, $this->domain->isValid('subdomain.example.com')); - $this->assertEquals(true, $this->domain->isValid('subdomain.example-app.com')); - $this->assertEquals(false, $this->domain->isValid('subdomain.example_app.com')); - $this->assertEquals(true, $this->domain->isValid('subdomain-new.example.com')); - $this->assertEquals(false, $this->domain->isValid('subdomain_new.example.com')); - $this->assertEquals(true, $this->domain->isValid('localhost')); - $this->assertEquals(true, $this->domain->isValid('example.io')); - $this->assertEquals(true, $this->domain->isValid('example.org')); - $this->assertEquals(true, $this->domain->isValid('example.org')); - $this->assertEquals(false, $this->domain->isValid(false)); - $this->assertEquals(false, $this->domain->isValid('api.appwrite.io.')); - $this->assertEquals(false, $this->domain->isValid('.api.appwrite.io')); - $this->assertEquals(false, $this->domain->isValid('.api.appwrite.io')); - $this->assertEquals(false, $this->domain->isValid('api..appwrite.io')); - $this->assertEquals(false, $this->domain->isValid('api-.appwrite.io')); - $this->assertEquals(false, $this->domain->isValid('api.-appwrite.io')); - $this->assertEquals(false, $this->domain->isValid('app write.io')); - $this->assertEquals(false, $this->domain->isValid(' appwrite.io')); - $this->assertEquals(false, $this->domain->isValid('appwrite.io ')); - $this->assertEquals(false, $this->domain->isValid('-appwrite.io')); - $this->assertEquals(false, $this->domain->isValid('appwrite.io-')); - $this->assertEquals(false, $this->domain->isValid('.')); - $this->assertEquals(false, $this->domain->isValid('..')); - $this->assertEquals(false, $this->domain->isValid('')); - $this->assertEquals(false, $this->domain->isValid(['string', 'string'])); - $this->assertEquals(false, $this->domain->isValid(1)); - $this->assertEquals(false, $this->domain->isValid(1.2)); + $this->assertSame(true, $this->domain->isValid('example.com')); + $this->assertSame(true, $this->domain->isValid('subdomain.example.com')); + $this->assertSame(true, $this->domain->isValid('subdomain.example-app.com')); + $this->assertSame(false, $this->domain->isValid('subdomain.example_app.com')); + $this->assertSame(true, $this->domain->isValid('subdomain-new.example.com')); + $this->assertSame(false, $this->domain->isValid('subdomain_new.example.com')); + $this->assertSame(true, $this->domain->isValid('localhost')); + $this->assertSame(true, $this->domain->isValid('example.io')); + $this->assertSame(true, $this->domain->isValid('example.org')); + $this->assertSame(true, $this->domain->isValid('example.org')); + $this->assertSame(false, $this->domain->isValid(false)); + $this->assertSame(false, $this->domain->isValid('api.appwrite.io.')); + $this->assertSame(false, $this->domain->isValid('.api.appwrite.io')); + $this->assertSame(false, $this->domain->isValid('.api.appwrite.io')); + $this->assertSame(false, $this->domain->isValid('api..appwrite.io')); + $this->assertSame(false, $this->domain->isValid('api-.appwrite.io')); + $this->assertSame(false, $this->domain->isValid('api.-appwrite.io')); + $this->assertSame(false, $this->domain->isValid('app write.io')); + $this->assertSame(false, $this->domain->isValid(' appwrite.io')); + $this->assertSame(false, $this->domain->isValid('appwrite.io ')); + $this->assertSame(false, $this->domain->isValid('-appwrite.io')); + $this->assertSame(false, $this->domain->isValid('appwrite.io-')); + $this->assertSame(false, $this->domain->isValid('.')); + $this->assertSame(false, $this->domain->isValid('..')); + $this->assertSame(false, $this->domain->isValid('')); + $this->assertSame(false, $this->domain->isValid(['string', 'string'])); + $this->assertSame(false, $this->domain->isValid(1)); + $this->assertSame(false, $this->domain->isValid(1.2)); } /** @@ -66,24 +66,24 @@ public function testDomainValidationWithHostnamesFalse() // Create validator with hostnames=false for permissive validation $permissiveValidator = new Domain([], false); - $this->assertEquals(true, $permissiveValidator->isValid('xn--e1afmkfd.xn--p1ai')); // пример.рф in punycode - $this->assertEquals(true, $permissiveValidator->isValid('xn--fsq.com')); // 中.com in punycode - $this->assertEquals(true, $permissiveValidator->isValid('123.com')); - $this->assertEquals(true, $permissiveValidator->isValid('test123.example.com')); - $this->assertEquals(true, $permissiveValidator->isValid('localhost')); - $this->assertEquals(true, $permissiveValidator->isValid('intranet')); - $this->assertEquals(true, $permissiveValidator->isValid('subdomain_new.example.com')); - $this->assertEquals(true, $permissiveValidator->isValid('subdomain.example_app.com')); + $this->assertSame(true, $permissiveValidator->isValid('xn--e1afmkfd.xn--p1ai')); // пример.рф in punycode + $this->assertSame(true, $permissiveValidator->isValid('xn--fsq.com')); // 中.com in punycode + $this->assertSame(true, $permissiveValidator->isValid('123.com')); + $this->assertSame(true, $permissiveValidator->isValid('test123.example.com')); + $this->assertSame(true, $permissiveValidator->isValid('localhost')); + $this->assertSame(true, $permissiveValidator->isValid('intranet')); + $this->assertSame(true, $permissiveValidator->isValid('subdomain_new.example.com')); + $this->assertSame(true, $permissiveValidator->isValid('subdomain.example_app.com')); $longLabel = str_repeat('a', 63); - $this->assertEquals(true, $permissiveValidator->isValid($longLabel . '.com')); - $this->assertEquals(true, $permissiveValidator->isValid('a.b.c.d.example.com')); - $this->assertEquals(true, $permissiveValidator->isValid('sub1.sub2.sub3.example.org')); - $this->assertEquals(true, $permissiveValidator->isValid('api-.appwrite.io')); // Dash at end of label - $this->assertEquals(true, $permissiveValidator->isValid('api.-appwrite.io')); // Dash at start of label - $this->assertEquals(true, $permissiveValidator->isValid('app write.io')); // Space in domain - $this->assertEquals(true, $permissiveValidator->isValid(' appwrite.io')); // Leading space - $this->assertEquals(true, $permissiveValidator->isValid('appwrite.io ')); // Trailing space - $this->assertEquals(true, $permissiveValidator->isValid('-appwrite.io')); // Leading dash + $this->assertSame(true, $permissiveValidator->isValid($longLabel . '.com')); + $this->assertSame(true, $permissiveValidator->isValid('a.b.c.d.example.com')); + $this->assertSame(true, $permissiveValidator->isValid('sub1.sub2.sub3.example.org')); + $this->assertSame(true, $permissiveValidator->isValid('api-.appwrite.io')); // Dash at end of label + $this->assertSame(true, $permissiveValidator->isValid('api.-appwrite.io')); // Dash at start of label + $this->assertSame(true, $permissiveValidator->isValid('app write.io')); // Space in domain + $this->assertSame(true, $permissiveValidator->isValid(' appwrite.io')); // Leading space + $this->assertSame(true, $permissiveValidator->isValid('appwrite.io ')); // Trailing space + $this->assertSame(true, $permissiveValidator->isValid('-appwrite.io')); // Leading dash } /** @@ -95,29 +95,29 @@ public function testInvalidDomainsWithHostnamesFalse() $permissiveValidator = new Domain([], false); // These should still be invalid even in permissive mode - $this->assertEquals(false, $permissiveValidator->isValid('example..com')); // Double dot - $this->assertEquals(false, $permissiveValidator->isValid('.example.com')); // Leading dot - $this->assertEquals(false, $permissiveValidator->isValid('example.com.')); // Trailing dot (caught by Domain validator) - $this->assertEquals(false, $permissiveValidator->isValid('appwrite.io-')); // Trailing dash (caught by Domain validator) + $this->assertSame(false, $permissiveValidator->isValid('example..com')); // Double dot + $this->assertSame(false, $permissiveValidator->isValid('.example.com')); // Leading dot + $this->assertSame(false, $permissiveValidator->isValid('example.com.')); // Trailing dot (caught by Domain validator) + $this->assertSame(false, $permissiveValidator->isValid('appwrite.io-')); // Trailing dash (caught by Domain validator) // Test label too long (more than 63 characters) $tooLongLabel = str_repeat('a', 64); - $this->assertEquals(false, $permissiveValidator->isValid($tooLongLabel . '.com')); + $this->assertSame(false, $permissiveValidator->isValid($tooLongLabel . '.com')); // Test total domain length too long (more than 253 characters) $longDomain = str_repeat('a', 50) . '.' . str_repeat('b', 50) . '.' . str_repeat('c', 50) . '.' . str_repeat('d', 50) . '.' . str_repeat('e', 50) . '.com'; - $this->assertEquals(false, $permissiveValidator->isValid($longDomain)); + $this->assertSame(false, $permissiveValidator->isValid($longDomain)); // Note: These are actually allowed by FILTER_VALIDATE_DOMAIN without FILTER_FLAG_HOSTNAME // but might be unexpected: - $this->assertEquals(true, $permissiveValidator->isValid('exam ple.com')); // Space in domain - $this->assertEquals(true, $permissiveValidator->isValid('example@.com')); // @ character - $this->assertEquals(true, $permissiveValidator->isValid('example#.com')); // # character - $this->assertEquals(true, $permissiveValidator->isValid('http://example.com')); // Protocol - $this->assertEquals(true, $permissiveValidator->isValid('example.com:8080')); // Port - $this->assertEquals(true, $permissiveValidator->isValid('example.com/path')); // Path + $this->assertSame(true, $permissiveValidator->isValid('exam ple.com')); // Space in domain + $this->assertSame(true, $permissiveValidator->isValid('example@.com')); // @ character + $this->assertSame(true, $permissiveValidator->isValid('example#.com')); // # character + $this->assertSame(true, $permissiveValidator->isValid('http://example.com')); // Protocol + $this->assertSame(true, $permissiveValidator->isValid('example.com:8080')); // Port + $this->assertSame(true, $permissiveValidator->isValid('example.com/path')); // Path } public function testRestrictions() @@ -127,23 +127,23 @@ public function testRestrictions() Domain::createRestriction('fra.appwrite.run', 4), ]); - $this->assertEquals(true, $validator->isValid('google.com')); - $this->assertEquals(true, $validator->isValid('stage.google.com')); - $this->assertEquals(true, $validator->isValid('shard4.stage.google.com')); - - $this->assertEquals(false, $validator->isValid('appwrite.network')); - $this->assertEquals(false, $validator->isValid('preview-a.appwrite.network')); - $this->assertEquals(false, $validator->isValid('branch-a.appwrite.network')); - $this->assertEquals(true, $validator->isValid('google.appwrite.network')); - $this->assertEquals(false, $validator->isValid('stage.google.appwrite.network')); - $this->assertEquals(false, $validator->isValid('shard4.stage.google.appwrite.network')); - - $this->assertEquals(false, $validator->isValid('fra.appwrite.run')); - $this->assertEquals(true, $validator->isValid('appwrite.run')); - $this->assertEquals(true, $validator->isValid('google.fra.appwrite.run')); - $this->assertEquals(false, $validator->isValid('shard4.google.fra.appwrite.run')); - $this->assertEquals(true, $validator->isValid('branch-google.fra.appwrite.run')); - $this->assertEquals(true, $validator->isValid('preview-google.fra.appwrite.run')); + $this->assertSame(true, $validator->isValid('google.com')); + $this->assertSame(true, $validator->isValid('stage.google.com')); + $this->assertSame(true, $validator->isValid('shard4.stage.google.com')); + + $this->assertSame(false, $validator->isValid('appwrite.network')); + $this->assertSame(false, $validator->isValid('preview-a.appwrite.network')); + $this->assertSame(false, $validator->isValid('branch-a.appwrite.network')); + $this->assertSame(true, $validator->isValid('google.appwrite.network')); + $this->assertSame(false, $validator->isValid('stage.google.appwrite.network')); + $this->assertSame(false, $validator->isValid('shard4.stage.google.appwrite.network')); + + $this->assertSame(false, $validator->isValid('fra.appwrite.run')); + $this->assertSame(true, $validator->isValid('appwrite.run')); + $this->assertSame(true, $validator->isValid('google.fra.appwrite.run')); + $this->assertSame(false, $validator->isValid('shard4.google.fra.appwrite.run')); + $this->assertSame(true, $validator->isValid('branch-google.fra.appwrite.run')); + $this->assertSame(true, $validator->isValid('preview-google.fra.appwrite.run')); } /** @@ -153,26 +153,26 @@ public function testHostnamesParameter() { // Test with hostnames=true (default, strict mode with FILTER_FLAG_HOSTNAME) $strictValidator = new Domain([], true); - $this->assertEquals(false, $strictValidator->isValid('subdomain_new.example.com')); - $this->assertEquals(false, $strictValidator->isValid('subdomain.example_app.com')); - $this->assertEquals(false, $strictValidator->isValid('sub_domain.example.com')); - $this->assertEquals(false, $strictValidator->isValid('app write.io')); - $this->assertEquals(false, $strictValidator->isValid('api-.appwrite.io')); - $this->assertEquals(false, $strictValidator->isValid('api.-appwrite.io')); + $this->assertSame(false, $strictValidator->isValid('subdomain_new.example.com')); + $this->assertSame(false, $strictValidator->isValid('subdomain.example_app.com')); + $this->assertSame(false, $strictValidator->isValid('sub_domain.example.com')); + $this->assertSame(false, $strictValidator->isValid('app write.io')); + $this->assertSame(false, $strictValidator->isValid('api-.appwrite.io')); + $this->assertSame(false, $strictValidator->isValid('api.-appwrite.io')); // Test with hostnames=false (permissive mode without FILTER_FLAG_HOSTNAME) $permissiveValidator = new Domain([], false); - $this->assertEquals(true, $permissiveValidator->isValid('subdomain_new.example.com')); - $this->assertEquals(true, $permissiveValidator->isValid('subdomain.example_app.com')); - $this->assertEquals(true, $permissiveValidator->isValid('sub_domain.example.com')); - $this->assertEquals(true, $permissiveValidator->isValid('app write.io')); - $this->assertEquals(true, $permissiveValidator->isValid('api-.appwrite.io')); - $this->assertEquals(true, $permissiveValidator->isValid('api.-appwrite.io')); + $this->assertSame(true, $permissiveValidator->isValid('subdomain_new.example.com')); + $this->assertSame(true, $permissiveValidator->isValid('subdomain.example_app.com')); + $this->assertSame(true, $permissiveValidator->isValid('sub_domain.example.com')); + $this->assertSame(true, $permissiveValidator->isValid('app write.io')); + $this->assertSame(true, $permissiveValidator->isValid('api-.appwrite.io')); + $this->assertSame(true, $permissiveValidator->isValid('api.-appwrite.io')); // Domains without underscores should be valid in both modes - $this->assertEquals(true, $strictValidator->isValid('subdomain.example.com')); - $this->assertEquals(true, $strictValidator->isValid('subdomain-new.example.com')); - $this->assertEquals(true, $permissiveValidator->isValid('subdomain.example.com')); - $this->assertEquals(true, $permissiveValidator->isValid('subdomain-new.example.com')); + $this->assertSame(true, $strictValidator->isValid('subdomain.example.com')); + $this->assertSame(true, $strictValidator->isValid('subdomain-new.example.com')); + $this->assertSame(true, $permissiveValidator->isValid('subdomain.example.com')); + $this->assertSame(true, $permissiveValidator->isValid('subdomain-new.example.com')); } } diff --git a/tests/Validator/FloatValidatorTest.php b/tests/Validator/FloatValidatorTest.php index 80d8f4d..4e5d391 100755 --- a/tests/Validator/FloatValidatorTest.php +++ b/tests/Validator/FloatValidatorTest.php @@ -18,7 +18,7 @@ public function testCanValidateStrictly(): void $this->assertFalse($validator->isValid('23.5')); $this->assertFalse($validator->isValid('23')); $this->assertFalse($validator->isArray()); - $this->assertEquals(\Utopia\Validator::TYPE_FLOAT, $validator->getType()); + $this->assertSame(\Utopia\Validator::TYPE_FLOAT, $validator->getType()); } public function testCanValidateLoosely(): void @@ -34,6 +34,6 @@ public function testCanValidateLoosely(): void $this->assertFalse($validator->isValid('abc')); $this->assertFalse($validator->isValid(true)); $this->assertFalse($validator->isArray()); - $this->assertEquals(\Utopia\Validator::TYPE_FLOAT, $validator->getType()); + $this->assertSame(\Utopia\Validator::TYPE_FLOAT, $validator->getType()); } } diff --git a/tests/Validator/HexColorTest.php b/tests/Validator/HexColorTest.php index 93b7aa6..6d99eab 100755 --- a/tests/Validator/HexColorTest.php +++ b/tests/Validator/HexColorTest.php @@ -21,6 +21,6 @@ public function testCanValidateHexColor() $this->assertFalse($hexColor->isValid('ffff')); $this->assertFalse($hexColor->isArray()); - $this->assertEquals(\Utopia\Validator::TYPE_STRING, $hexColor->getType()); + $this->assertSame(\Utopia\Validator::TYPE_STRING, $hexColor->getType()); } } diff --git a/tests/Validator/HostTest.php b/tests/Validator/HostTest.php index 8e3968b..8de9d7a 100644 --- a/tests/Validator/HostTest.php +++ b/tests/Validator/HostTest.php @@ -28,15 +28,15 @@ public function setUp(): void public function testIsValid() { // Assertions - $this->assertEquals($this->host->isValid('https://example.io/link'), true); - $this->assertEquals($this->host->isValid('https://localhost'), true); - $this->assertEquals($this->host->isValid('localhost'), false); - $this->assertEquals($this->host->isValid('http://subdomain.example.test/path'), true); - $this->assertEquals($this->host->isValid('http://test.subdomain.example.test/path'), false); - $this->assertEquals($this->host->isValid('http://appwrite.io/path'), false); - $this->assertEquals($this->host->isValid('http://me.appwrite.io/path'), true); - $this->assertEquals($this->host->isValid('http://you.appwrite.io/path'), true); - $this->assertEquals($this->host->isValid('http://us.together.appwrite.io/path'), true); - $this->assertEquals($this->host->getType(), 'string'); + $this->assertSame(true, $this->host->isValid('https://example.io/link')); + $this->assertSame(true, $this->host->isValid('https://localhost')); + $this->assertSame(false, $this->host->isValid('localhost')); + $this->assertSame(true, $this->host->isValid('http://subdomain.example.test/path')); + $this->assertSame(false, $this->host->isValid('http://test.subdomain.example.test/path')); + $this->assertSame(false, $this->host->isValid('http://appwrite.io/path')); + $this->assertSame(true, $this->host->isValid('http://me.appwrite.io/path')); + $this->assertSame(true, $this->host->isValid('http://you.appwrite.io/path')); + $this->assertSame(true, $this->host->isValid('http://us.together.appwrite.io/path')); + $this->assertSame('string', $this->host->getType()); } } diff --git a/tests/Validator/HostnameTest.php b/tests/Validator/HostnameTest.php index a1e492e..2f8c316 100755 --- a/tests/Validator/HostnameTest.php +++ b/tests/Validator/HostnameTest.php @@ -10,7 +10,7 @@ public function testCanValidateHostname(): void { $validator = new Hostname(); - $this->assertEquals(\Utopia\Validator::TYPE_STRING, $validator->getType()); + $this->assertSame(\Utopia\Validator::TYPE_STRING, $validator->getType()); $this->assertFalse($validator->isArray()); $this->assertTrue($validator->isValid('myweb.com')); diff --git a/tests/Validator/IPTest.php b/tests/Validator/IPTest.php index fc67b3a..8959af9 100644 --- a/tests/Validator/IPTest.php +++ b/tests/Validator/IPTest.php @@ -24,14 +24,14 @@ public function testIsValidIP() $validator = new IP(); // Assertions - $this->assertEquals($validator->isValid('2001:0db8:85a3:08d3:1319:8a2e:0370:7334'), true); - $this->assertEquals($validator->isValid('109.67.204.101'), true); - $this->assertEquals($validator->isValid(23.5), false); - $this->assertEquals($validator->isValid('23.5'), false); - $this->assertEquals($validator->isValid(null), false); - $this->assertEquals($validator->isValid(true), false); - $this->assertEquals($validator->isValid(false), false); - $this->assertEquals($validator->getType(), 'string'); + $this->assertSame(true, $validator->isValid('2001:0db8:85a3:08d3:1319:8a2e:0370:7334')); + $this->assertSame(true, $validator->isValid('109.67.204.101')); + $this->assertSame(false, $validator->isValid(23.5)); + $this->assertSame(false, $validator->isValid('23.5')); + $this->assertSame(false, $validator->isValid(null)); + $this->assertSame(false, $validator->isValid(true)); + $this->assertSame(false, $validator->isValid(false)); + $this->assertSame('string', $validator->getType()); } public function testIsValidIPALL() @@ -39,13 +39,13 @@ public function testIsValidIPALL() $validator = new IP(IP::ALL); // Assertions - $this->assertEquals($validator->isValid('2001:0db8:85a3:08d3:1319:8a2e:0370:7334'), true); - $this->assertEquals($validator->isValid('109.67.204.101'), true); - $this->assertEquals($validator->isValid(23.5), false); - $this->assertEquals($validator->isValid('23.5'), false); - $this->assertEquals($validator->isValid(null), false); - $this->assertEquals($validator->isValid(true), false); - $this->assertEquals($validator->isValid(false), false); + $this->assertSame(true, $validator->isValid('2001:0db8:85a3:08d3:1319:8a2e:0370:7334')); + $this->assertSame(true, $validator->isValid('109.67.204.101')); + $this->assertSame(false, $validator->isValid(23.5)); + $this->assertSame(false, $validator->isValid('23.5')); + $this->assertSame(false, $validator->isValid(null)); + $this->assertSame(false, $validator->isValid(true)); + $this->assertSame(false, $validator->isValid(false)); } public function testIsValidIPV4() @@ -53,13 +53,13 @@ public function testIsValidIPV4() $validator = new IP(IP::V4); // Assertions - $this->assertEquals($validator->isValid('2001:0db8:85a3:08d3:1319:8a2e:0370:7334'), false); - $this->assertEquals($validator->isValid('109.67.204.101'), true); - $this->assertEquals($validator->isValid(23.5), false); - $this->assertEquals($validator->isValid('23.5'), false); - $this->assertEquals($validator->isValid(null), false); - $this->assertEquals($validator->isValid(true), false); - $this->assertEquals($validator->isValid(false), false); + $this->assertSame(false, $validator->isValid('2001:0db8:85a3:08d3:1319:8a2e:0370:7334')); + $this->assertSame(true, $validator->isValid('109.67.204.101')); + $this->assertSame(false, $validator->isValid(23.5)); + $this->assertSame(false, $validator->isValid('23.5')); + $this->assertSame(false, $validator->isValid(null)); + $this->assertSame(false, $validator->isValid(true)); + $this->assertSame(false, $validator->isValid(false)); } public function testIsValidIPV6() @@ -67,12 +67,12 @@ public function testIsValidIPV6() $validator = new IP(IP::V6); // Assertions - $this->assertEquals($validator->isValid('2001:0db8:85a3:08d3:1319:8a2e:0370:7334'), true); - $this->assertEquals($validator->isValid('109.67.204.101'), false); - $this->assertEquals($validator->isValid(23.5), false); - $this->assertEquals($validator->isValid('23.5'), false); - $this->assertEquals($validator->isValid(null), false); - $this->assertEquals($validator->isValid(true), false); - $this->assertEquals($validator->isValid(false), false); + $this->assertSame(true, $validator->isValid('2001:0db8:85a3:08d3:1319:8a2e:0370:7334')); + $this->assertSame(false, $validator->isValid('109.67.204.101')); + $this->assertSame(false, $validator->isValid(23.5)); + $this->assertSame(false, $validator->isValid('23.5')); + $this->assertSame(false, $validator->isValid(null)); + $this->assertSame(false, $validator->isValid(true)); + $this->assertSame(false, $validator->isValid(false)); } } diff --git a/tests/Validator/IntegerTest.php b/tests/Validator/IntegerTest.php index 4161b3a..fac8462 100755 --- a/tests/Validator/IntegerTest.php +++ b/tests/Validator/IntegerTest.php @@ -17,7 +17,7 @@ public function testCanValidateStrictly() $this->assertFalse($validator->isValid(true)); $this->assertFalse($validator->isValid(false)); $this->assertFalse($validator->isArray()); - $this->assertEquals(\Utopia\Validator::TYPE_INTEGER, $validator->getType()); + $this->assertSame(\Utopia\Validator::TYPE_INTEGER, $validator->getType()); } public function testCanValidateLoosely() @@ -31,6 +31,6 @@ public function testCanValidateLoosely() $this->assertFalse($validator->isValid(true)); $this->assertFalse($validator->isValid(false)); $this->assertFalse($validator->isArray()); - $this->assertEquals(\Utopia\Validator::TYPE_INTEGER, $validator->getType()); + $this->assertSame(\Utopia\Validator::TYPE_INTEGER, $validator->getType()); } } diff --git a/tests/Validator/JSONTest.php b/tests/Validator/JSONTest.php index bafce37..c7515c5 100755 --- a/tests/Validator/JSONTest.php +++ b/tests/Validator/JSONTest.php @@ -23,6 +23,6 @@ public function testCanValidateJson(): void $this->assertFalse($json->isValid(1.2)); $this->assertFalse($json->isValid("{'test': 'demo'}")); $this->assertFalse($json->isArray()); - $this->assertEquals(\Utopia\Validator::TYPE_OBJECT, $json->getType()); + $this->assertSame(\Utopia\Validator::TYPE_OBJECT, $json->getType()); } } diff --git a/tests/Validator/MultipleOfTest.php b/tests/Validator/MultipleOfTest.php index fd81a99..5bf00ee 100644 --- a/tests/Validator/MultipleOfTest.php +++ b/tests/Validator/MultipleOfTest.php @@ -15,8 +15,8 @@ public function testIsValid() { $validator = new AllOf([new Text(20), new URL()], Validator::TYPE_STRING); - $this->assertEquals('string', $validator->getType()); - $this->assertEquals("Value must be a valid string and at least 1 chars and no longer than 20 chars", $validator->getDescription()); + $this->assertSame('string', $validator->getType()); + $this->assertSame("Value must be a valid string and at least 1 chars and no longer than 20 chars", $validator->getDescription()); // Valid URL but invalid text length $this->assertFalse($validator->isValid('http://example.com/very-long-url')); @@ -53,8 +53,8 @@ public function testRules() $this->assertFalse($vaidator->isValid($invalidTextInvalidUrl)); $this->assertCount(2, $vaidator->getValidators()); - $this->assertEquals("Utopia\Validator\Text", \get_class($vaidator->getValidators()[0])); - $this->assertEquals("Utopia\Validator\URL", \get_class($vaidator->getValidators()[1])); + $this->assertSame("Utopia\Validator\Text", \get_class($vaidator->getValidators()[0])); + $this->assertSame("Utopia\Validator\URL", \get_class($vaidator->getValidators()[1])); $vaidator = new NoneOf([new Text(20), new URL()], Validator::TYPE_STRING); $this->assertFalse($vaidator->isValid($validTextValidUrl)); diff --git a/tests/Validator/NumericTest.php b/tests/Validator/NumericTest.php index d90be6b..d0d9c66 100755 --- a/tests/Validator/NumericTest.php +++ b/tests/Validator/NumericTest.php @@ -19,6 +19,6 @@ public function testCanValidateNumerics(): void $this->assertFalse($numeric->isValid('not numeric')); $this->assertFalse($numeric->isValid([])); $this->assertFalse($numeric->isArray()); - $this->assertEquals(\Utopia\Validator::TYPE_MIXED, $numeric->getType()); + $this->assertSame(\Utopia\Validator::TYPE_MIXED, $numeric->getType()); } } diff --git a/tests/Validator/RangeTest.php b/tests/Validator/RangeTest.php index 2bd1ee6..ebb625a 100755 --- a/tests/Validator/RangeTest.php +++ b/tests/Validator/RangeTest.php @@ -19,11 +19,11 @@ public function testCanValidateIntegerRange() $this->assertFalse($range->isValid('1.5')); $this->assertFalse($range->isValid(6)); $this->assertFalse($range->isValid(-1)); - $this->assertEquals(0, $range->getMin()); - $this->assertEquals(5, $range->getMax()); + $this->assertSame(0, $range->getMin()); + $this->assertSame(5, $range->getMax()); $this->assertFalse($range->isArray()); - $this->assertEquals(\Utopia\Validator::TYPE_INTEGER, $range->getFormat()); - $this->assertEquals(\Utopia\Validator::TYPE_INTEGER, $range->getType()); + $this->assertSame(\Utopia\Validator::TYPE_INTEGER, $range->getFormat()); + $this->assertSame(\Utopia\Validator::TYPE_INTEGER, $range->getType()); } public function testCanValidateFloatRange() @@ -38,11 +38,11 @@ public function testCanValidateFloatRange() $this->assertFalse($range->isValid(4)); $this->assertFalse($range->isValid(1.5)); $this->assertFalse($range->isValid(-1)); - $this->assertEquals(0, $range->getMin()); - $this->assertEquals(1, $range->getMax()); + $this->assertSame(0, $range->getMin()); + $this->assertSame(1, $range->getMax()); $this->assertFalse($range->isArray()); - $this->assertEquals(\Utopia\Validator::TYPE_FLOAT, $range->getFormat()); - $this->assertEquals(\Utopia\Validator::TYPE_FLOAT, $range->getType(), \Utopia\Validator::TYPE_FLOAT); + $this->assertSame(\Utopia\Validator::TYPE_FLOAT, $range->getFormat()); + $this->assertSame(\Utopia\Validator::TYPE_FLOAT, $range->getType(), \Utopia\Validator::TYPE_FLOAT); } public function canValidateInfinityRange() diff --git a/tests/Validator/TextTest.php b/tests/Validator/TextTest.php index cb98704..d25d000 100755 --- a/tests/Validator/TextTest.php +++ b/tests/Validator/TextTest.php @@ -17,7 +17,7 @@ public function testCanValidateText(): void $this->assertFalse($validator->isValid(['seven', 8, 9.0])); $this->assertFalse($validator->isValid(false)); $this->assertFalse($validator->isArray()); - $this->assertEquals(\Utopia\Validator::TYPE_STRING, $validator->getType()); + $this->assertSame(\Utopia\Validator::TYPE_STRING, $validator->getType()); } public function testCanValidateBoundaries(): void diff --git a/tests/Validator/URLTest.php b/tests/Validator/URLTest.php index 1d15f9e..ddf52df 100644 --- a/tests/Validator/URLTest.php +++ b/tests/Validator/URLTest.php @@ -32,24 +32,24 @@ public function tearDown(): void public function testIsValid(): void { - $this->assertEquals('Value must be a valid URL', $this->url->getDescription()); - $this->assertEquals(true, $this->url->isValid('http://example.com')); - $this->assertEquals(true, $this->url->isValid('https://example.com')); - $this->assertEquals(true, $this->url->isValid('htts://example.com')); // does not validate protocol - $this->assertEquals(false, $this->url->isValid('example.com')); // though, requires some kind of protocol - $this->assertEquals(false, $this->url->isValid('http:/example.com')); - $this->assertEquals(true, $this->url->isValid('http://exa-mple.com')); - $this->assertEquals(false, $this->url->isValid('htt@s://example.com')); - $this->assertEquals(true, $this->url->isValid('http://www.example.com/foo%2\u00c2\u00a9zbar')); - $this->assertEquals(true, $this->url->isValid('http://www.example.com/?q=%3Casdf%3E')); + $this->assertSame('Value must be a valid URL', $this->url->getDescription()); + $this->assertSame(true, $this->url->isValid('http://example.com')); + $this->assertSame(true, $this->url->isValid('https://example.com')); + $this->assertSame(true, $this->url->isValid('htts://example.com')); // does not validate protocol + $this->assertSame(false, $this->url->isValid('example.com')); // though, requires some kind of protocol + $this->assertSame(false, $this->url->isValid('http:/example.com')); + $this->assertSame(true, $this->url->isValid('http://exa-mple.com')); + $this->assertSame(false, $this->url->isValid('htt@s://example.com')); + $this->assertSame(true, $this->url->isValid('http://www.example.com/foo%2\u00c2\u00a9zbar')); + $this->assertSame(true, $this->url->isValid('http://www.example.com/?q=%3Casdf%3E')); } public function testIsValidAllowedSchemes(): void { $this->url = new URL(['http', 'https']); - $this->assertEquals('Value must be a valid URL with following schemes (http, https)', $this->url->getDescription()); - $this->assertEquals(true, $this->url->isValid('http://example.com')); - $this->assertEquals(true, $this->url->isValid('https://example.com')); - $this->assertEquals(false, $this->url->isValid('gopher://www.example.com')); + $this->assertSame('Value must be a valid URL with following schemes (http, https)', $this->url->getDescription()); + $this->assertSame(true, $this->url->isValid('http://example.com')); + $this->assertSame(true, $this->url->isValid('https://example.com')); + $this->assertSame(false, $this->url->isValid('gopher://www.example.com')); } } diff --git a/tests/Validator/WhiteListTest.php b/tests/Validator/WhiteListTest.php index 9d88f75..d573df1 100755 --- a/tests/Validator/WhiteListTest.php +++ b/tests/Validator/WhiteListTest.php @@ -21,8 +21,8 @@ public function testCanValidateStrictly() $this->assertFalse($whiteList->isValid('3')); $this->assertFalse($whiteList->isValid(5)); $this->assertFalse($whiteList->isArray()); - $this->assertEquals($whiteList->getList(), ['string1', 'string2', 3, 4]); - $this->assertEquals(\Utopia\Validator::TYPE_STRING, $whiteList->getType()); + $this->assertSame($whiteList->getList(), ['string1', 'string2', 3, 4]); + $this->assertSame(\Utopia\Validator::TYPE_STRING, $whiteList->getType()); } public function testCanValidateLoosely(): void @@ -39,7 +39,7 @@ public function testCanValidateLoosely(): void $this->assertTrue($whiteList->isValid('4')); $this->assertFalse($whiteList->isValid('string3')); $this->assertFalse($whiteList->isValid(5)); - $this->assertEquals($whiteList->getList(), ['string1', 'string2', 3, 4]); + $this->assertSame($whiteList->getList(), ['string1', 'string2', '3', '4']); $whiteList = new WhiteList(['STRING1', 'STRING2', 3, 4]); @@ -53,6 +53,6 @@ public function testCanValidateLoosely(): void $this->assertTrue($whiteList->isValid('4')); $this->assertFalse($whiteList->isValid('string3')); $this->assertFalse($whiteList->isValid(5)); - $this->assertEquals($whiteList->getList(), ['string1', 'string2', 3, 4]); + $this->assertSame($whiteList->getList(), ['string1', 'string2', '3', '4']); } } diff --git a/tests/Validator/WildcardTest.php b/tests/Validator/WildcardTest.php index b79c358..7ebbd9e 100644 --- a/tests/Validator/WildcardTest.php +++ b/tests/Validator/WildcardTest.php @@ -16,6 +16,6 @@ public function testCanValidateWildcard() $this->assertTrue($validator->isValid(true)); $this->assertTrue($validator->isValid(false)); $this->assertFalse($validator->isArray()); - $this->assertEquals(\Utopia\Validator::TYPE_STRING, $validator->getType()); + $this->assertSame(\Utopia\Validator::TYPE_STRING, $validator->getType()); } } From 9d6b681b16f88246cdfdcc23ef25d6f3f106cb9a Mon Sep 17 00:00:00 2001 From: Hemachandar Date: Wed, 26 Nov 2025 21:40:12 +0530 Subject: [PATCH 3/4] lint --- src/phpstan/DisallowAssertEqualsExtension.php | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/phpstan/DisallowAssertEqualsExtension.php b/src/phpstan/DisallowAssertEqualsExtension.php index 5a06252..775eab2 100644 --- a/src/phpstan/DisallowAssertEqualsExtension.php +++ b/src/phpstan/DisallowAssertEqualsExtension.php @@ -9,22 +9,22 @@ class DisallowAssertEqualsExtension implements RestrictedMethodUsageExtension { - public function isRestrictedMethodUsage( - ExtendedMethodReflection $methodReflection, - Scope $scope, - ): ?RestrictedUsage { - if ($methodReflection->getName() !== 'assertEquals') { - return null; - } + public function isRestrictedMethodUsage( + ExtendedMethodReflection $methodReflection, + Scope $scope, + ): ?RestrictedUsage { + if ($methodReflection->getName() !== 'assertEquals') { + return null; + } - $declaringClass = $methodReflection->getDeclaringClass(); - if ($declaringClass->getName() !== 'PHPUnit\Framework\Assert') { - return null; - } + $declaringClass = $methodReflection->getDeclaringClass(); + if ($declaringClass->getName() !== 'PHPUnit\Framework\Assert') { + return null; + } - return RestrictedUsage::create( - errorMessage: 'Use assertSame() instead of assertEquals()', - identifier: 'method.disallowedAssertEquals', - ); - } -} \ No newline at end of file + return RestrictedUsage::create( + errorMessage: 'Use assertSame() instead of assertEquals()', + identifier: 'method.disallowedAssertEquals', + ); + } +} From 5b54664b7ad1f1a09bf03f6340fb53ea0437fc1d Mon Sep 17 00:00:00 2001 From: Hemachandar Date: Wed, 26 Nov 2025 21:46:45 +0530 Subject: [PATCH 4/4] rename --- phpstan.neon | 1 + src/PHPStan/DisallowAssertEqualsExtension.php | 30 +++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 src/PHPStan/DisallowAssertEqualsExtension.php diff --git a/phpstan.neon b/phpstan.neon index 18363ef..46c07bc 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -2,6 +2,7 @@ parameters: level: 5 paths: - src + - src/PHPStan - tests services: - diff --git a/src/PHPStan/DisallowAssertEqualsExtension.php b/src/PHPStan/DisallowAssertEqualsExtension.php new file mode 100644 index 0000000..775eab2 --- /dev/null +++ b/src/PHPStan/DisallowAssertEqualsExtension.php @@ -0,0 +1,30 @@ +getName() !== 'assertEquals') { + return null; + } + + $declaringClass = $methodReflection->getDeclaringClass(); + if ($declaringClass->getName() !== 'PHPUnit\Framework\Assert') { + return null; + } + + return RestrictedUsage::create( + errorMessage: 'Use assertSame() instead of assertEquals()', + identifier: 'method.disallowedAssertEquals', + ); + } +}