Merge branch '0.x' into prod
Some checks failed
CI / testsuite (mysql, 8.2, ) (push) Successful in 4m10s
CI / testsuite (pgsql, 8.2, ) (push) Successful in 4m45s
CI / testsuite (sqlite, 8.2, ) (push) Successful in 4m27s
CI / testsuite (sqlite, 8.2, prefer-lowest) (push) Failing after 3m13s
CI / testsuite (mysql, 8.4, ) (push) Successful in 20m14s
CI / testsuite (sqlite, 8.4, ) (push) Successful in 6m54s
CI / testsuite (pgsql, 8.4, ) (push) Successful in 18m52s
CI / Coding Standard & Static Analysis (push) Failing after 7m55s

This commit is contained in:
2026-01-23 23:54:00 -08:00
9 changed files with 129 additions and 16 deletions

View File

@@ -0,0 +1,31 @@
---
name: CI Build Status
on:
workflow_run:
workflows:
- CI
types:
- completed
jobs:
on-success:
runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'success' }}
steps:
- name: Webhook
uses: zzzze/webhook-trigger@master
with:
data: "{\"text\":\"${{ gitea.repository }} build succeeded 🎉\"}"
webhook_url: ${{ secrets.BUILD_STATUS_NOTIFY_WEBHOOK_URL }}
options: "-H \"Content-Type: application/json\""
on-failure:
runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'failure' }}
steps:
- name: Webhook
uses: zzzze/webhook-trigger@master
with:
data: "{\"text\":\"${{ gitea.repository }} build failed 🔎\"}"
webhook_url: ${{ secrets.BUILD_STATUS_NOTIFY_WEBHOOK_URL }}
options: "-H \"Content-Type: application/json\""

View File

