From 12bb5509d5be888ba175906613e371340943e2e2 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 23 Feb 2026 03:50:06 +0000 Subject: [PATCH] chore: fix pint code style and add test config Add phpunit.xml and tests/Pest.php for standalone test execution. Apply Laravel Pint formatting fixes across all source files. Co-Authored-By: Claude Opus 4.6 --- Boot.php | 2 +- Console/Commands/ContentImportWordPress.php | 2 +- Console/Commands/ProcessPendingWebhooks.php | 2 +- Console/Commands/PruneContentRevisions.php | 2 +- Console/Commands/PublishScheduledContent.php | 2 +- Controllers/Api/ContentBriefController.php | 6 +-- Controllers/Api/ContentMediaController.php | 4 +- Controllers/Api/ContentRevisionController.php | 6 +-- Controllers/Api/ContentSearchController.php | 4 +- Controllers/Api/ContentWebhookController.php | 11 ++---- Controllers/Api/GenerationController.php | 6 +-- Controllers/ContentPreviewController.php | 2 +- Jobs/GenerateContentJob.php | 4 +- Jobs/ProcessContentWebhook.php | 12 +++--- Mcp/Handlers/ContentCreateHandler.php | 8 ++-- Mcp/Handlers/ContentDeleteHandler.php | 4 +- Mcp/Handlers/ContentListHandler.php | 2 +- Mcp/Handlers/ContentReadHandler.php | 2 +- Mcp/Handlers/ContentSearchHandler.php | 2 +- Mcp/Handlers/ContentTaxonomiesHandler.php | 2 +- Mcp/Handlers/ContentUpdateHandler.php | 6 +-- Middleware/WorkspaceRouter.php | 2 +- Models/AIUsage.php | 2 +- Models/ContentBrief.php | 4 +- Models/ContentItem.php | 8 ++-- Observers/ContentItemObserver.php | 2 +- Services/CdnPurgeService.php | 2 +- Services/ContentRender.php | 4 +- Services/ContentSearchService.php | 2 +- Services/WebhookDeliveryLogger.php | 14 ++----- Services/WebhookRetryService.php | 2 +- View/Modal/Admin/ContentSearch.php | 6 +-- View/Modal/Admin/WebhookManager.php | 4 +- View/Modal/Web/Blog.php | 2 +- View/Modal/Web/Help.php | 2 +- View/Modal/Web/HelpArticle.php | 2 +- View/Modal/Web/Post.php | 2 +- View/Modal/Web/Preview.php | 2 +- phpunit.xml | 39 +++++++++++++++++++ routes/api.php | 2 +- routes/web.php | 2 +- tests/Feature/ContentPreviewTest.php | 4 +- .../WebhookSignatureVerificationTest.php | 5 +-- tests/Pest.php | 7 ++++ tests/Unit/ContentSearchServiceTest.php | 4 +- tests/Unit/ProcessContentWebhookTest.php | 4 +- tests/Unit/WebhookDeliveryLoggerTest.php | 2 +- 47 files changed, 128 insertions(+), 94 deletions(-) create mode 100644 phpunit.xml create mode 100644 tests/Pest.php diff --git a/Boot.php b/Boot.php index cd2f02d..4dda2a5 100644 --- a/Boot.php +++ b/Boot.php @@ -8,11 +8,11 @@ use Core\Events\ApiRoutesRegistering; use Core\Events\ConsoleBooting; use Core\Events\McpToolsRegistering; use Core\Events\WebRoutesRegistering; +use Core\Mod\Content\Services\HtmlSanitiser; use Illuminate\Cache\RateLimiting\Limit; use Illuminate\Http\Request; use Illuminate\Support\Facades\RateLimiter; use Illuminate\Support\ServiceProvider; -use Core\Mod\Content\Services\HtmlSanitiser; use RuntimeException; /** diff --git a/Console/Commands/ContentImportWordPress.php b/Console/Commands/ContentImportWordPress.php index 0f4643c..48e7ea4 100644 --- a/Console/Commands/ContentImportWordPress.php +++ b/Console/Commands/ContentImportWordPress.php @@ -4,13 +4,13 @@ declare(strict_types=1); namespace Core\Mod\Content\Console\Commands; +use Carbon\Carbon; use Core\Mod\Content\Enums\ContentType; use Core\Mod\Content\Models\ContentAuthor; use Core\Mod\Content\Models\ContentItem; use Core\Mod\Content\Models\ContentMedia; use Core\Mod\Content\Models\ContentTaxonomy; use Core\Tenant\Models\Workspace; -use Carbon\Carbon; use Illuminate\Console\Command; use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Storage; diff --git a/Console/Commands/ProcessPendingWebhooks.php b/Console/Commands/ProcessPendingWebhooks.php index 67be26e..65ac4f3 100644 --- a/Console/Commands/ProcessPendingWebhooks.php +++ b/Console/Commands/ProcessPendingWebhooks.php @@ -4,9 +4,9 @@ declare(strict_types=1); namespace Core\Mod\Content\Console\Commands; +use Core\Mod\Content\Services\WebhookRetryService; use Illuminate\Console\Command; use Illuminate\Support\Facades\Log; -use Core\Mod\Content\Services\WebhookRetryService; /** * ProcessPendingWebhooks diff --git a/Console/Commands/PruneContentRevisions.php b/Console/Commands/PruneContentRevisions.php index 966df45..ab2197d 100644 --- a/Console/Commands/PruneContentRevisions.php +++ b/Console/Commands/PruneContentRevisions.php @@ -4,8 +4,8 @@ declare(strict_types=1); namespace Core\Mod\Content\Console\Commands; -use Illuminate\Console\Command; use Core\Mod\Content\Models\ContentRevision; +use Illuminate\Console\Command; /** * Prune old content revisions based on retention policy. diff --git a/Console/Commands/PublishScheduledContent.php b/Console/Commands/PublishScheduledContent.php index b6a0998..49dd1bc 100644 --- a/Console/Commands/PublishScheduledContent.php +++ b/Console/Commands/PublishScheduledContent.php @@ -4,9 +4,9 @@ declare(strict_types=1); namespace Core\Mod\Content\Console\Commands; +use Core\Mod\Content\Models\ContentItem; use Illuminate\Console\Command; use Illuminate\Support\Facades\Log; -use Core\Mod\Content\Models\ContentItem; /** * PublishScheduledContent diff --git a/Controllers/Api/ContentBriefController.php b/Controllers/Api/ContentBriefController.php index db7fdef..43c765a 100644 --- a/Controllers/Api/ContentBriefController.php +++ b/Controllers/Api/ContentBriefController.php @@ -4,13 +4,13 @@ declare(strict_types=1); namespace Core\Mod\Content\Controllers\Api; -use Core\Front\Controller; -use Illuminate\Http\JsonResponse; -use Illuminate\Http\Request; use Core\Api\Concerns\HasApiResponses; use Core\Api\Concerns\ResolvesWorkspace; +use Core\Front\Controller; use Core\Mod\Content\Models\ContentBrief; use Core\Mod\Content\Resources\ContentBriefResource; +use Illuminate\Http\JsonResponse; +use Illuminate\Http\Request; /** * Content Brief API Controller diff --git a/Controllers/Api/ContentMediaController.php b/Controllers/Api/ContentMediaController.php index 3f15d6c..083b904 100644 --- a/Controllers/Api/ContentMediaController.php +++ b/Controllers/Api/ContentMediaController.php @@ -4,14 +4,14 @@ declare(strict_types=1); namespace Core\Mod\Content\Controllers\Api; -use Core\Front\Controller; use Core\Api\Concerns\HasApiResponses; use Core\Api\Concerns\ResolvesWorkspace; +use Core\Front\Controller; +use Core\Mod\Content\Models\ContentMedia; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\Storage; use Illuminate\Support\Str; -use Core\Mod\Content\Models\ContentMedia; /** * Content Media API Controller diff --git a/Controllers/Api/ContentRevisionController.php b/Controllers/Api/ContentRevisionController.php index 989d0a7..ef1edc9 100644 --- a/Controllers/Api/ContentRevisionController.php +++ b/Controllers/Api/ContentRevisionController.php @@ -4,14 +4,14 @@ declare(strict_types=1); namespace Core\Mod\Content\Controllers\Api; -use Core\Front\Controller; use Core\Api\Concerns\HasApiResponses; use Core\Api\Concerns\ResolvesWorkspace; -use Illuminate\Http\JsonResponse; -use Illuminate\Http\Request; +use Core\Front\Controller; use Core\Mod\Content\Models\ContentItem; use Core\Mod\Content\Models\ContentRevision; use Core\Mod\Content\Resources\ContentRevisionResource; +use Illuminate\Http\JsonResponse; +use Illuminate\Http\Request; /** * Content Revision API Controller diff --git a/Controllers/Api/ContentSearchController.php b/Controllers/Api/ContentSearchController.php index cce16f2..659e7a2 100644 --- a/Controllers/Api/ContentSearchController.php +++ b/Controllers/Api/ContentSearchController.php @@ -4,12 +4,12 @@ declare(strict_types=1); namespace Core\Mod\Content\Controllers\Api; -use Core\Front\Controller; use Core\Api\Concerns\HasApiResponses; use Core\Api\Concerns\ResolvesWorkspace; +use Core\Front\Controller; +use Core\Mod\Content\Services\ContentSearchService; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; -use Core\Mod\Content\Services\ContentSearchService; /** * Content Search API Controller diff --git a/Controllers/Api/ContentWebhookController.php b/Controllers/Api/ContentWebhookController.php index f6e20d1..c510517 100644 --- a/Controllers/Api/ContentWebhookController.php +++ b/Controllers/Api/ContentWebhookController.php @@ -4,14 +4,13 @@ declare(strict_types=1); namespace Core\Mod\Content\Controllers\Api; +use Core\Mod\Content\Jobs\ProcessContentWebhook; +use Core\Mod\Content\Models\ContentWebhookEndpoint; +use Core\Mod\Content\Services\WebhookDeliveryLogger; use Illuminate\Http\Request; use Illuminate\Http\Response; use Illuminate\Routing\Controller; use Illuminate\Support\Facades\Log; -use Core\Mod\Content\Jobs\ProcessContentWebhook; -use Core\Mod\Content\Models\ContentWebhookEndpoint; -use Core\Mod\Content\Models\ContentWebhookLog; -use Core\Mod\Content\Services\WebhookDeliveryLogger; /** * Controller for receiving external content webhooks. @@ -29,8 +28,7 @@ class ContentWebhookController extends Controller { public function __construct( protected WebhookDeliveryLogger $deliveryLogger - ) { - } + ) {} /** * Receive a webhook from an external source. @@ -295,5 +293,4 @@ class ContentWebhookController extends Controller return 'wordpress.post_updated'; } - } diff --git a/Controllers/Api/GenerationController.php b/Controllers/Api/GenerationController.php index 869ca65..a4bc0f2 100644 --- a/Controllers/Api/GenerationController.php +++ b/Controllers/Api/GenerationController.php @@ -4,16 +4,16 @@ declare(strict_types=1); namespace Core\Mod\Content\Controllers\Api; -use Core\Front\Controller; -use Illuminate\Http\JsonResponse; -use Illuminate\Http\Request; use Core\Api\Concerns\HasApiResponses; use Core\Api\Concerns\ResolvesWorkspace; +use Core\Front\Controller; use Core\Mod\Content\Jobs\GenerateContentJob; use Core\Mod\Content\Models\AIUsage; use Core\Mod\Content\Models\ContentBrief; use Core\Mod\Content\Resources\ContentBriefResource; use Core\Mod\Content\Services\AIGatewayService; +use Illuminate\Http\JsonResponse; +use Illuminate\Http\Request; /** * Content Generation API Controller diff --git a/Controllers/ContentPreviewController.php b/Controllers/ContentPreviewController.php index ac69f6f..1c30b22 100644 --- a/Controllers/ContentPreviewController.php +++ b/Controllers/ContentPreviewController.php @@ -4,11 +4,11 @@ declare(strict_types=1); namespace Core\Mod\Content\Controllers; +use Core\Mod\Content\Models\ContentItem; use Core\Tenant\Models\Workspace; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Routing\Controller; -use Core\Mod\Content\Models\ContentItem; /** * ContentPreviewController - Preview draft content before publishing. diff --git a/Jobs/GenerateContentJob.php b/Jobs/GenerateContentJob.php index be24fe0..e2e6449 100644 --- a/Jobs/GenerateContentJob.php +++ b/Jobs/GenerateContentJob.php @@ -4,14 +4,14 @@ declare(strict_types=1); namespace Core\Mod\Content\Jobs; +use Core\Mod\Content\Models\ContentBrief; +use Core\Mod\Content\Services\AIGatewayService; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; use Illuminate\Support\Facades\Log; -use Core\Mod\Content\Models\ContentBrief; -use Core\Mod\Content\Services\AIGatewayService; /** * GenerateContentJob diff --git a/Jobs/ProcessContentWebhook.php b/Jobs/ProcessContentWebhook.php index 248b144..db9f52e 100644 --- a/Jobs/ProcessContentWebhook.php +++ b/Jobs/ProcessContentWebhook.php @@ -4,18 +4,18 @@ declare(strict_types=1); namespace Core\Mod\Content\Jobs; -use Illuminate\Bus\Queueable; -use Illuminate\Contracts\Queue\ShouldQueue; -use Illuminate\Foundation\Bus\Dispatchable; -use Illuminate\Queue\InteractsWithQueue; -use Illuminate\Queue\SerializesModels; -use Illuminate\Support\Facades\Log; use Core\Mod\Content\Enums\ContentType; use Core\Mod\Content\Models\ContentItem; use Core\Mod\Content\Models\ContentMedia; use Core\Mod\Content\Models\ContentTaxonomy; use Core\Mod\Content\Models\ContentWebhookEndpoint; use Core\Mod\Content\Models\ContentWebhookLog; +use Illuminate\Bus\Queueable; +use Illuminate\Contracts\Queue\ShouldQueue; +use Illuminate\Foundation\Bus\Dispatchable; +use Illuminate\Queue\InteractsWithQueue; +use Illuminate\Queue\SerializesModels; +use Illuminate\Support\Facades\Log; /** * Process incoming content webhooks. diff --git a/Mcp/Handlers/ContentCreateHandler.php b/Mcp/Handlers/ContentCreateHandler.php index 1dd61d5..226ff15 100644 --- a/Mcp/Handlers/ContentCreateHandler.php +++ b/Mcp/Handlers/ContentCreateHandler.php @@ -7,14 +7,14 @@ namespace Core\Mod\Content\Mcp\Handlers; use Carbon\Carbon; use Core\Front\Mcp\Contracts\McpToolHandler; use Core\Front\Mcp\McpContext; -use Core\Tenant\Models\Workspace; -use Core\Tenant\Services\EntitlementService; -use Illuminate\Support\Facades\Auth; -use Illuminate\Support\Str; use Core\Mod\Content\Enums\ContentType; use Core\Mod\Content\Models\ContentItem; use Core\Mod\Content\Models\ContentRevision; use Core\Mod\Content\Models\ContentTaxonomy; +use Core\Tenant\Models\Workspace; +use Core\Tenant\Services\EntitlementService; +use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Str; /** * MCP tool handler for creating content items. diff --git a/Mcp/Handlers/ContentDeleteHandler.php b/Mcp/Handlers/ContentDeleteHandler.php index 2ac4b9c..151357f 100644 --- a/Mcp/Handlers/ContentDeleteHandler.php +++ b/Mcp/Handlers/ContentDeleteHandler.php @@ -6,10 +6,10 @@ namespace Core\Mod\Content\Mcp\Handlers; use Core\Front\Mcp\Contracts\McpToolHandler; use Core\Front\Mcp\McpContext; -use Core\Tenant\Models\Workspace; -use Illuminate\Support\Facades\Auth; use Core\Mod\Content\Models\ContentItem; use Core\Mod\Content\Models\ContentRevision; +use Core\Tenant\Models\Workspace; +use Illuminate\Support\Facades\Auth; /** * MCP tool handler for deleting content items. diff --git a/Mcp/Handlers/ContentListHandler.php b/Mcp/Handlers/ContentListHandler.php index 72172f6..7274c73 100644 --- a/Mcp/Handlers/ContentListHandler.php +++ b/Mcp/Handlers/ContentListHandler.php @@ -6,9 +6,9 @@ namespace Core\Mod\Content\Mcp\Handlers; use Core\Front\Mcp\Contracts\McpToolHandler; use Core\Front\Mcp\McpContext; +use Core\Mod\Content\Models\ContentItem; use Core\Tenant\Models\Workspace; use Illuminate\Support\Str; -use Core\Mod\Content\Models\ContentItem; /** * MCP tool handler for listing content items. diff --git a/Mcp/Handlers/ContentReadHandler.php b/Mcp/Handlers/ContentReadHandler.php index 3c53139..3978ba2 100644 --- a/Mcp/Handlers/ContentReadHandler.php +++ b/Mcp/Handlers/ContentReadHandler.php @@ -6,8 +6,8 @@ namespace Core\Mod\Content\Mcp\Handlers; use Core\Front\Mcp\Contracts\McpToolHandler; use Core\Front\Mcp\McpContext; -use Core\Tenant\Models\Workspace; use Core\Mod\Content\Models\ContentItem; +use Core\Tenant\Models\Workspace; /** * MCP tool handler for reading content items. diff --git a/Mcp/Handlers/ContentSearchHandler.php b/Mcp/Handlers/ContentSearchHandler.php index 9b499fe..014a415 100644 --- a/Mcp/Handlers/ContentSearchHandler.php +++ b/Mcp/Handlers/ContentSearchHandler.php @@ -6,9 +6,9 @@ namespace Core\Mod\Content\Mcp\Handlers; use Core\Front\Mcp\Contracts\McpToolHandler; use Core\Front\Mcp\McpContext; +use Core\Mod\Content\Services\ContentSearchService; use Core\Tenant\Models\Workspace; use Illuminate\Support\Str; -use Core\Mod\Content\Services\ContentSearchService; /** * MCP tool handler for searching content. diff --git a/Mcp/Handlers/ContentTaxonomiesHandler.php b/Mcp/Handlers/ContentTaxonomiesHandler.php index 71d4528..b076f53 100644 --- a/Mcp/Handlers/ContentTaxonomiesHandler.php +++ b/Mcp/Handlers/ContentTaxonomiesHandler.php @@ -6,8 +6,8 @@ namespace Core\Mod\Content\Mcp\Handlers; use Core\Front\Mcp\Contracts\McpToolHandler; use Core\Front\Mcp\McpContext; -use Core\Tenant\Models\Workspace; use Core\Mod\Content\Models\ContentTaxonomy; +use Core\Tenant\Models\Workspace; /** * MCP tool handler for listing content taxonomies. diff --git a/Mcp/Handlers/ContentUpdateHandler.php b/Mcp/Handlers/ContentUpdateHandler.php index 792673b..895c7cf 100644 --- a/Mcp/Handlers/ContentUpdateHandler.php +++ b/Mcp/Handlers/ContentUpdateHandler.php @@ -7,12 +7,12 @@ namespace Core\Mod\Content\Mcp\Handlers; use Carbon\Carbon; use Core\Front\Mcp\Contracts\McpToolHandler; use Core\Front\Mcp\McpContext; -use Core\Tenant\Models\Workspace; -use Illuminate\Support\Facades\Auth; -use Illuminate\Support\Str; use Core\Mod\Content\Models\ContentItem; use Core\Mod\Content\Models\ContentRevision; use Core\Mod\Content\Models\ContentTaxonomy; +use Core\Tenant\Models\Workspace; +use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Str; /** * MCP tool handler for updating content items. diff --git a/Middleware/WorkspaceRouter.php b/Middleware/WorkspaceRouter.php index 1844360..316a84d 100644 --- a/Middleware/WorkspaceRouter.php +++ b/Middleware/WorkspaceRouter.php @@ -4,9 +4,9 @@ declare(strict_types=1); namespace Core\Mod\Content\Middleware; +use Closure; use Core\Mod\Content\Services\ContentRender; use Core\Tenant\Models\Workspace; -use Closure; use Illuminate\Http\Request; use Symfony\Component\HttpFoundation\Response; diff --git a/Models/AIUsage.php b/Models/AIUsage.php index 8f70572..7a8fffd 100644 --- a/Models/AIUsage.php +++ b/Models/AIUsage.php @@ -4,11 +4,11 @@ declare(strict_types=1); namespace Core\Mod\Content\Models; +use Core\Tenant\Models\Workspace; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\MorphTo; -use Core\Tenant\Models\Workspace; /** * AIUsage Model diff --git a/Models/ContentBrief.php b/Models/ContentBrief.php index 185c00d..549e4eb 100644 --- a/Models/ContentBrief.php +++ b/Models/ContentBrief.php @@ -4,12 +4,12 @@ declare(strict_types=1); namespace Core\Mod\Content\Models; +use Core\Mod\Content\Enums\BriefContentType; +use Core\Tenant\Models\Workspace; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; -use Core\Mod\Content\Enums\BriefContentType; -use Core\Tenant\Models\Workspace; /** * ContentBrief Model diff --git a/Models/ContentItem.php b/Models/ContentItem.php index 9effd29..1cf4fa4 100644 --- a/Models/ContentItem.php +++ b/Models/ContentItem.php @@ -4,9 +4,12 @@ declare(strict_types=1); namespace Core\Mod\Content\Models; +use Core\Mod\Content\Enums\ContentType; +use Core\Mod\Content\Observers\ContentItemObserver; +use Core\Mod\Content\Services\HtmlSanitiser; +use Core\Seo\HasSeoMetadata; use Core\Tenant\Models\User; use Core\Tenant\Models\Workspace; -use Core\Seo\HasSeoMetadata; use Illuminate\Database\Eloquent\Attributes\ObservedBy; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; @@ -14,9 +17,6 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\SoftDeletes; -use Core\Mod\Content\Enums\ContentType; -use Core\Mod\Content\Observers\ContentItemObserver; -use Core\Mod\Content\Services\HtmlSanitiser; #[ObservedBy([ContentItemObserver::class])] class ContentItem extends Model diff --git a/Observers/ContentItemObserver.php b/Observers/ContentItemObserver.php index 223f255..ddfd053 100644 --- a/Observers/ContentItemObserver.php +++ b/Observers/ContentItemObserver.php @@ -4,9 +4,9 @@ declare(strict_types=1); namespace Core\Mod\Content\Observers; -use Illuminate\Support\Facades\Log; use Core\Mod\Content\Models\ContentItem; use Core\Mod\Content\Services\CdnPurgeService; +use Illuminate\Support\Facades\Log; /** * Content Item Observer - handles CDN cache purging on content changes. diff --git a/Services/CdnPurgeService.php b/Services/CdnPurgeService.php index 7ae107c..0785aa6 100644 --- a/Services/CdnPurgeService.php +++ b/Services/CdnPurgeService.php @@ -4,8 +4,8 @@ declare(strict_types=1); namespace Core\Mod\Content\Services; -use Illuminate\Support\Facades\Log; use Core\Mod\Content\Models\ContentItem; +use Illuminate\Support\Facades\Log; use Plug\Cdn\CdnManager; use Plug\Response; diff --git a/Services/ContentRender.php b/Services/ContentRender.php index 56617aa..44c110a 100644 --- a/Services/ContentRender.php +++ b/Services/ContentRender.php @@ -5,12 +5,12 @@ declare(strict_types=1); namespace Core\Mod\Content\Services; use Core\Front\Controller; +use Core\Mod\Content\Models\ContentItem; +use Core\Tenant\Models\Workspace; use Illuminate\Http\Request; use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\Log; use Illuminate\View\View; -use Core\Mod\Content\Models\ContentItem; -use Core\Tenant\Models\Workspace; /** * ContentRender - Public workspace frontend renderer. diff --git a/Services/ContentSearchService.php b/Services/ContentSearchService.php index 241d0a9..a7f72e0 100644 --- a/Services/ContentSearchService.php +++ b/Services/ContentSearchService.php @@ -5,12 +5,12 @@ declare(strict_types=1); namespace Core\Mod\Content\Services; use Carbon\Carbon; +use Core\Mod\Content\Models\ContentItem; use Core\Tenant\Models\Workspace; use Illuminate\Contracts\Pagination\LengthAwarePaginator; use Illuminate\Database\Eloquent\Builder; use Illuminate\Support\Collection; use Illuminate\Support\Str; -use Core\Mod\Content\Models\ContentItem; /** * Content Search Service diff --git a/Services/WebhookDeliveryLogger.php b/Services/WebhookDeliveryLogger.php index d3db5c6..413a7eb 100644 --- a/Services/WebhookDeliveryLogger.php +++ b/Services/WebhookDeliveryLogger.php @@ -4,10 +4,10 @@ declare(strict_types=1); namespace Core\Mod\Content\Services; -use Illuminate\Http\Request; -use Illuminate\Support\Facades\Log; use Core\Mod\Content\Models\ContentWebhookEndpoint; use Core\Mod\Content\Models\ContentWebhookLog; +use Illuminate\Http\Request; +use Illuminate\Support\Facades\Log; /** * WebhookDeliveryLogger @@ -43,7 +43,6 @@ class WebhookDeliveryLogger * @param int $durationMs Processing duration in milliseconds * @param int|null $responseCode HTTP response code if applicable * @param string|null $responseBody Response body if applicable - * @return void */ public function logSuccess( ContentWebhookLog $webhookLog, @@ -74,7 +73,6 @@ class WebhookDeliveryLogger * @param int $durationMs Processing duration in milliseconds * @param int|null $responseCode HTTP response code if applicable * @param string|null $responseBody Response body if applicable - * @return void */ public function logFailure( ContentWebhookLog $webhookLog, @@ -128,7 +126,7 @@ class WebhookDeliveryLogger 'source_ip' => $request->ip(), 'signature_verified' => false, 'signature_failure_reason' => $failureReason, - 'error_message' => 'Signature verification failed: ' . $failureReason, + 'error_message' => 'Signature verification failed: '.$failureReason, 'processed_at' => now(), ]); @@ -149,7 +147,6 @@ class WebhookDeliveryLogger * * @param ContentWebhookLog $webhookLog The webhook log entry * @param string $verificationMethod How the signature was verified (e.g., 'current_secret', 'grace_period') - * @return void */ public function logSignatureSuccess( ContentWebhookLog $webhookLog, @@ -172,7 +169,6 @@ class WebhookDeliveryLogger * * @param Request $request The incoming request * @param ContentWebhookEndpoint $endpoint The webhook endpoint - * @return void */ public function logSignatureNotRequired( Request $request, @@ -195,7 +191,6 @@ class WebhookDeliveryLogger * @param array $payload The parsed payload * @param string $eventType The determined event type * @param array $verificationResult The signature verification result - * @return ContentWebhookLog */ public function createDeliveryLog( Request $request, @@ -225,7 +220,6 @@ class WebhookDeliveryLogger * @param ContentWebhookLog $webhookLog The webhook log entry * @param int $durationMs Processing duration in milliseconds * @param array|null $result Processing result details - * @return void */ public function recordProcessingMetrics( ContentWebhookLog $webhookLog, @@ -341,7 +335,6 @@ class WebhookDeliveryLogger * Extract content ID from payload. * * @param array $data The webhook payload - * @return int|null */ protected function extractContentId(array $data): ?int { @@ -364,7 +357,6 @@ class WebhookDeliveryLogger * Extract content type from payload. * * @param array $data The webhook payload - * @return string|null */ protected function extractContentType(array $data): ?string { diff --git a/Services/WebhookRetryService.php b/Services/WebhookRetryService.php index 886c507..8c8aba8 100644 --- a/Services/WebhookRetryService.php +++ b/Services/WebhookRetryService.php @@ -4,9 +4,9 @@ declare(strict_types=1); namespace Core\Mod\Content\Services; +use Core\Mod\Content\Models\ContentWebhookLog; use Illuminate\Database\Eloquent\Collection; use Illuminate\Support\Facades\Log; -use Core\Mod\Content\Models\ContentWebhookLog; /** * WebhookRetryService diff --git a/View/Modal/Admin/ContentSearch.php b/View/Modal/Admin/ContentSearch.php index 9c6a5fb..dc32a0a 100644 --- a/View/Modal/Admin/ContentSearch.php +++ b/View/Modal/Admin/ContentSearch.php @@ -4,14 +4,14 @@ declare(strict_types=1); namespace Core\Mod\Content\View\Modal\Admin; +use Core\Mod\Content\Models\ContentItem; +use Core\Mod\Content\Models\ContentTaxonomy; +use Core\Mod\Content\Services\ContentSearchService; use Livewire\Attributes\Computed; use Livewire\Attributes\Layout; use Livewire\Attributes\Url; use Livewire\Component; use Livewire\WithPagination; -use Core\Mod\Content\Models\ContentItem; -use Core\Mod\Content\Models\ContentTaxonomy; -use Core\Mod\Content\Services\ContentSearchService; /** * Content Search Livewire Component diff --git a/View/Modal/Admin/WebhookManager.php b/View/Modal/Admin/WebhookManager.php index 93987a8..a6e0a3a 100644 --- a/View/Modal/Admin/WebhookManager.php +++ b/View/Modal/Admin/WebhookManager.php @@ -4,13 +4,13 @@ declare(strict_types=1); namespace Core\Mod\Content\View\Modal\Admin; +use Core\Mod\Content\Models\ContentWebhookEndpoint; +use Core\Mod\Content\Models\ContentWebhookLog; use Livewire\Attributes\Computed; use Livewire\Attributes\Layout; use Livewire\Attributes\Url; use Livewire\Component; use Livewire\WithPagination; -use Core\Mod\Content\Models\ContentWebhookEndpoint; -use Core\Mod\Content\Models\ContentWebhookLog; /** * Livewire component for managing content webhook endpoints. diff --git a/View/Modal/Web/Blog.php b/View/Modal/Web/Blog.php index 2011612..a9a8d70 100644 --- a/View/Modal/Web/Blog.php +++ b/View/Modal/Web/Blog.php @@ -4,10 +4,10 @@ declare(strict_types=1); namespace Core\Mod\Content\View\Modal\Web; -use Livewire\Component; use Core\Mod\Content\Services\ContentRender; use Core\Tenant\Models\Workspace; use Core\Tenant\Services\WorkspaceService; +use Livewire\Component; class Blog extends Component { diff --git a/View/Modal/Web/Help.php b/View/Modal/Web/Help.php index 9242a74..d978dd4 100644 --- a/View/Modal/Web/Help.php +++ b/View/Modal/Web/Help.php @@ -4,10 +4,10 @@ declare(strict_types=1); namespace Core\Mod\Content\View\Modal\Web; -use Livewire\Component; use Core\Mod\Content\Models\ContentItem; use Core\Tenant\Models\Workspace; use Core\Tenant\Services\WorkspaceService; +use Livewire\Component; class Help extends Component { diff --git a/View/Modal/Web/HelpArticle.php b/View/Modal/Web/HelpArticle.php index 76020cc..593f67c 100644 --- a/View/Modal/Web/HelpArticle.php +++ b/View/Modal/Web/HelpArticle.php @@ -4,10 +4,10 @@ declare(strict_types=1); namespace Core\Mod\Content\View\Modal\Web; -use Livewire\Component; use Core\Mod\Content\Services\ContentRender; use Core\Tenant\Models\Workspace; use Core\Tenant\Services\WorkspaceService; +use Livewire\Component; class HelpArticle extends Component { diff --git a/View/Modal/Web/Post.php b/View/Modal/Web/Post.php index f32dfc9..48f6868 100644 --- a/View/Modal/Web/Post.php +++ b/View/Modal/Web/Post.php @@ -4,10 +4,10 @@ declare(strict_types=1); namespace Core\Mod\Content\View\Modal\Web; -use Livewire\Component; use Core\Mod\Content\Services\ContentRender; use Core\Tenant\Models\Workspace; use Core\Tenant\Services\WorkspaceService; +use Livewire\Component; class Post extends Component { diff --git a/View/Modal/Web/Preview.php b/View/Modal/Web/Preview.php index 3e335ab..5143a08 100644 --- a/View/Modal/Web/Preview.php +++ b/View/Modal/Web/Preview.php @@ -4,9 +4,9 @@ declare(strict_types=1); namespace Core\Mod\Content\View\Modal\Web; +use Core\Mod\Content\Models\ContentItem; use Core\Tenant\Models\Workspace; use Livewire\Component; -use Core\Mod\Content\Models\ContentItem; /** * Preview - Render draft/unpublished content with preview token. diff --git a/phpunit.xml b/phpunit.xml new file mode 100644 index 0000000..cb23fe0 --- /dev/null +++ b/phpunit.xml @@ -0,0 +1,39 @@ + + + + + tests/Feature + + + tests/Unit + + + + + src + + + + + + + + + + + + + + + + diff --git a/routes/api.php b/routes/api.php index 31edce4..10160bf 100644 --- a/routes/api.php +++ b/routes/api.php @@ -9,7 +9,6 @@ declare(strict_types=1); * Supports both session auth and API key auth. */ -use Illuminate\Support\Facades\Route; use Core\Mod\Content\Controllers\Api\ContentBriefController; use Core\Mod\Content\Controllers\Api\ContentMediaController; use Core\Mod\Content\Controllers\Api\ContentRevisionController; @@ -17,6 +16,7 @@ use Core\Mod\Content\Controllers\Api\ContentSearchController; use Core\Mod\Content\Controllers\Api\ContentWebhookController; use Core\Mod\Content\Controllers\Api\GenerationController; use Core\Mod\Content\Controllers\ContentPreviewController; +use Illuminate\Support\Facades\Route; /* |-------------------------------------------------------------------------- diff --git a/routes/web.php b/routes/web.php index 1e99874..23e3b42 100644 --- a/routes/web.php +++ b/routes/web.php @@ -2,12 +2,12 @@ declare(strict_types=1); -use Illuminate\Support\Facades\Route; use Core\Mod\Content\View\Modal\Web\Blog; use Core\Mod\Content\View\Modal\Web\Help; use Core\Mod\Content\View\Modal\Web\HelpArticle; use Core\Mod\Content\View\Modal\Web\Post; use Core\Mod\Content\View\Modal\Web\Preview; +use Illuminate\Support\Facades\Route; /* |-------------------------------------------------------------------------- diff --git a/tests/Feature/ContentPreviewTest.php b/tests/Feature/ContentPreviewTest.php index 6363f53..66d0d28 100644 --- a/tests/Feature/ContentPreviewTest.php +++ b/tests/Feature/ContentPreviewTest.php @@ -4,10 +4,10 @@ declare(strict_types=1); namespace Core\Mod\Content\Tests\Feature; -use Core\Tenant\Models\User; -use Core\Tenant\Models\Workspace; use Core\Mod\Content\Enums\ContentType; use Core\Mod\Content\Models\ContentItem; +use Core\Tenant\Models\User; +use Core\Tenant\Models\Workspace; use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; diff --git a/tests/Feature/WebhookSignatureVerificationTest.php b/tests/Feature/WebhookSignatureVerificationTest.php index 9424308..3f88ab3 100644 --- a/tests/Feature/WebhookSignatureVerificationTest.php +++ b/tests/Feature/WebhookSignatureVerificationTest.php @@ -8,7 +8,6 @@ use Core\Mod\Content\Models\ContentWebhookEndpoint; use Core\Mod\Content\Models\ContentWebhookLog; use Core\Tenant\Models\Workspace; use Illuminate\Foundation\Testing\RefreshDatabase; -use Illuminate\Support\Carbon; use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; @@ -74,7 +73,7 @@ class WebhookSignatureVerificationTest extends TestCase public function it_accepts_github_style_signature(): void { $payload = json_encode(['ID' => 456, 'post_title' => 'GitHub Style']); - $signature = 'sha256=' . hash_hmac('sha256', $payload, 'test-webhook-secret-key'); + $signature = 'sha256='.hash_hmac('sha256', $payload, 'test-webhook-secret-key'); $response = $this->postJson( "/api/content/webhooks/{$this->endpoint->uuid}", @@ -525,7 +524,7 @@ class WebhookSignatureVerificationTest extends TestCase $response2 = $this->postJson( "/api/content/webhooks/{$this->endpoint->uuid}", json_decode($payload, true), - ['X-Signature' => 'a' . substr($validSignature, 1), 'X-Event-Type' => 'post.updated'] + ['X-Signature' => 'a'.substr($validSignature, 1), 'X-Event-Type' => 'post.updated'] ); $response2->assertStatus(401); diff --git a/tests/Pest.php b/tests/Pest.php new file mode 100644 index 0000000..7f6d8cf --- /dev/null +++ b/tests/Pest.php @@ -0,0 +1,7 @@ +in('Feature', 'Unit'); diff --git a/tests/Unit/ContentSearchServiceTest.php b/tests/Unit/ContentSearchServiceTest.php index c7fb481..4ec1f10 100644 --- a/tests/Unit/ContentSearchServiceTest.php +++ b/tests/Unit/ContentSearchServiceTest.php @@ -4,12 +4,12 @@ declare(strict_types=1); namespace Core\Mod\Content\Tests\Unit; -use Core\Tenant\Models\Workspace; -use Illuminate\Foundation\Testing\RefreshDatabase; use Core\Mod\Content\Enums\ContentType; use Core\Mod\Content\Models\ContentItem; use Core\Mod\Content\Models\ContentTaxonomy; use Core\Mod\Content\Services\ContentSearchService; +use Core\Tenant\Models\Workspace; +use Illuminate\Foundation\Testing\RefreshDatabase; use Tests\TestCase; /** diff --git a/tests/Unit/ProcessContentWebhookTest.php b/tests/Unit/ProcessContentWebhookTest.php index b2ff93d..3e46391 100644 --- a/tests/Unit/ProcessContentWebhookTest.php +++ b/tests/Unit/ProcessContentWebhookTest.php @@ -4,13 +4,13 @@ declare(strict_types=1); namespace Core\Mod\Content\Tests\Unit; -use Core\Tenant\Models\Workspace; -use Illuminate\Support\Facades\Queue; use Core\Mod\Content\Enums\ContentType; use Core\Mod\Content\Jobs\ProcessContentWebhook; use Core\Mod\Content\Models\ContentItem; use Core\Mod\Content\Models\ContentWebhookEndpoint; use Core\Mod\Content\Models\ContentWebhookLog; +use Core\Tenant\Models\Workspace; +use Illuminate\Support\Facades\Queue; use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; diff --git a/tests/Unit/WebhookDeliveryLoggerTest.php b/tests/Unit/WebhookDeliveryLoggerTest.php index 43bea18..c7f9b2f 100644 --- a/tests/Unit/WebhookDeliveryLoggerTest.php +++ b/tests/Unit/WebhookDeliveryLoggerTest.php @@ -31,7 +31,7 @@ class WebhookDeliveryLoggerTest extends TestCase { parent::setUp(); - $this->logger = new WebhookDeliveryLogger(); + $this->logger = new WebhookDeliveryLogger; $this->workspace = Workspace::factory()->create(); $this->endpoint = ContentWebhookEndpoint::factory()->create([ 'workspace_id' => $this->workspace->id,