feat: VivesPOS landing on Winter CMS 1.2 — theme + plugin + Dockerfile
Some checks are pending
Module sub-split / Sub-split (push) Waiting to run

- Base: wintercms/winter branch 1.2 (full framework)
- Theme vivespos: Canvas 7 + Bootstrap 5 CDN, custom CSS
- Layout: deferred GTM/GA4 tracking, JSON-LD SoftwareApplication
- Partials: hero (offline-first), features, modes (offline/nube toggle),
  screenshots, pricing (3 planes), comparison, FAQ, CTA
- Plugin VivesPOS.Site with ContactForm
- Dockerfile: PHP 8.2 Apache, port 80, healthcheck
- Added winter/wn-pages, blog, sitemap, seo plugins
- Active theme set to vivespos
This commit is contained in:
2026-08-21 19:29:00 -06:00
commit 1f72193a64
3266 changed files with 531480 additions and 0 deletions

View File

@@ -0,0 +1,143 @@
<?php
namespace Backend\Tests\Widgets;
use System\Tests\Bootstrap\PluginTestCase;
use Winter\Storm\Exception\ApplicationException;
use Backend\Tests\Fixtures\Models\UserFixture;
use Backend\Models\User;
use Backend\Widgets\Lists;
class ListsTest extends PluginTestCase
{
public function testRestrictedColumnWithUserWithNoPermissions()
{
$user = new UserFixture;
$this->actingAs($user);
$list = $this->restrictedListsFixture();
$list->render();
$this->assertNotNull($list->getColumn('id'));
// Expect an exception
$this->expectException(ApplicationException::class);
$this->expectExceptionMessage('No definition for column email');
$column = $list->getColumn('email');
}
public function testRestrictedColumnWithUserWithWrongPermissions()
{
$user = new UserFixture;
$this->actingAs($user->withPermission('test.wrong_permission', true));
$list = $this->restrictedListsFixture();
$list->render();
$this->assertNotNull($list->getColumn('id'));
// Expect an exception
$this->expectException(ApplicationException::class);
$this->expectExceptionMessage('No definition for column email');
$column = $list->getColumn('email');
}
public function testRestrictedColumnWithUserWithRightPermissions()
{
$user = new UserFixture;
$this->actingAs($user->withPermission('test.access_field', true));
$list = $this->restrictedListsFixture();
$list->render();
$this->assertNotNull($list->getColumn('id'));
$this->assertNotNull($list->getColumn('email'));
}
public function testRestrictedColumnWithUserWithRightWildcardPermissions()
{
$user = new UserFixture;
$this->actingAs($user->withPermission('test.access_field', true));
$list = new Lists(null, [
'model' => new User,
'arrayName' => 'array',
'columns' => [
'id' => [
'type' => 'text',
'label' => 'ID'
],
'email' => [
'type' => 'text',
'label' => 'Email',
'permission' => 'test.*'
]
]
]);
$list->render();
$this->assertNotNull($list->getColumn('id'));
$this->assertNotNull($list->getColumn('email'));
}
public function testRestrictedColumnWithSuperuser()
{
$user = new UserFixture;
$this->actingAs($user->asSuperUser());
$list = $this->restrictedListsFixture();
$list->render();
$this->assertNotNull($list->getColumn('id'));
$this->assertNotNull($list->getColumn('email'));
}
public function testRestrictedColumnSinglePermissionWithUserWithWrongPermissions()
{
$user = new UserFixture;
$this->actingAs($user->withPermission('test.wrong_permission', true));
$list = $this->restrictedListsFixture(true);
$list->render();
$this->assertNotNull($list->getColumn('id'));
// Expect an exception
$this->expectException(ApplicationException::class);
$this->expectExceptionMessage('No definition for column email');
$column = $list->getColumn('email');
}
public function testRestrictedColumnSinglePermissionWithUserWithRightPermissions()
{
$user = new UserFixture;
$this->actingAs($user->withPermission('test.access_field', true));
$list = $this->restrictedListsFixture(true);
$list->render();
$this->assertNotNull($list->getColumn('id'));
$this->assertNotNull($list->getColumn('email'));
}
protected function restrictedListsFixture(bool $singlePermission = false)
{
return new Lists(null, [
'model' => new User,
'arrayName' => 'array',
'columns' => [
'id' => [
'type' => 'text',
'label' => 'ID'
],
'email' => [
'type' => 'text',
'label' => 'Email',
'permissions' => ($singlePermission) ? 'test.access_field' : [
'test.access_field'
]
]
]
]);
}
}