@@ -11,12 +11,14 @@
"cakephp/cakephp": "^5.1" "cakephp/cakephp": "^5.1"
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "^10.1", "phpunit/phpunit": "^10.3",
"cakephp/migrations": "^4.0.0", "cakephp/migrations": "^4.0.0",
"phpstan/phpstan": "^2.1", "phpstan/phpstan": "^2.1",
"dereuromark/composer-prefer-lowest": "^0.1.10", "dereuromark/composer-prefer-lowest": "^0.1.10",
"cakedc/cakephp-phpstan": "^4.1", "cakedc/cakephp-phpstan": "^4.1",
"fig-r/psr2r-sniffer": "^2.7" "cakephp/authentication": "^3.0",
"fig-r/psr2r-sniffer": "^2.7",
"cakephp/authorization": "3.x-dev"
}, },
"suggest": { "suggest": {
"hi-powered-dev/cake-products": "Manage products and SKUs with a heirarhical category structure, includes attributes and variants" "hi-powered-dev/cake-products": "Manage products and SKUs with a heirarhical category structure, includes attributes and variants"

View File

@@ -8,3 +8,4 @@ parameters:
bootstrapFiles: bootstrapFiles:
- tests/bootstrap.php - tests/bootstrap.php
treatPhpDocTypesAsCertain: false treatPhpDocTypesAsCertain: false
ignoreErrors:

View File

@@ -9,8 +9,9 @@ use Cake\Log\Log;
/** /**
* CartItems Controller * CartItems Controller
* *
* @property \CakeCarts\Controller\Component\ShoppingCartComponent $ShoppingCart
* @property \CakeCarts\Model\Table\CartItemsTable $CartItems * @property \CakeCarts\Model\Table\CartItemsTable $CartItems
* @property \Authorization\Controller\Component\AuthorizationComponent $Authorization * @property \Authorization\Controller\Component\AuthorizationComponent|null $Authorization
*/ */
class CartItemsController extends AppController { class CartItemsController extends AppController {

View File

@@ -73,7 +73,6 @@ class ShoppingCartComponent extends Component {
} else { } else {
$cartsQ->where(['session_id' => $sessionId]); $cartsQ->where(['session_id' => $sessionId]);
} }
return $cartsQ->firstOrFail(); return $cartsQ->firstOrFail();
} }

View File

@@ -11,7 +11,7 @@ use CakeCarts\Model\Enum\CartTypeId;
/** /**
* Carts Model * Carts Model
* *
* @property \CakeCarts\Model\Table\UsersTable&\Cake\ORM\Association\BelongsTo $Users * @property \Cake\ORM\Association\BelongsTo $Users
* @property \CakeCarts\Model\Table\CartItemsTable&\Cake\ORM\Association\HasMany $CartItems * @property \CakeCarts\Model\Table\CartItemsTable&\Cake\ORM\Association\HasMany $CartItems
* *
* @method \CakeCarts\Model\Entity\Cart newEmptyEntity() * @method \CakeCarts\Model\Entity\Cart newEmptyEntity()

View File

@@ -22,7 +22,7 @@ class CartsFixture extends TestFixture {
[ [
'id' => '74d1aa54-92a2-4039-bc10-61e1190c51ea', 'id' => '74d1aa54-92a2-4039-bc10-61e1190c51ea',
'cart_type_id' => CartTypeId::Cart->value, 'cart_type_id' => CartTypeId::Cart->value,
'session_id' => 'session_1', 'session_id' => 'cli',
'user_id' => null, 'user_id' => null,
'user_id_uuid' => '5a34a6ae-7d3f-4dcf-bac7-57335b51e697', 'user_id_uuid' => '5a34a6ae-7d3f-4dcf-bac7-57335b51e697',
'created' => '2025-10-08 09:55:15', 'created' => '2025-10-08 09:55:15',
@@ -36,7 +36,7 @@ class CartsFixture extends TestFixture {
[ [
'id' => '74d1aa54-92a2-4039-bc10-61e1190c51eb', 'id' => '74d1aa54-92a2-4039-bc10-61e1190c51eb',
'cart_type_id' => CartTypeId::Cart->value, 'cart_type_id' => CartTypeId::Cart->value,
'session_id' => 'session_1', 'session_id' => 'cli',
'user_id' => null, 'user_id' => null,
'user_id_uuid' => '5a34a6ae-7d3f-4dcf-bac7-57335b51e697', 'user_id_uuid' => '5a34a6ae-7d3f-4dcf-bac7-57335b51e697',
'created' => '2025-10-08 09:55:15', 'created' => '2025-10-08 09:55:15',

View File

@@ -91,7 +91,6 @@ class CartItemsControllerTest extends TestCase {
]; ];
$this->session(['Auth.User.id' => 1]); $this->session(['Auth.User.id' => 1]);
$this->session(['Auth.id' => 1]); $this->session(['Auth.id' => 1]);
$this->session(['CakeCarts.session_id' => 'session_1']);
$before = $this->CartItems->get($id, contain: ['Carts']); $before = $this->CartItems->get($id, contain: ['Carts']);
// dd($before); // dd($before);
$skuId = '3a477e3e-7977-4813-81f6-f85949613979'; $skuId = '3a477e3e-7977-4813-81f6-f85949613979';

View File

@@ -4,6 +4,13 @@ declare(strict_types=1);
namespace CakeCarts\Test\TestCase\Controller\Component; namespace CakeCarts\Test\TestCase\Controller\Component;
use Cake\Controller\ComponentRegistry; use Cake\Controller\ComponentRegistry;
use Cake\Controller\Controller;
use Cake\Datasource\Exception\RecordNotFoundException;
use Cake\Event\Event;
use Cake\Http\Exception\NotFoundException;
use Cake\Http\Response;
use Cake\Http\ServerRequest;
use Cake\TestSuite\IntegrationTestTrait;
use Cake\TestSuite\TestCase; use Cake\TestSuite\TestCase;
use CakeCarts\Controller\Component\ShoppingCartComponent; use CakeCarts\Controller\Component\ShoppingCartComponent;
@@ -12,12 +19,20 @@ use CakeCarts\Controller\Component\ShoppingCartComponent;
*/ */
class ShoppingCartComponentTest extends TestCase { class ShoppingCartComponentTest extends TestCase {
/** use IntegrationTestTrait;
* Test subject
protected ShoppingCartComponent $component;
protected Controller $controller;
/**
* Fixtures
* *
* @var \CakeCarts\Controller\Component\ShoppingCartComponent * @var array<string>
*/ */
protected $ShoppingCart; protected array $fixtures = [
'plugin.CakeCarts.CartItems',
'plugin.CakeCarts.Carts',
];
/** /**
* setUp method * setUp method
@@ -26,8 +41,11 @@ class ShoppingCartComponentTest extends TestCase {
*/ */
protected function setUp(): void { protected function setUp(): void {
parent::setUp(); parent::setUp();
$registry = new ComponentRegistry(); $request = new ServerRequest();
$this->ShoppingCart = new ShoppingCartComponent($registry); $this->controller = new Controller($request);
$registry = new ComponentRegistry($this->controller);
$this->component = new ShoppingCartComponent($registry);
} }
/** /**
@@ -41,4 +59,66 @@ class ShoppingCartComponentTest extends TestCase {
parent::tearDown(); parent::tearDown();
} }
/**
* @return void
*/
public function testGetCartForUserById()
{
$this->session([
'CakeCarts.session_id' => 'cli',
]);
$cart = $this->component->getCartForUserById('74d1aa54-92a2-4039-bc10-61e1190c51ea');
$this->assertNotNull($cart);
}
/**
* @return void
*/
public function testGetCartForUserByIdDoesNotExist()
{
$this->expectException(RecordNotFoundException::class);
$cart = $this->component->getCartForUserById('74d1aa54-92a2-4039-bc10-61e1190c51ec');
}
/**
* @return void
*/
public function testGetUserIdField()
{
$this->assertNotNull($this->component->getUserIdField());
}
/**
* @return void
*/
public function testGetSessionId()
{
$this->assertNotNull($this->component->getSessionId());
}
/**
* @return void
*/
public function testCheckIfIsOwnCartIsOwnCart()
{
$this->session([
'CakeCarts.session_id' => 'session_1',
]);
$cart = $this->fetchTable('Carts')->get('74d1aa54-92a2-4039-bc10-61e1190c51ea');
$this->component->checkIfIsOwnCart($cart);
// if exception not thrown test passes
$this->assertEquals(1, 1);
}
/**
* @return void
*/
public function testCheckIfIsOwnCartIsNotOwnCart()
{
$this->expectExceptionCode(404);
$cart = $this->fetchTable('Carts')->get('74d1aa54-92a2-4039-bc10-61e1190c51ec');
$this->component->checkIfIsOwnCart($cart);
// if exception not thrown test fails
$this->expectException(RecordNotFoundException::class);
}
} }