chore: fix pint code style and add test config
Some checks failed
CI / tests (push) Failing after 1m24s
Some checks failed
CI / tests (push) Failing after 1m24s
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 <noreply@anthropic.com>
This commit is contained in:
parent
a955a4b4c1
commit
12bb5509d5
47 changed files with 128 additions and 94 deletions
2
Boot.php
2
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;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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';
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
39
phpunit.xml
Normal file
39
phpunit.xml
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd"
|
||||
bootstrap="vendor/autoload.php"
|
||||
colors="true"
|
||||
cacheDirectory=".phpunit.cache"
|
||||
executionOrder="random"
|
||||
requireCoverageMetadata="false"
|
||||
beStrictAboutCoverageMetadata="false"
|
||||
beStrictAboutOutputDuringTests="true"
|
||||
failOnRisky="true"
|
||||
failOnWarning="true">
|
||||
<testsuites>
|
||||
<testsuite name="Feature">
|
||||
<directory>tests/Feature</directory>
|
||||
</testsuite>
|
||||
<testsuite name="Unit">
|
||||
<directory>tests/Unit</directory>
|
||||
</testsuite>
|
||||
</testsuites>
|
||||
<source>
|
||||
<include>
|
||||
<directory>src</directory>
|
||||
</include>
|
||||
</source>
|
||||
<php>
|
||||
<env name="APP_ENV" value="testing"/>
|
||||
<env name="APP_DEBUG" value="true"/>
|
||||
<env name="APP_KEY" value="base64:Kx0qLJZJAQcDSFE2gMpuOlwrJcC6kXHM0j0KJdMGqzQ="/>
|
||||
<env name="BCRYPT_ROUNDS" value="4"/>
|
||||
<env name="CACHE_STORE" value="array"/>
|
||||
<env name="DB_CONNECTION" value="sqlite"/>
|
||||
<env name="DB_DATABASE" value=":memory:"/>
|
||||
<env name="MAIL_MAILER" value="array"/>
|
||||
<env name="QUEUE_CONNECTION" value="sync"/>
|
||||
<env name="SESSION_DRIVER" value="array"/>
|
||||
<env name="TELESCOPE_ENABLED" value="false"/>
|
||||
</php>
|
||||
</phpunit>
|
||||
|
|
@ -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;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
7
tests/Pest.php
Normal file
7
tests/Pest.php
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use Orchestra\Testbench\TestCase;
|
||||
|
||||
uses(TestCase::class)->in('Feature', 'Unit');
|
||||
|
|
@ -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;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue