From bd085624b2f3873f785d858696884b87288cd673 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Thu, 2 Mar 2023 21:51:29 +0100 Subject: [PATCH 01/47] Extract unit test --- .../tests/Feature/AssetServiceTest.php | 39 +----------- .../tests/Unit/AssetServiceUnitTest.php | 60 +++++++++++++++++++ 2 files changed, 62 insertions(+), 37 deletions(-) create mode 100644 packages/framework/tests/Unit/AssetServiceUnitTest.php diff --git a/packages/framework/tests/Feature/AssetServiceTest.php b/packages/framework/tests/Feature/AssetServiceTest.php index c83dfc840cf..740ab49da8d 100644 --- a/packages/framework/tests/Feature/AssetServiceTest.php +++ b/packages/framework/tests/Feature/AssetServiceTest.php @@ -10,28 +10,11 @@ /** * @covers \Hyde\Framework\Services\AssetService + * + * @see \Hyde\Framework\Testing\Unit\AssetServiceUnitTest */ class AssetServiceTest extends TestCase { - public function test_has_version_string() - { - $service = new AssetService(); - $this->assertIsString($service->version); - } - - public function test_can_change_version() - { - $service = new AssetService(); - $service->version = '1.0.0'; - $this->assertEquals('1.0.0', $service->version); - } - - public function test_version_method_returns_version_property_when_config_override_is_not_set() - { - $service = new AssetService(); - $this->assertEquals($service->version, $service->version()); - } - public function test_version_can_be_set_in_config() { config(['hyde.hydefront_version' => '1.0.0']); @@ -39,13 +22,6 @@ public function test_version_can_be_set_in_config() $this->assertEquals('1.0.0', $service->version()); } - public function test_cdn_path_constructor_returns_cdn_uri() - { - $service = new AssetService(); - $this->assertIsString($path = $service->cdnLink('styles.css')); - $this->assertStringContainsString('styles.css', $path); - } - public function test_can_set_custom_cdn_uri_in_config() { config(['hyde.hydefront_url' => 'https://example.com']); @@ -78,15 +54,4 @@ public function test_media_link_supports_custom_media_directories() $this->assertIsString($path = $service->mediaLink('app.css')); $this->assertEquals('assets/app.css?v='.md5_file(Hyde::path('_assets/app.css')), $path); } - - public function test_inject_tailwind_config_returns_extracted_tailwind_config() - { - $service = new AssetService(); - $this->assertIsString($config = $service->injectTailwindConfig()); - $this->assertStringContainsString("darkMode: 'class'", $config); - $this->assertStringContainsString('theme: {', $config); - $this->assertStringContainsString('extend: {', $config); - $this->assertStringContainsString('typography: {', $config); - $this->assertStringNotContainsString('plugins', $config); - } } diff --git a/packages/framework/tests/Unit/AssetServiceUnitTest.php b/packages/framework/tests/Unit/AssetServiceUnitTest.php new file mode 100644 index 00000000000..91119b61f90 --- /dev/null +++ b/packages/framework/tests/Unit/AssetServiceUnitTest.php @@ -0,0 +1,60 @@ +assertIsString($service->version); + } + + public function test_can_change_version() + { + $service = new AssetService(); + $service->version = '1.0.0'; + $this->assertEquals('1.0.0', $service->version); + } + + public function test_version_method_returns_version_property_when_config_override_is_not_set() + { + $service = new AssetService(); + $this->assertEquals($service->version, $service->version()); + } + + public function test_cdn_path_constructor_returns_cdn_uri() + { + $service = new AssetService(); + $this->assertIsString($path = $service->cdnLink('styles.css')); + $this->assertStringContainsString('styles.css', $path); + } + + public function test_inject_tailwind_config_returns_extracted_tailwind_config() + { + $service = new AssetService(); + $this->assertIsString($config = $service->injectTailwindConfig()); + $this->assertStringContainsString("darkMode: 'class'", $config); + $this->assertStringContainsString('theme: {', $config); + $this->assertStringContainsString('extend: {', $config); + $this->assertStringContainsString('typography: {', $config); + $this->assertStringNotContainsString('plugins', $config); + } +} From beb2559bc8bd03b4082ab0de22c4703243cc7e05 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Thu, 2 Mar 2023 21:52:03 +0100 Subject: [PATCH 02/47] Convert test method names to camelCase --- packages/framework/tests/Unit/AssetServiceUnitTest.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/framework/tests/Unit/AssetServiceUnitTest.php b/packages/framework/tests/Unit/AssetServiceUnitTest.php index 91119b61f90..f53832cbf73 100644 --- a/packages/framework/tests/Unit/AssetServiceUnitTest.php +++ b/packages/framework/tests/Unit/AssetServiceUnitTest.php @@ -21,33 +21,33 @@ protected function setUp(): void self::mockConfig(); } - public function test_has_version_string() + public function testHasVersionString() { $service = new AssetService(); $this->assertIsString($service->version); } - public function test_can_change_version() + public function testCanChangeVersion() { $service = new AssetService(); $service->version = '1.0.0'; $this->assertEquals('1.0.0', $service->version); } - public function test_version_method_returns_version_property_when_config_override_is_not_set() + public function testVersionMethodReturnsVersionPropertyWhenConfigOverrideIsNotSet() { $service = new AssetService(); $this->assertEquals($service->version, $service->version()); } - public function test_cdn_path_constructor_returns_cdn_uri() + public function testCdnPathConstructorReturnsCdnUri() { $service = new AssetService(); $this->assertIsString($path = $service->cdnLink('styles.css')); $this->assertStringContainsString('styles.css', $path); } - public function test_inject_tailwind_config_returns_extracted_tailwind_config() + public function testInjectTailwindConfigReturnsExtractedTailwindConfig() { $service = new AssetService(); $this->assertIsString($config = $service->injectTailwindConfig()); From b8087290649308df452e21a0b4f8c814b54db3d7 Mon Sep 17 00:00:00 2001 From: StyleCI Bot Date: Thu, 2 Mar 2023 20:52:14 +0000 Subject: [PATCH 03/47] Apply fixes from StyleCI --- packages/framework/tests/Unit/AssetServiceUnitTest.php | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/framework/tests/Unit/AssetServiceUnitTest.php b/packages/framework/tests/Unit/AssetServiceUnitTest.php index f53832cbf73..a05c872ddee 100644 --- a/packages/framework/tests/Unit/AssetServiceUnitTest.php +++ b/packages/framework/tests/Unit/AssetServiceUnitTest.php @@ -5,7 +5,6 @@ namespace Hyde\Framework\Testing\Unit; use Hyde\Framework\Services\AssetService; -use Hyde\Hyde; use Hyde\Testing\UnitTestCase; /** From 14d9e9b1777f1ce26f06435ee83c6a67ee8c5f74 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Thu, 2 Mar 2023 21:55:21 +0100 Subject: [PATCH 04/47] Refactor to move tests to unit test --- .../framework/tests/Feature/AssetServiceTest.php | 14 -------------- .../framework/tests/Unit/AssetServiceUnitTest.php | 14 ++++++++++++++ 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/framework/tests/Feature/AssetServiceTest.php b/packages/framework/tests/Feature/AssetServiceTest.php index 740ab49da8d..4fbc8b99858 100644 --- a/packages/framework/tests/Feature/AssetServiceTest.php +++ b/packages/framework/tests/Feature/AssetServiceTest.php @@ -15,20 +15,6 @@ */ class AssetServiceTest extends TestCase { - public function test_version_can_be_set_in_config() - { - config(['hyde.hydefront_version' => '1.0.0']); - $service = new AssetService(); - $this->assertEquals('1.0.0', $service->version()); - } - - public function test_can_set_custom_cdn_uri_in_config() - { - config(['hyde.hydefront_url' => 'https://example.com']); - $service = new AssetService(); - $this->assertSame('https://example.com', $service->cdnLink('styles.css')); - } - public function test_media_link_returns_media_path_with_cache_key() { $service = new AssetService(); diff --git a/packages/framework/tests/Unit/AssetServiceUnitTest.php b/packages/framework/tests/Unit/AssetServiceUnitTest.php index a05c872ddee..cee85cc61e0 100644 --- a/packages/framework/tests/Unit/AssetServiceUnitTest.php +++ b/packages/framework/tests/Unit/AssetServiceUnitTest.php @@ -33,6 +33,20 @@ public function testCanChangeVersion() $this->assertEquals('1.0.0', $service->version); } + public function testVersionCanBeSetInConfig() + { + self::mockConfig(['hyde.hydefront_version' => '1.0.0']); + $service = new AssetService(); + $this->assertEquals('1.0.0', $service->version()); + } + + public function testCanSetCustomCdnUriInConfig() + { + self::mockConfig(['hyde.hydefront_url' => 'https://example.com']); + $service = new AssetService(); + $this->assertSame('https://example.com', $service->cdnLink('')); + } + public function testVersionMethodReturnsVersionPropertyWhenConfigOverrideIsNotSet() { $service = new AssetService(); From 75cefaae065b99b0ea803365a66bb78932d56e78 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Thu, 2 Mar 2023 21:58:00 +0100 Subject: [PATCH 05/47] Extract constant for the default HydeFront version --- packages/framework/src/Framework/Services/AssetService.php | 7 +++++-- packages/framework/tests/Unit/AssetServiceUnitTest.php | 5 +++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/framework/src/Framework/Services/AssetService.php b/packages/framework/src/Framework/Services/AssetService.php index ba95845ab62..5440f9b295d 100644 --- a/packages/framework/src/Framework/Services/AssetService.php +++ b/packages/framework/src/Framework/Services/AssetService.php @@ -17,12 +17,15 @@ */ class AssetService { + /** @var string The default HydeFront version to load. */ + public final const HYDEFRONT_VERSION = 'v2.0'; + /** - * The default HydeFront version to load. + * The HydeFront version to load. * * @var string HydeFront SemVer Tag */ - public string $version = 'v2.0'; + public string $version = self::HYDEFRONT_VERSION; protected ?string $hydefrontUrl = null; diff --git a/packages/framework/tests/Unit/AssetServiceUnitTest.php b/packages/framework/tests/Unit/AssetServiceUnitTest.php index cee85cc61e0..408585be0fb 100644 --- a/packages/framework/tests/Unit/AssetServiceUnitTest.php +++ b/packages/framework/tests/Unit/AssetServiceUnitTest.php @@ -20,6 +20,11 @@ protected function setUp(): void self::mockConfig(); } + public function testVersionStringConstant() + { + $this->assertSame('v2.0', AssetService::HYDEFRONT_VERSION); + } + public function testHasVersionString() { $service = new AssetService(); From f51524570c0d92e7f7b796092ae416e73d6d08ed Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Thu, 2 Mar 2023 22:00:00 +0100 Subject: [PATCH 06/47] Clean up unit test --- .../framework/tests/Unit/AssetServiceUnitTest.php | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/framework/tests/Unit/AssetServiceUnitTest.php b/packages/framework/tests/Unit/AssetServiceUnitTest.php index 408585be0fb..8db915a8735 100644 --- a/packages/framework/tests/Unit/AssetServiceUnitTest.php +++ b/packages/framework/tests/Unit/AssetServiceUnitTest.php @@ -25,12 +25,18 @@ public function testVersionStringConstant() $this->assertSame('v2.0', AssetService::HYDEFRONT_VERSION); } - public function testHasVersionString() + public function testServiceHasVersionString() { $service = new AssetService(); $this->assertIsString($service->version); } + public function testVersionStringDefaultsToConstant() + { + $service = new AssetService(); + $this->assertSame(AssetService::HYDEFRONT_VERSION, $service->version); + } + public function testCanChangeVersion() { $service = new AssetService(); @@ -52,10 +58,10 @@ public function testCanSetCustomCdnUriInConfig() $this->assertSame('https://example.com', $service->cdnLink('')); } - public function testVersionMethodReturnsVersionPropertyWhenConfigOverrideIsNotSet() + public function testVersionMethodReturnsVersionProperty() { $service = new AssetService(); - $this->assertEquals($service->version, $service->version()); + $this->assertSame($service->version, $service->version()); } public function testCdnPathConstructorReturnsCdnUri() From ce8ec36f3ccb66477f1b7936fddb51a74cdfd3f1 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Thu, 2 Mar 2023 22:01:43 +0100 Subject: [PATCH 07/47] Improve unit test specificity --- packages/framework/tests/Unit/AssetServiceUnitTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/framework/tests/Unit/AssetServiceUnitTest.php b/packages/framework/tests/Unit/AssetServiceUnitTest.php index 8db915a8735..d630045f7a2 100644 --- a/packages/framework/tests/Unit/AssetServiceUnitTest.php +++ b/packages/framework/tests/Unit/AssetServiceUnitTest.php @@ -64,11 +64,11 @@ public function testVersionMethodReturnsVersionProperty() $this->assertSame($service->version, $service->version()); } - public function testCdnPathConstructorReturnsCdnUri() + public function testCdnLinkHelper() { $service = new AssetService(); $this->assertIsString($path = $service->cdnLink('styles.css')); - $this->assertStringContainsString('styles.css', $path); + $this->assertSame('https://cdn.jsdelivr.net/npm/hydefront@v2.0/dist/styles.css', $path); } public function testInjectTailwindConfigReturnsExtractedTailwindConfig() From 11ae55dd4625b0048bb72e1b539dbf53a95badde Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Thu, 2 Mar 2023 22:07:52 +0100 Subject: [PATCH 08/47] Replace ?? with if --- packages/framework/src/Framework/Services/AssetService.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/framework/src/Framework/Services/AssetService.php b/packages/framework/src/Framework/Services/AssetService.php index 5440f9b295d..e5090960e1e 100644 --- a/packages/framework/src/Framework/Services/AssetService.php +++ b/packages/framework/src/Framework/Services/AssetService.php @@ -75,7 +75,11 @@ public function injectTailwindConfig(): string protected function constructCdnPath(string $file): string { - return $this->hydefrontUrl ?? 'https://cdn.jsdelivr.net/npm/hydefront@'.$this->version().'/dist/'.$file; + if ($this->hydefrontUrl) { + return $this->hydefrontUrl; + } else { + return 'https://cdn.jsdelivr.net/npm/hydefront@'.$this->version().'/dist/'.$file; + } } protected function getCacheBustKey(string $file): string From 2bbde3c835ddf9fd0ab0fb60ce7375a63683b4b3 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Thu, 2 Mar 2023 22:08:16 +0100 Subject: [PATCH 09/47] Convert concatenation to 'sprintf()' call --- packages/framework/src/Framework/Services/AssetService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/framework/src/Framework/Services/AssetService.php b/packages/framework/src/Framework/Services/AssetService.php index e5090960e1e..1d197ee9152 100644 --- a/packages/framework/src/Framework/Services/AssetService.php +++ b/packages/framework/src/Framework/Services/AssetService.php @@ -78,7 +78,7 @@ protected function constructCdnPath(string $file): string if ($this->hydefrontUrl) { return $this->hydefrontUrl; } else { - return 'https://cdn.jsdelivr.net/npm/hydefront@'.$this->version().'/dist/'.$file; + return sprintf("https://cdn.jsdelivr.net/npm/hydefront@%s/dist/%s", $this->version(), $file); } } From c4bf992638b8a3945cba09b70764e12356e17c33 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Thu, 2 Mar 2023 22:10:01 +0100 Subject: [PATCH 10/47] Convert sprintf call to string replacement --- packages/framework/src/Framework/Services/AssetService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/framework/src/Framework/Services/AssetService.php b/packages/framework/src/Framework/Services/AssetService.php index 1d197ee9152..112e2fd78ad 100644 --- a/packages/framework/src/Framework/Services/AssetService.php +++ b/packages/framework/src/Framework/Services/AssetService.php @@ -78,7 +78,7 @@ protected function constructCdnPath(string $file): string if ($this->hydefrontUrl) { return $this->hydefrontUrl; } else { - return sprintf("https://cdn.jsdelivr.net/npm/hydefront@%s/dist/%s", $this->version(), $file); + return str_replace(['{{ $version }}', '{{ $file }}'], [$this->version(), $file], 'https://cdn.jsdelivr.net/npm/hydefront@{{ $version }}/dist/{{ $file }}',); } } From 7a3e41141c1e0bdc0b462aef577ae71f9d85fade Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Thu, 2 Mar 2023 22:10:56 +0100 Subject: [PATCH 11/47] Split comma-separated values into multiple lines --- packages/framework/src/Framework/Services/AssetService.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/framework/src/Framework/Services/AssetService.php b/packages/framework/src/Framework/Services/AssetService.php index 112e2fd78ad..7fdd23350db 100644 --- a/packages/framework/src/Framework/Services/AssetService.php +++ b/packages/framework/src/Framework/Services/AssetService.php @@ -78,7 +78,10 @@ protected function constructCdnPath(string $file): string if ($this->hydefrontUrl) { return $this->hydefrontUrl; } else { - return str_replace(['{{ $version }}', '{{ $file }}'], [$this->version(), $file], 'https://cdn.jsdelivr.net/npm/hydefront@{{ $version }}/dist/{{ $file }}',); + return str_replace( + ['{{ $version }}', '{{ $file }}'], [$this->version(), $file], + 'https://cdn.jsdelivr.net/npm/hydefront@{{ $version }}/dist/{{ $file }}' + ); } } From 7a20ed3359355c05a7fa9ab2209c3288126253fa Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Thu, 2 Mar 2023 22:19:57 +0100 Subject: [PATCH 12/47] Merge conditionals so custom path can use string replacement --- .../src/Framework/Services/AssetService.php | 12 +++----- .../tests/Unit/AssetServiceUnitTest.php | 29 +++++++++++++++++++ 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/packages/framework/src/Framework/Services/AssetService.php b/packages/framework/src/Framework/Services/AssetService.php index 7fdd23350db..39d1a4972cd 100644 --- a/packages/framework/src/Framework/Services/AssetService.php +++ b/packages/framework/src/Framework/Services/AssetService.php @@ -75,14 +75,10 @@ public function injectTailwindConfig(): string protected function constructCdnPath(string $file): string { - if ($this->hydefrontUrl) { - return $this->hydefrontUrl; - } else { - return str_replace( - ['{{ $version }}', '{{ $file }}'], [$this->version(), $file], - 'https://cdn.jsdelivr.net/npm/hydefront@{{ $version }}/dist/{{ $file }}' - ); - } + return str_replace( + ['{{ $version }}', '{{ $file }}'], [$this->version(), $file], + $this->hydefrontUrl ?? 'https://cdn.jsdelivr.net/npm/hydefront@{{ $version }}/dist/{{ $file }}' + ); } protected function getCacheBustKey(string $file): string diff --git a/packages/framework/tests/Unit/AssetServiceUnitTest.php b/packages/framework/tests/Unit/AssetServiceUnitTest.php index d630045f7a2..a3bb03916b5 100644 --- a/packages/framework/tests/Unit/AssetServiceUnitTest.php +++ b/packages/framework/tests/Unit/AssetServiceUnitTest.php @@ -58,6 +58,35 @@ public function testCanSetCustomCdnUriInConfig() $this->assertSame('https://example.com', $service->cdnLink('')); } + public function testCanUseCustomCdnPathWithVersion() + { + self::mockConfig(['hyde.hydefront_url' => '{{ $version }}']); + $service = new AssetService(); + $this->assertSame('v2.0', $service->cdnLink('')); + } + + public function testCanUseCustomCdnPathWithFile() + { + self::mockConfig(['hyde.hydefront_url' => '{{ $file }}']); + $service = new AssetService(); + $this->assertSame('styles.css', $service->cdnLink('styles.css')); + } + + public function testCanUseCustomCdnPathWithVersionAndFile() + { + self::mockConfig(['hyde.hydefront_url' => '{{ $version }}/{{ $file }}']); + $service = new AssetService(); + $this->assertSame('v2.0/styles.css', $service->cdnLink('styles.css')); + } + + public function testCanUseCustomCdnPathWithCustomVersion() + { + self::mockConfig(['hyde.hydefront_url' => '{{ $version }}']); + $service = new AssetService(); + $service->version = '1.0.0'; + $this->assertSame('1.0.0', $service->cdnLink('')); + } + public function testVersionMethodReturnsVersionProperty() { $service = new AssetService(); From ba2adb794c0f9332980489d46d0eab5204ce2d0f Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Thu, 2 Mar 2023 22:20:35 +0100 Subject: [PATCH 13/47] Normalize test method names --- packages/framework/tests/Unit/AssetServiceUnitTest.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/framework/tests/Unit/AssetServiceUnitTest.php b/packages/framework/tests/Unit/AssetServiceUnitTest.php index a3bb03916b5..ee30c3eea41 100644 --- a/packages/framework/tests/Unit/AssetServiceUnitTest.php +++ b/packages/framework/tests/Unit/AssetServiceUnitTest.php @@ -51,35 +51,35 @@ public function testVersionCanBeSetInConfig() $this->assertEquals('1.0.0', $service->version()); } - public function testCanSetCustomCdnUriInConfig() + public function testCanSetCustomCdnUrlInConfig() { self::mockConfig(['hyde.hydefront_url' => 'https://example.com']); $service = new AssetService(); $this->assertSame('https://example.com', $service->cdnLink('')); } - public function testCanUseCustomCdnPathWithVersion() + public function testCanUseCustomCdnUrlWithVersion() { self::mockConfig(['hyde.hydefront_url' => '{{ $version }}']); $service = new AssetService(); $this->assertSame('v2.0', $service->cdnLink('')); } - public function testCanUseCustomCdnPathWithFile() + public function testCanUseCustomCdnUrlWithFile() { self::mockConfig(['hyde.hydefront_url' => '{{ $file }}']); $service = new AssetService(); $this->assertSame('styles.css', $service->cdnLink('styles.css')); } - public function testCanUseCustomCdnPathWithVersionAndFile() + public function testCanUseCustomCdnUrlWithVersionAndFile() { self::mockConfig(['hyde.hydefront_url' => '{{ $version }}/{{ $file }}']); $service = new AssetService(); $this->assertSame('v2.0/styles.css', $service->cdnLink('styles.css')); } - public function testCanUseCustomCdnPathWithCustomVersion() + public function testCanUseCustomCdnUrlWithCustomVersion() { self::mockConfig(['hyde.hydefront_url' => '{{ $version }}']); $service = new AssetService(); From 7bee425f470b5dfe908589adc2c6b52e79dfb9d9 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Thu, 2 Mar 2023 22:23:38 +0100 Subject: [PATCH 14/47] Extract public constant for the CDN pattern --- packages/framework/src/Framework/Services/AssetService.php | 5 ++++- packages/framework/tests/Unit/AssetServiceUnitTest.php | 5 +++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/framework/src/Framework/Services/AssetService.php b/packages/framework/src/Framework/Services/AssetService.php index 39d1a4972cd..577e36b8ab4 100644 --- a/packages/framework/src/Framework/Services/AssetService.php +++ b/packages/framework/src/Framework/Services/AssetService.php @@ -20,6 +20,9 @@ class AssetService /** @var string The default HydeFront version to load. */ public final const HYDEFRONT_VERSION = 'v2.0'; + /** @var string The default HydeFront CDN path pattern. */ + public final const CDN_PATH_PATTERN = 'https://cdn.jsdelivr.net/npm/hydefront@{{ $version }}/dist/{{ $file }}'; + /** * The HydeFront version to load. * @@ -77,7 +80,7 @@ protected function constructCdnPath(string $file): string { return str_replace( ['{{ $version }}', '{{ $file }}'], [$this->version(), $file], - $this->hydefrontUrl ?? 'https://cdn.jsdelivr.net/npm/hydefront@{{ $version }}/dist/{{ $file }}' + $this->hydefrontUrl ?? self::CDN_PATH_PATTERN ); } diff --git a/packages/framework/tests/Unit/AssetServiceUnitTest.php b/packages/framework/tests/Unit/AssetServiceUnitTest.php index ee30c3eea41..af64595fc40 100644 --- a/packages/framework/tests/Unit/AssetServiceUnitTest.php +++ b/packages/framework/tests/Unit/AssetServiceUnitTest.php @@ -51,6 +51,11 @@ public function testVersionCanBeSetInConfig() $this->assertEquals('1.0.0', $service->version()); } + public function testCdnPatternConstant() + { + $this->assertSame('https://cdn.jsdelivr.net/npm/hydefront@{{ $version }}/dist/{{ $file }}', AssetService::CDN_PATH_PATTERN); + } + public function testCanSetCustomCdnUrlInConfig() { self::mockConfig(['hyde.hydefront_url' => 'https://example.com']); From c011e8e7df3a6e993b5a892efc56f224cc57a4ff Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Thu, 2 Mar 2023 22:23:50 +0100 Subject: [PATCH 15/47] Use assertSame --- packages/framework/tests/Unit/AssetServiceUnitTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/framework/tests/Unit/AssetServiceUnitTest.php b/packages/framework/tests/Unit/AssetServiceUnitTest.php index af64595fc40..850139254be 100644 --- a/packages/framework/tests/Unit/AssetServiceUnitTest.php +++ b/packages/framework/tests/Unit/AssetServiceUnitTest.php @@ -41,14 +41,14 @@ public function testCanChangeVersion() { $service = new AssetService(); $service->version = '1.0.0'; - $this->assertEquals('1.0.0', $service->version); + $this->assertSame('1.0.0', $service->version); } public function testVersionCanBeSetInConfig() { self::mockConfig(['hyde.hydefront_version' => '1.0.0']); $service = new AssetService(); - $this->assertEquals('1.0.0', $service->version()); + $this->assertSame('1.0.0', $service->version()); } public function testCdnPatternConstant() From d5f3d6185b00d12d3689f6152c44843f0d0cf7af Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Thu, 2 Mar 2023 22:25:08 +0100 Subject: [PATCH 16/47] Set default config value to the constant --- config/hyde.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/hyde.php b/config/hyde.php index 5bc3b78744d..b21cd879c0f 100644 --- a/config/hyde.php +++ b/config/hyde.php @@ -433,7 +433,7 @@ // Here you can specify HydeFront version and URL for when loading app.css from the CDN. // Only change these if you know what you're doing as some versions may incompatible with your Hyde version. - // 'hydefront_version' => '', + 'hydefront_version' => \Hyde\Framework\Services\AssetService::HYDEFRONT_VERSION, // 'hydefront_cdn_url' => '' ]; From 923f6438df2d5e88915c532e77950f2275c4aca2 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Thu, 2 Mar 2023 22:25:36 +0100 Subject: [PATCH 17/47] Set default config value to the constant --- config/hyde.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/hyde.php b/config/hyde.php index b21cd879c0f..4a1fbf132d8 100644 --- a/config/hyde.php +++ b/config/hyde.php @@ -434,6 +434,6 @@ // Here you can specify HydeFront version and URL for when loading app.css from the CDN. // Only change these if you know what you're doing as some versions may incompatible with your Hyde version. 'hydefront_version' => \Hyde\Framework\Services\AssetService::HYDEFRONT_VERSION, - // 'hydefront_cdn_url' => '' + 'hydefront_cdn_url' => \Hyde\Framework\Services\AssetService::HYDEFRONT_CDN_URL, ]; From d7f08386cb532844b20bb114d01eade18fcda069 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Thu, 2 Mar 2023 22:25:46 +0100 Subject: [PATCH 18/47] Rename constant --- packages/framework/src/Framework/Services/AssetService.php | 4 ++-- packages/framework/tests/Unit/AssetServiceUnitTest.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/framework/src/Framework/Services/AssetService.php b/packages/framework/src/Framework/Services/AssetService.php index 577e36b8ab4..f9a5c7cd1b2 100644 --- a/packages/framework/src/Framework/Services/AssetService.php +++ b/packages/framework/src/Framework/Services/AssetService.php @@ -21,7 +21,7 @@ class AssetService public final const HYDEFRONT_VERSION = 'v2.0'; /** @var string The default HydeFront CDN path pattern. */ - public final const CDN_PATH_PATTERN = 'https://cdn.jsdelivr.net/npm/hydefront@{{ $version }}/dist/{{ $file }}'; + public final const HYDEFRONT_CDN_URL = 'https://cdn.jsdelivr.net/npm/hydefront@{{ $version }}/dist/{{ $file }}'; /** * The HydeFront version to load. @@ -80,7 +80,7 @@ protected function constructCdnPath(string $file): string { return str_replace( ['{{ $version }}', '{{ $file }}'], [$this->version(), $file], - $this->hydefrontUrl ?? self::CDN_PATH_PATTERN + $this->hydefrontUrl ?? self::HYDEFRONT_CDN_URL ); } diff --git a/packages/framework/tests/Unit/AssetServiceUnitTest.php b/packages/framework/tests/Unit/AssetServiceUnitTest.php index 850139254be..86da67cea7e 100644 --- a/packages/framework/tests/Unit/AssetServiceUnitTest.php +++ b/packages/framework/tests/Unit/AssetServiceUnitTest.php @@ -53,7 +53,7 @@ public function testVersionCanBeSetInConfig() public function testCdnPatternConstant() { - $this->assertSame('https://cdn.jsdelivr.net/npm/hydefront@{{ $version }}/dist/{{ $file }}', AssetService::CDN_PATH_PATTERN); + $this->assertSame('https://cdn.jsdelivr.net/npm/hydefront@{{ $version }}/dist/{{ $file }}', AssetService::HYDEFRONT_CDN_URL); } public function testCanSetCustomCdnUrlInConfig() From 7c2b65c3f424d5d09d1b205a589478f3b574567e Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Thu, 2 Mar 2023 22:27:20 +0100 Subject: [PATCH 19/47] Add more documentation to the constants --- packages/framework/src/Framework/Services/AssetService.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/framework/src/Framework/Services/AssetService.php b/packages/framework/src/Framework/Services/AssetService.php index f9a5c7cd1b2..24085c4d0cd 100644 --- a/packages/framework/src/Framework/Services/AssetService.php +++ b/packages/framework/src/Framework/Services/AssetService.php @@ -17,10 +17,10 @@ */ class AssetService { - /** @var string The default HydeFront version to load. */ + /** @var string The default HydeFront version to load. This constant is set to match the styles used for the installed framework version. */ public final const HYDEFRONT_VERSION = 'v2.0'; - /** @var string The default HydeFront CDN path pattern. */ + /** @var string The default HydeFront CDN path pattern. The Blade-style placeholders are replaced with the proper values. */ public final const HYDEFRONT_CDN_URL = 'https://cdn.jsdelivr.net/npm/hydefront@{{ $version }}/dist/{{ $file }}'; /** From aa4546f30a432d870498f07f4ccff533deaa0e8a Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Thu, 2 Mar 2023 22:28:45 +0100 Subject: [PATCH 20/47] Update config files to match --- packages/framework/config/hyde.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/framework/config/hyde.php b/packages/framework/config/hyde.php index 5bc3b78744d..4a1fbf132d8 100644 --- a/packages/framework/config/hyde.php +++ b/packages/framework/config/hyde.php @@ -433,7 +433,7 @@ // Here you can specify HydeFront version and URL for when loading app.css from the CDN. // Only change these if you know what you're doing as some versions may incompatible with your Hyde version. - // 'hydefront_version' => '', - // 'hydefront_cdn_url' => '' + 'hydefront_version' => \Hyde\Framework\Services\AssetService::HYDEFRONT_VERSION, + 'hydefront_cdn_url' => \Hyde\Framework\Services\AssetService::HYDEFRONT_CDN_URL, ]; From 9b494d4d34e8c63b1e26e8eb33adf92ce4305238 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Thu, 2 Mar 2023 22:29:09 +0100 Subject: [PATCH 21/47] Set default property value to the constant --- packages/framework/src/Framework/Services/AssetService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/framework/src/Framework/Services/AssetService.php b/packages/framework/src/Framework/Services/AssetService.php index 24085c4d0cd..da3ddc8e835 100644 --- a/packages/framework/src/Framework/Services/AssetService.php +++ b/packages/framework/src/Framework/Services/AssetService.php @@ -30,7 +30,7 @@ class AssetService */ public string $version = self::HYDEFRONT_VERSION; - protected ?string $hydefrontUrl = null; + protected ?string $hydefrontUrl = self::HYDEFRONT_CDN_URL; public function __construct() { From 2b8eeb777a10b4b858797742d4ac98961e81de9d Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Thu, 2 Mar 2023 22:30:21 +0100 Subject: [PATCH 22/47] Protected property $hydefrontUrl is no longer nullable --- packages/framework/src/Framework/Services/AssetService.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/framework/src/Framework/Services/AssetService.php b/packages/framework/src/Framework/Services/AssetService.php index da3ddc8e835..e72ed274ab0 100644 --- a/packages/framework/src/Framework/Services/AssetService.php +++ b/packages/framework/src/Framework/Services/AssetService.php @@ -30,7 +30,7 @@ class AssetService */ public string $version = self::HYDEFRONT_VERSION; - protected ?string $hydefrontUrl = self::HYDEFRONT_CDN_URL; + protected string $hydefrontUrl = self::HYDEFRONT_CDN_URL; public function __construct() { @@ -80,7 +80,7 @@ protected function constructCdnPath(string $file): string { return str_replace( ['{{ $version }}', '{{ $file }}'], [$this->version(), $file], - $this->hydefrontUrl ?? self::HYDEFRONT_CDN_URL + $this->hydefrontUrl ); } From 605a29fbbc53cc9e56fa7940f179c7ec452e71b1 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Thu, 2 Mar 2023 22:31:03 +0100 Subject: [PATCH 23/47] Use the strongly typed config facade --- packages/framework/src/Framework/Services/AssetService.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/framework/src/Framework/Services/AssetService.php b/packages/framework/src/Framework/Services/AssetService.php index e72ed274ab0..ffa9256ec9c 100644 --- a/packages/framework/src/Framework/Services/AssetService.php +++ b/packages/framework/src/Framework/Services/AssetService.php @@ -5,6 +5,7 @@ namespace Hyde\Framework\Services; use Hyde\Hyde; +use Hyde\Facades\Config; use Illuminate\Support\Str; use function str_contains; @@ -35,11 +36,11 @@ class AssetService public function __construct() { if (config('hyde.hydefront_version')) { - $this->version = config('hyde.hydefront_version'); + $this->version = Config::getString('hyde.hydefront_version'); } if (config('hyde.hydefront_url')) { - $this->hydefrontUrl = config('hyde.hydefront_url'); + $this->hydefrontUrl = Config::getString('hyde.hydefront_url'); } } From df97da752c4d5badd8efafecb4d58ae60e1099bc Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Thu, 2 Mar 2023 22:32:03 +0100 Subject: [PATCH 24/47] Use the strongly typed config facade --- packages/framework/src/Framework/Services/AssetService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/framework/src/Framework/Services/AssetService.php b/packages/framework/src/Framework/Services/AssetService.php index ffa9256ec9c..852bcfcd275 100644 --- a/packages/framework/src/Framework/Services/AssetService.php +++ b/packages/framework/src/Framework/Services/AssetService.php @@ -87,7 +87,7 @@ protected function constructCdnPath(string $file): string protected function getCacheBustKey(string $file): string { - if (! config('hyde.cache_busting', true)) { + if (! Config::getBool('hyde.cache_busting', true)) { return ''; } From 3c2ee4e55d824a9f7979093be37180c4ecd16b25 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Thu, 2 Mar 2023 22:33:13 +0100 Subject: [PATCH 25/47] Replace conditional configuration assignments with default values --- .../framework/src/Framework/Services/AssetService.php | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/packages/framework/src/Framework/Services/AssetService.php b/packages/framework/src/Framework/Services/AssetService.php index 852bcfcd275..a7e7ed9f6ef 100644 --- a/packages/framework/src/Framework/Services/AssetService.php +++ b/packages/framework/src/Framework/Services/AssetService.php @@ -35,13 +35,9 @@ class AssetService public function __construct() { - if (config('hyde.hydefront_version')) { - $this->version = Config::getString('hyde.hydefront_version'); - } + $this->version = Config::getString('hyde.hydefront_version', self::HYDEFRONT_VERSION); - if (config('hyde.hydefront_url')) { - $this->hydefrontUrl = Config::getString('hyde.hydefront_url'); - } + $this->hydefrontUrl = Config::getString('hyde.hydefront_url', self::HYDEFRONT_CDN_URL); } public function version(): string From e6096359e2989519690930f73bfa3caafb362dc8 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Thu, 2 Mar 2023 22:33:25 +0100 Subject: [PATCH 26/47] Remove newline --- packages/framework/src/Framework/Services/AssetService.php | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/framework/src/Framework/Services/AssetService.php b/packages/framework/src/Framework/Services/AssetService.php index a7e7ed9f6ef..2d14fa1818e 100644 --- a/packages/framework/src/Framework/Services/AssetService.php +++ b/packages/framework/src/Framework/Services/AssetService.php @@ -36,7 +36,6 @@ class AssetService public function __construct() { $this->version = Config::getString('hyde.hydefront_version', self::HYDEFRONT_VERSION); - $this->hydefrontUrl = Config::getString('hyde.hydefront_url', self::HYDEFRONT_CDN_URL); } From 209aef8ac963ab8680c84c5faca58bfaf1b68c69 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Thu, 2 Mar 2023 22:35:30 +0100 Subject: [PATCH 27/47] Merge PHPDoc into single sentence --- packages/framework/src/Framework/Services/AssetService.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/framework/src/Framework/Services/AssetService.php b/packages/framework/src/Framework/Services/AssetService.php index 2d14fa1818e..ada1cee8a95 100644 --- a/packages/framework/src/Framework/Services/AssetService.php +++ b/packages/framework/src/Framework/Services/AssetService.php @@ -25,9 +25,7 @@ class AssetService public final const HYDEFRONT_CDN_URL = 'https://cdn.jsdelivr.net/npm/hydefront@{{ $version }}/dist/{{ $file }}'; /** - * The HydeFront version to load. - * - * @var string HydeFront SemVer Tag + * @var string The HydeFront SemVer Tag to load. */ public string $version = self::HYDEFRONT_VERSION; From 7a4761c875c955e92971869a6fa18681fc914c99 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Thu, 2 Mar 2023 22:35:45 +0100 Subject: [PATCH 28/47] Collapse PHPDoc --- packages/framework/src/Framework/Services/AssetService.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/framework/src/Framework/Services/AssetService.php b/packages/framework/src/Framework/Services/AssetService.php index ada1cee8a95..2908167c035 100644 --- a/packages/framework/src/Framework/Services/AssetService.php +++ b/packages/framework/src/Framework/Services/AssetService.php @@ -24,9 +24,7 @@ class AssetService /** @var string The default HydeFront CDN path pattern. The Blade-style placeholders are replaced with the proper values. */ public final const HYDEFRONT_CDN_URL = 'https://cdn.jsdelivr.net/npm/hydefront@{{ $version }}/dist/{{ $file }}'; - /** - * @var string The HydeFront SemVer Tag to load. - */ + /** @var string The HydeFront SemVer Tag to load. */ public string $version = self::HYDEFRONT_VERSION; protected string $hydefrontUrl = self::HYDEFRONT_CDN_URL; From f52d50741e764b8bd8042f11d522c167f8d02f46 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Thu, 2 Mar 2023 22:36:12 +0100 Subject: [PATCH 29/47] Remove unnecessary type annotation --- packages/framework/src/Framework/Services/AssetService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/framework/src/Framework/Services/AssetService.php b/packages/framework/src/Framework/Services/AssetService.php index 2908167c035..954d5b036d1 100644 --- a/packages/framework/src/Framework/Services/AssetService.php +++ b/packages/framework/src/Framework/Services/AssetService.php @@ -24,7 +24,7 @@ class AssetService /** @var string The default HydeFront CDN path pattern. The Blade-style placeholders are replaced with the proper values. */ public final const HYDEFRONT_CDN_URL = 'https://cdn.jsdelivr.net/npm/hydefront@{{ $version }}/dist/{{ $file }}'; - /** @var string The HydeFront SemVer Tag to load. */ + /** The HydeFront SemVer Tag to load. */ public string $version = self::HYDEFRONT_VERSION; protected string $hydefrontUrl = self::HYDEFRONT_CDN_URL; From 9ce0373834730520b330807b29979b9cb1b971a7 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Thu, 2 Mar 2023 22:37:37 +0100 Subject: [PATCH 30/47] Update class documentation --- packages/framework/src/Framework/Services/AssetService.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/framework/src/Framework/Services/AssetService.php b/packages/framework/src/Framework/Services/AssetService.php index 954d5b036d1..0ccfc1bdced 100644 --- a/packages/framework/src/Framework/Services/AssetService.php +++ b/packages/framework/src/Framework/Services/AssetService.php @@ -14,6 +14,9 @@ * * This class is loaded into the service container, making it easy to access and modify. * + * The class also provides helper methods for interacting with versioned files, + * as well as the HydeFront CDN service and the media directories. + * * @see \Hyde\Facades\Asset */ class AssetService From ea80505f12da6dea510be1d0b2278980ada95f75 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Thu, 2 Mar 2023 22:38:40 +0100 Subject: [PATCH 31/47] Unwrap unnecessary string interpolation --- packages/framework/src/Framework/Services/AssetService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/framework/src/Framework/Services/AssetService.php b/packages/framework/src/Framework/Services/AssetService.php index 0ccfc1bdced..2d7f108f4a4 100644 --- a/packages/framework/src/Framework/Services/AssetService.php +++ b/packages/framework/src/Framework/Services/AssetService.php @@ -50,7 +50,7 @@ public function cdnLink(string $file): string public function mediaLink(string $file): string { - return Hyde::mediaLink("$file").$this->getCacheBustKey($file); + return Hyde::mediaLink($file).$this->getCacheBustKey($file); } public function hasMediaFile(string $file): bool From de8127415b0964c625f627f13ffd13d2acba04d4 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Thu, 2 Mar 2023 22:40:51 +0100 Subject: [PATCH 32/47] Unit test the media file helper --- .../framework/tests/Unit/AssetServiceUnitTest.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/packages/framework/tests/Unit/AssetServiceUnitTest.php b/packages/framework/tests/Unit/AssetServiceUnitTest.php index 86da67cea7e..17d69032a31 100644 --- a/packages/framework/tests/Unit/AssetServiceUnitTest.php +++ b/packages/framework/tests/Unit/AssetServiceUnitTest.php @@ -105,6 +105,18 @@ public function testCdnLinkHelper() $this->assertSame('https://cdn.jsdelivr.net/npm/hydefront@v2.0/dist/styles.css', $path); } + public function testHasMediaFileHelper() + { + $service = new AssetService(); + $this->assertFalse($service->hasMediaFile('styles.css')); + } + + public function testHasMediaFileHelperReturnsTrueForExistingFile() + { + $service = new AssetService(); + $this->assertTrue($service->hasMediaFile('app.css')); + } + public function testInjectTailwindConfigReturnsExtractedTailwindConfig() { $service = new AssetService(); From dced2b5c691b998d1a1a49212a3dd49bc6e3e823 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Thu, 2 Mar 2023 22:43:00 +0100 Subject: [PATCH 33/47] Inline unnecessary local test variables --- .../tests/Unit/AssetServiceUnitTest.php | 30 +++++++------------ 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/packages/framework/tests/Unit/AssetServiceUnitTest.php b/packages/framework/tests/Unit/AssetServiceUnitTest.php index 17d69032a31..a6cfe67d305 100644 --- a/packages/framework/tests/Unit/AssetServiceUnitTest.php +++ b/packages/framework/tests/Unit/AssetServiceUnitTest.php @@ -27,14 +27,12 @@ public function testVersionStringConstant() public function testServiceHasVersionString() { - $service = new AssetService(); - $this->assertIsString($service->version); + $this->assertIsString((new AssetService())->version); } public function testVersionStringDefaultsToConstant() { - $service = new AssetService(); - $this->assertSame(AssetService::HYDEFRONT_VERSION, $service->version); + $this->assertSame(AssetService::HYDEFRONT_VERSION, (new AssetService())->version); } public function testCanChangeVersion() @@ -47,8 +45,7 @@ public function testCanChangeVersion() public function testVersionCanBeSetInConfig() { self::mockConfig(['hyde.hydefront_version' => '1.0.0']); - $service = new AssetService(); - $this->assertSame('1.0.0', $service->version()); + $this->assertSame('1.0.0', (new AssetService())->version()); } public function testCdnPatternConstant() @@ -59,29 +56,25 @@ public function testCdnPatternConstant() public function testCanSetCustomCdnUrlInConfig() { self::mockConfig(['hyde.hydefront_url' => 'https://example.com']); - $service = new AssetService(); - $this->assertSame('https://example.com', $service->cdnLink('')); + $this->assertSame('https://example.com', (new AssetService())->cdnLink('')); } public function testCanUseCustomCdnUrlWithVersion() { self::mockConfig(['hyde.hydefront_url' => '{{ $version }}']); - $service = new AssetService(); - $this->assertSame('v2.0', $service->cdnLink('')); + $this->assertSame('v2.0', (new AssetService())->cdnLink('')); } public function testCanUseCustomCdnUrlWithFile() { self::mockConfig(['hyde.hydefront_url' => '{{ $file }}']); - $service = new AssetService(); - $this->assertSame('styles.css', $service->cdnLink('styles.css')); + $this->assertSame('styles.css', (new AssetService())->cdnLink('styles.css')); } public function testCanUseCustomCdnUrlWithVersionAndFile() { self::mockConfig(['hyde.hydefront_url' => '{{ $version }}/{{ $file }}']); - $service = new AssetService(); - $this->assertSame('v2.0/styles.css', $service->cdnLink('styles.css')); + $this->assertSame('v2.0/styles.css', (new AssetService())->cdnLink('styles.css')); } public function testCanUseCustomCdnUrlWithCustomVersion() @@ -100,21 +93,18 @@ public function testVersionMethodReturnsVersionProperty() public function testCdnLinkHelper() { - $service = new AssetService(); - $this->assertIsString($path = $service->cdnLink('styles.css')); + $this->assertIsString($path = (new AssetService())->cdnLink('styles.css')); $this->assertSame('https://cdn.jsdelivr.net/npm/hydefront@v2.0/dist/styles.css', $path); } public function testHasMediaFileHelper() { - $service = new AssetService(); - $this->assertFalse($service->hasMediaFile('styles.css')); + $this->assertFalse((new AssetService())->hasMediaFile('styles.css')); } public function testHasMediaFileHelperReturnsTrueForExistingFile() { - $service = new AssetService(); - $this->assertTrue($service->hasMediaFile('app.css')); + $this->assertTrue((new AssetService())->hasMediaFile('app.css')); } public function testInjectTailwindConfigReturnsExtractedTailwindConfig() From 4d74db86e6d2e975eeaf167d3353ec73c73e6c72 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Thu, 2 Mar 2023 22:43:26 +0100 Subject: [PATCH 34/47] Unwrap unnecessary assertion covered by subsequent one --- packages/framework/tests/Unit/AssetServiceUnitTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/framework/tests/Unit/AssetServiceUnitTest.php b/packages/framework/tests/Unit/AssetServiceUnitTest.php index a6cfe67d305..da5d20f70a9 100644 --- a/packages/framework/tests/Unit/AssetServiceUnitTest.php +++ b/packages/framework/tests/Unit/AssetServiceUnitTest.php @@ -93,7 +93,7 @@ public function testVersionMethodReturnsVersionProperty() public function testCdnLinkHelper() { - $this->assertIsString($path = (new AssetService())->cdnLink('styles.css')); + $path = (new AssetService())->cdnLink('styles.css'); $this->assertSame('https://cdn.jsdelivr.net/npm/hydefront@v2.0/dist/styles.css', $path); } From 2fa043ed41c70ec7ea46506172da122ec30cef0f Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Thu, 2 Mar 2023 22:43:53 +0100 Subject: [PATCH 35/47] Inline local variable --- packages/framework/tests/Unit/AssetServiceUnitTest.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/framework/tests/Unit/AssetServiceUnitTest.php b/packages/framework/tests/Unit/AssetServiceUnitTest.php index da5d20f70a9..047492a555c 100644 --- a/packages/framework/tests/Unit/AssetServiceUnitTest.php +++ b/packages/framework/tests/Unit/AssetServiceUnitTest.php @@ -93,8 +93,7 @@ public function testVersionMethodReturnsVersionProperty() public function testCdnLinkHelper() { - $path = (new AssetService())->cdnLink('styles.css'); - $this->assertSame('https://cdn.jsdelivr.net/npm/hydefront@v2.0/dist/styles.css', $path); + $this->assertSame('https://cdn.jsdelivr.net/npm/hydefront@v2.0/dist/styles.css', (new AssetService())->cdnLink('styles.css')); } public function testHasMediaFileHelper() From 91ae41e43f01798e6c06b3f51fbe7eb98a18a495 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Thu, 2 Mar 2023 22:44:02 +0100 Subject: [PATCH 36/47] Split comma-separated values into multiple lines --- packages/framework/tests/Unit/AssetServiceUnitTest.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/framework/tests/Unit/AssetServiceUnitTest.php b/packages/framework/tests/Unit/AssetServiceUnitTest.php index 047492a555c..c426f5499de 100644 --- a/packages/framework/tests/Unit/AssetServiceUnitTest.php +++ b/packages/framework/tests/Unit/AssetServiceUnitTest.php @@ -93,7 +93,10 @@ public function testVersionMethodReturnsVersionProperty() public function testCdnLinkHelper() { - $this->assertSame('https://cdn.jsdelivr.net/npm/hydefront@v2.0/dist/styles.css', (new AssetService())->cdnLink('styles.css')); + $this->assertSame( + 'https://cdn.jsdelivr.net/npm/hydefront@v2.0/dist/styles.css', + (new AssetService())->cdnLink('styles.css') + ); } public function testHasMediaFileHelper() From 32d25f36f4c73be76fdd158cdedb03096329b7d2 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Thu, 2 Mar 2023 22:44:35 +0100 Subject: [PATCH 37/47] Merge concatenated string into helper method as it supports arguments --- packages/framework/src/Framework/Services/AssetService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/framework/src/Framework/Services/AssetService.php b/packages/framework/src/Framework/Services/AssetService.php index 2d7f108f4a4..91462f8469d 100644 --- a/packages/framework/src/Framework/Services/AssetService.php +++ b/packages/framework/src/Framework/Services/AssetService.php @@ -55,7 +55,7 @@ public function mediaLink(string $file): string public function hasMediaFile(string $file): bool { - return file_exists(Hyde::mediaPath().'/'.$file); + return file_exists(Hyde::mediaPath($file)); } public function injectTailwindConfig(): string From b811c1013cfe74894bca72cab306f72d2a076f27 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Thu, 2 Mar 2023 22:45:33 +0100 Subject: [PATCH 38/47] Simplify 'if' with ternary return expression --- .../framework/src/Framework/Services/AssetService.php | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/packages/framework/src/Framework/Services/AssetService.php b/packages/framework/src/Framework/Services/AssetService.php index 91462f8469d..5f7ae83455e 100644 --- a/packages/framework/src/Framework/Services/AssetService.php +++ b/packages/framework/src/Framework/Services/AssetService.php @@ -81,10 +81,8 @@ protected function constructCdnPath(string $file): string protected function getCacheBustKey(string $file): string { - if (! Config::getBool('hyde.cache_busting', true)) { - return ''; - } - - return '?v='.md5_file(Hyde::mediaPath("$file")); + return ! Config::getBool('hyde.cache_busting', true) + ? '' + : '?v='.md5_file(Hyde::mediaPath("$file")); } } From 37122a3ca5869678da924dc1932bcda6950435ca Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Thu, 2 Mar 2023 22:45:39 +0100 Subject: [PATCH 39/47] Flip '?:' --- packages/framework/src/Framework/Services/AssetService.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/framework/src/Framework/Services/AssetService.php b/packages/framework/src/Framework/Services/AssetService.php index 5f7ae83455e..6be27648f38 100644 --- a/packages/framework/src/Framework/Services/AssetService.php +++ b/packages/framework/src/Framework/Services/AssetService.php @@ -81,8 +81,8 @@ protected function constructCdnPath(string $file): string protected function getCacheBustKey(string $file): string { - return ! Config::getBool('hyde.cache_busting', true) - ? '' - : '?v='.md5_file(Hyde::mediaPath("$file")); + return Config::getBool('hyde.cache_busting', true) + ? '?v='.md5_file(Hyde::mediaPath("$file")) + : ''; } } From 8d8daccd3813f276f4c42dcc8fc09601848cb7ca Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Thu, 2 Mar 2023 22:48:21 +0100 Subject: [PATCH 40/47] Breaking: Rename `hyde.cache_busting` to `hyde.enable_cache_busting` Changed to normalize config setting names, as similar options also use the verb form. --- config/hyde.php | 2 +- packages/framework/config/hyde.php | 2 +- packages/framework/src/Framework/Services/AssetService.php | 2 +- packages/framework/tests/Feature/AssetServiceTest.php | 2 +- packages/framework/tests/Feature/MetadataViewTest.php | 2 +- .../tests/Unit/RelativeLinksAcrossPagesRetainsIntegrityTest.php | 2 +- .../framework/tests/Unit/Views/ScriptsComponentViewTest.php | 2 +- packages/framework/tests/Unit/Views/StylesComponentViewTest.php | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/config/hyde.php b/config/hyde.php index 4a1fbf132d8..df347ef4f49 100644 --- a/config/hyde.php +++ b/config/hyde.php @@ -354,7 +354,7 @@ | */ - 'cache_busting' => true, + 'enable_cache_busting' => true, /* |-------------------------------------------------------------------------- diff --git a/packages/framework/config/hyde.php b/packages/framework/config/hyde.php index 4a1fbf132d8..df347ef4f49 100644 --- a/packages/framework/config/hyde.php +++ b/packages/framework/config/hyde.php @@ -354,7 +354,7 @@ | */ - 'cache_busting' => true, + 'enable_cache_busting' => true, /* |-------------------------------------------------------------------------- diff --git a/packages/framework/src/Framework/Services/AssetService.php b/packages/framework/src/Framework/Services/AssetService.php index 6be27648f38..85950203e2e 100644 --- a/packages/framework/src/Framework/Services/AssetService.php +++ b/packages/framework/src/Framework/Services/AssetService.php @@ -81,7 +81,7 @@ protected function constructCdnPath(string $file): string protected function getCacheBustKey(string $file): string { - return Config::getBool('hyde.cache_busting', true) + return Config::getBool('hyde.enable_cache_busting', true) ? '?v='.md5_file(Hyde::mediaPath("$file")) : ''; } diff --git a/packages/framework/tests/Feature/AssetServiceTest.php b/packages/framework/tests/Feature/AssetServiceTest.php index 4fbc8b99858..0f36c294238 100644 --- a/packages/framework/tests/Feature/AssetServiceTest.php +++ b/packages/framework/tests/Feature/AssetServiceTest.php @@ -24,7 +24,7 @@ public function test_media_link_returns_media_path_with_cache_key() public function test_media_link_returns_media_path_without_cache_key_if_cache_busting_is_disabled() { - config(['hyde.cache_busting' => false]); + config(['hyde.enable_cache_busting' => false]); $service = new AssetService(); $this->assertIsString($path = $service->mediaLink('app.css')); $this->assertEquals('media/app.css', $path); diff --git a/packages/framework/tests/Feature/MetadataViewTest.php b/packages/framework/tests/Feature/MetadataViewTest.php index 6a1f28ecb65..ebebb5cc425 100644 --- a/packages/framework/tests/Feature/MetadataViewTest.php +++ b/packages/framework/tests/Feature/MetadataViewTest.php @@ -26,7 +26,7 @@ protected function setUp(): void parent::setUp(); config(['hyde.url' => 'http://localhost']); - config(['hyde.cache_busting' => false]); + config(['hyde.enable_cache_busting' => false]); } protected function build(?string $page = null): void diff --git a/packages/framework/tests/Unit/RelativeLinksAcrossPagesRetainsIntegrityTest.php b/packages/framework/tests/Unit/RelativeLinksAcrossPagesRetainsIntegrityTest.php index a6781f68d92..926444e5e33 100644 --- a/packages/framework/tests/Unit/RelativeLinksAcrossPagesRetainsIntegrityTest.php +++ b/packages/framework/tests/Unit/RelativeLinksAcrossPagesRetainsIntegrityTest.php @@ -25,7 +25,7 @@ protected function setUp(): void { parent::setUp(); - config(['hyde.cache_busting' => false]); + config(['hyde.enable_cache_busting' => false]); config(['hyde.navigation.subdirectories' => 'flat']); $this->needsDirectory('_pages/nested'); diff --git a/packages/framework/tests/Unit/Views/ScriptsComponentViewTest.php b/packages/framework/tests/Unit/Views/ScriptsComponentViewTest.php index 619dff9ffa4..cc40046fd21 100644 --- a/packages/framework/tests/Unit/Views/ScriptsComponentViewTest.php +++ b/packages/framework/tests/Unit/Views/ScriptsComponentViewTest.php @@ -18,7 +18,7 @@ class ScriptsComponentViewTest extends TestCase protected function renderTestView(): string { - config(['hyde.cache_busting' => false]); + config(['hyde.enable_cache_busting' => false]); $this->mockCurrentPage($this->mockCurrentPage ?? ''); return Blade::render(file_get_contents( diff --git a/packages/framework/tests/Unit/Views/StylesComponentViewTest.php b/packages/framework/tests/Unit/Views/StylesComponentViewTest.php index 91b1f073258..bde50cca974 100644 --- a/packages/framework/tests/Unit/Views/StylesComponentViewTest.php +++ b/packages/framework/tests/Unit/Views/StylesComponentViewTest.php @@ -21,7 +21,7 @@ class StylesComponentViewTest extends TestCase protected function renderTestView(): string { - config(['hyde.cache_busting' => false]); + config(['hyde.enable_cache_busting' => false]); $this->mockCurrentPage($this->mockCurrentPage ?? ''); return Blade::render(file_get_contents( From 95e9469cfe9a5b81ed77128de8a14dbed84f8e46 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Thu, 2 Mar 2023 22:57:02 +0100 Subject: [PATCH 41/47] Document string replacements --- packages/framework/src/Framework/Services/AssetService.php | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/framework/src/Framework/Services/AssetService.php b/packages/framework/src/Framework/Services/AssetService.php index 85950203e2e..c64eb37f832 100644 --- a/packages/framework/src/Framework/Services/AssetService.php +++ b/packages/framework/src/Framework/Services/AssetService.php @@ -62,6 +62,7 @@ public function injectTailwindConfig(): string { $config = Str::between(file_get_contents(Hyde::path('tailwind.config.js')), '{', '}'); + // Remove the plugins array, as it is not needed in the frontend. if (str_contains($config, 'plugins: [')) { $tokens = explode('plugins: [', $config, 2); $tokens[1] = Str::after($tokens[1], ']'); From 93f2c9c91f61525b93fc231955ef23f4c17c8563 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Fri, 3 Mar 2023 10:14:31 +0100 Subject: [PATCH 42/47] Update code comment --- packages/framework/src/Framework/Services/AssetService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/framework/src/Framework/Services/AssetService.php b/packages/framework/src/Framework/Services/AssetService.php index c64eb37f832..7c03b2ffaa3 100644 --- a/packages/framework/src/Framework/Services/AssetService.php +++ b/packages/framework/src/Framework/Services/AssetService.php @@ -62,7 +62,7 @@ public function injectTailwindConfig(): string { $config = Str::between(file_get_contents(Hyde::path('tailwind.config.js')), '{', '}'); - // Remove the plugins array, as it is not needed in the frontend. + // Remove the plugins array, as it is not used in the frontend. if (str_contains($config, 'plugins: [')) { $tokens = explode('plugins: [', $config, 2); $tokens[1] = Str::after($tokens[1], ']'); From bcaf73ef12b57fbd701a4d5483ec2f31c8ba889e Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Fri, 3 Mar 2023 10:14:19 +0100 Subject: [PATCH 43/47] Merge property annotation into constant annotation --- packages/framework/src/Framework/Services/AssetService.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/framework/src/Framework/Services/AssetService.php b/packages/framework/src/Framework/Services/AssetService.php index 7c03b2ffaa3..f5088776e2d 100644 --- a/packages/framework/src/Framework/Services/AssetService.php +++ b/packages/framework/src/Framework/Services/AssetService.php @@ -21,13 +21,12 @@ */ class AssetService { - /** @var string The default HydeFront version to load. This constant is set to match the styles used for the installed framework version. */ + /** @var string The default HydeFront SemVer tag to load. This constant is set to match the styles used for the installed framework version. */ public final const HYDEFRONT_VERSION = 'v2.0'; /** @var string The default HydeFront CDN path pattern. The Blade-style placeholders are replaced with the proper values. */ public final const HYDEFRONT_CDN_URL = 'https://cdn.jsdelivr.net/npm/hydefront@{{ $version }}/dist/{{ $file }}'; - /** The HydeFront SemVer Tag to load. */ public string $version = self::HYDEFRONT_VERSION; protected string $hydefrontUrl = self::HYDEFRONT_CDN_URL; From 33f1cbc1dfb219fe1ebd816cc9c39bdba0a9ba69 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Fri, 3 Mar 2023 10:18:28 +0100 Subject: [PATCH 44/47] Breaking: Make public AssetService::$version property protected There is already a convenient place to set this property, using the config value in the constructor, and there is a public accessor method. --- .../src/Framework/Services/AssetService.php | 2 +- .../tests/Unit/AssetServiceUnitTest.php | 23 +++++-------------- 2 files changed, 7 insertions(+), 18 deletions(-) diff --git a/packages/framework/src/Framework/Services/AssetService.php b/packages/framework/src/Framework/Services/AssetService.php index f5088776e2d..99b59a8238e 100644 --- a/packages/framework/src/Framework/Services/AssetService.php +++ b/packages/framework/src/Framework/Services/AssetService.php @@ -27,7 +27,7 @@ class AssetService /** @var string The default HydeFront CDN path pattern. The Blade-style placeholders are replaced with the proper values. */ public final const HYDEFRONT_CDN_URL = 'https://cdn.jsdelivr.net/npm/hydefront@{{ $version }}/dist/{{ $file }}'; - public string $version = self::HYDEFRONT_VERSION; + protected string $version = self::HYDEFRONT_VERSION; protected string $hydefrontUrl = self::HYDEFRONT_CDN_URL; diff --git a/packages/framework/tests/Unit/AssetServiceUnitTest.php b/packages/framework/tests/Unit/AssetServiceUnitTest.php index c426f5499de..156d9f8aba9 100644 --- a/packages/framework/tests/Unit/AssetServiceUnitTest.php +++ b/packages/framework/tests/Unit/AssetServiceUnitTest.php @@ -27,19 +27,12 @@ public function testVersionStringConstant() public function testServiceHasVersionString() { - $this->assertIsString((new AssetService())->version); + $this->assertIsString((new AssetService())->version()); } public function testVersionStringDefaultsToConstant() { - $this->assertSame(AssetService::HYDEFRONT_VERSION, (new AssetService())->version); - } - - public function testCanChangeVersion() - { - $service = new AssetService(); - $service->version = '1.0.0'; - $this->assertSame('1.0.0', $service->version); + $this->assertSame(AssetService::HYDEFRONT_VERSION, (new AssetService())->version()); } public function testVersionCanBeSetInConfig() @@ -79,18 +72,14 @@ public function testCanUseCustomCdnUrlWithVersionAndFile() public function testCanUseCustomCdnUrlWithCustomVersion() { - self::mockConfig(['hyde.hydefront_url' => '{{ $version }}']); + self::mockConfig([ + 'hyde.hydefront_url' => '{{ $version }}', + 'hyde.hydefront_version' => '1.0.0', + ]); $service = new AssetService(); - $service->version = '1.0.0'; $this->assertSame('1.0.0', $service->cdnLink('')); } - public function testVersionMethodReturnsVersionProperty() - { - $service = new AssetService(); - $this->assertSame($service->version, $service->version()); - } - public function testCdnLinkHelper() { $this->assertSame( From 3ab44e57f34a5ff033638fa33937314961e1be8d Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Fri, 3 Mar 2023 10:18:35 +0100 Subject: [PATCH 45/47] Inline variable --- packages/framework/tests/Unit/AssetServiceUnitTest.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/framework/tests/Unit/AssetServiceUnitTest.php b/packages/framework/tests/Unit/AssetServiceUnitTest.php index 156d9f8aba9..4ab275e48dc 100644 --- a/packages/framework/tests/Unit/AssetServiceUnitTest.php +++ b/packages/framework/tests/Unit/AssetServiceUnitTest.php @@ -76,8 +76,7 @@ public function testCanUseCustomCdnUrlWithCustomVersion() 'hyde.hydefront_url' => '{{ $version }}', 'hyde.hydefront_version' => '1.0.0', ]); - $service = new AssetService(); - $this->assertSame('1.0.0', $service->cdnLink('')); + $this->assertSame('1.0.0', (new AssetService())->cdnLink('')); } public function testCdnLinkHelper() From d9f4efd4b5915e0f3e06fc8e5b8b7c57411556fd Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Fri, 3 Mar 2023 10:21:18 +0100 Subject: [PATCH 46/47] Rename protected property to cdnUrl to normalize class naming styles --- packages/framework/src/Framework/Services/AssetService.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/framework/src/Framework/Services/AssetService.php b/packages/framework/src/Framework/Services/AssetService.php index 99b59a8238e..0ef3530f0da 100644 --- a/packages/framework/src/Framework/Services/AssetService.php +++ b/packages/framework/src/Framework/Services/AssetService.php @@ -29,12 +29,12 @@ class AssetService protected string $version = self::HYDEFRONT_VERSION; - protected string $hydefrontUrl = self::HYDEFRONT_CDN_URL; + protected string $cdnUrl = self::HYDEFRONT_CDN_URL; public function __construct() { $this->version = Config::getString('hyde.hydefront_version', self::HYDEFRONT_VERSION); - $this->hydefrontUrl = Config::getString('hyde.hydefront_url', self::HYDEFRONT_CDN_URL); + $this->cdnUrl = Config::getString('hyde.hydefront_url', self::HYDEFRONT_CDN_URL); } public function version(): string @@ -75,7 +75,7 @@ protected function constructCdnPath(string $file): string { return str_replace( ['{{ $version }}', '{{ $file }}'], [$this->version(), $file], - $this->hydefrontUrl + $this->cdnUrl ); } From 858cd8d9ecf9e185e2f68eec15abbea7278a7d34 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Fri, 3 Mar 2023 10:21:33 +0100 Subject: [PATCH 47/47] Remove newline between properties --- packages/framework/src/Framework/Services/AssetService.php | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/framework/src/Framework/Services/AssetService.php b/packages/framework/src/Framework/Services/AssetService.php index 0ef3530f0da..8b95248a17a 100644 --- a/packages/framework/src/Framework/Services/AssetService.php +++ b/packages/framework/src/Framework/Services/AssetService.php @@ -28,7 +28,6 @@ class AssetService public final const HYDEFRONT_CDN_URL = 'https://cdn.jsdelivr.net/npm/hydefront@{{ $version }}/dist/{{ $file }}'; protected string $version = self::HYDEFRONT_VERSION; - protected string $cdnUrl = self::HYDEFRONT_CDN_URL; public function __construct()