From 7b11753d98d14491f3b4923ae9f79d11681dd154 Mon Sep 17 00:00:00 2001 From: janpalen Date: Thu, 18 Jul 2024 10:14:35 +0200 Subject: [PATCH 01/12] OP-369 - Add support for sylius 1.12 --- composer.json | 39 ++--- src/Resources/config/services.xml | 1 - tests/Application/.env.dist | 9 +- tests/Application/.env.prod.dist | 9 +- tests/Application/.env.test.dist | 9 +- tests/Application/Kernel.php | 12 +- tests/Application/assets/admin/entry.js | 1 + tests/Application/assets/shop/sentry.js | 1 + tests/Application/config/bootstrap.php | 2 +- tests/Application/config/bundles.php | 6 +- .../config/packages/dev/mailer.yaml | 3 + .../config/packages/dev/swiftmailer.yaml | 2 - tests/Application/config/packages/mailer.yaml | 4 + .../config/packages/prod/doctrine.yaml | 31 ---- .../config/packages/staging/swiftmailer.yaml | 2 - .../config/packages/swiftmailer.yaml | 2 - .../config/packages/sylius_mailer.yaml | 4 + .../config/packages/test/framework.yaml | 2 +- .../config/packages/test/mailer.yaml | 8 + .../config/packages/test/security.yaml | 2 +- .../config/packages/test/swiftmailer.yaml | 6 - .../packages/test_cached/framework.yaml | 2 +- .../config/packages/test_cached/security.yaml | 2 +- .../packages/test_cached/swiftmailer.yaml | 6 - .../config/packages/webpack_encore.yaml | 5 + .../config/sylius/1.10/bundles.php | 6 - .../config/sylius/1.10/packages/security.yaml | 148 ---------------- .../config/sylius/1.11/bundles.php | 7 - .../config/sylius/1.11/packages/security.yaml | 148 ---------------- .../config/sylius/1.12/packages/security.yaml | 124 ++++++++++++++ .../config/sylius/1.13/bundles.php | 7 + .../config/sylius/1.13/packages/_sylius.yaml | 10 ++ .../config/sylius/1.13/packages/security.yaml | 124 ++++++++++++++ .../Application/config/sylius/1.8/bundles.php | 8 - .../config/sylius/1.8/packages/_sylius.yaml | 2 - .../config/sylius/1.8/packages/security.yaml | 159 ------------------ .../sylius/1.8/routes/sylius_admin_api.yaml | 3 - .../Application/config/sylius/1.9/bundles.php | 8 - .../config/sylius/1.9/packages/_sylius.yaml | 2 - .../config/sylius/1.9/packages/security.yaml | 159 ------------------ .../sylius/1.9/routes/sylius_admin_api.yaml | 3 - tests/Application/package.json | 11 +- tests/Application/webpack.config.js | 35 ++-- 43 files changed, 355 insertions(+), 779 deletions(-) create mode 100644 tests/Application/assets/admin/entry.js create mode 100644 tests/Application/assets/shop/sentry.js create mode 100644 tests/Application/config/packages/dev/mailer.yaml delete mode 100644 tests/Application/config/packages/dev/swiftmailer.yaml create mode 100644 tests/Application/config/packages/mailer.yaml delete mode 100644 tests/Application/config/packages/prod/doctrine.yaml delete mode 100644 tests/Application/config/packages/staging/swiftmailer.yaml delete mode 100644 tests/Application/config/packages/swiftmailer.yaml create mode 100644 tests/Application/config/packages/sylius_mailer.yaml create mode 100644 tests/Application/config/packages/test/mailer.yaml delete mode 100644 tests/Application/config/packages/test/swiftmailer.yaml delete mode 100644 tests/Application/config/packages/test_cached/swiftmailer.yaml create mode 100644 tests/Application/config/packages/webpack_encore.yaml delete mode 100644 tests/Application/config/sylius/1.10/bundles.php delete mode 100644 tests/Application/config/sylius/1.10/packages/security.yaml delete mode 100644 tests/Application/config/sylius/1.11/bundles.php delete mode 100644 tests/Application/config/sylius/1.11/packages/security.yaml create mode 100644 tests/Application/config/sylius/1.12/packages/security.yaml create mode 100644 tests/Application/config/sylius/1.13/bundles.php create mode 100644 tests/Application/config/sylius/1.13/packages/_sylius.yaml create mode 100644 tests/Application/config/sylius/1.13/packages/security.yaml delete mode 100644 tests/Application/config/sylius/1.8/bundles.php delete mode 100644 tests/Application/config/sylius/1.8/packages/_sylius.yaml delete mode 100644 tests/Application/config/sylius/1.8/packages/security.yaml delete mode 100644 tests/Application/config/sylius/1.8/routes/sylius_admin_api.yaml delete mode 100644 tests/Application/config/sylius/1.9/bundles.php delete mode 100644 tests/Application/config/sylius/1.9/packages/_sylius.yaml delete mode 100644 tests/Application/config/sylius/1.9/packages/security.yaml delete mode 100644 tests/Application/config/sylius/1.9/routes/sylius_admin_api.yaml diff --git a/composer.json b/composer.json index 567653f..bb6b888 100644 --- a/composer.json +++ b/composer.json @@ -5,14 +5,16 @@ "description": "Braintree payment plugin for Sylius applications.", "license": "MIT", "require": { - "php": "^7.3 || ^8.0", - "sylius/sylius": "~1.8.0 || ~1.9.0 || ~1.10.0 || ~1.11.0", + "php": "^8.0", + "sylius/sylius": "~1.12.0", "php-http/message-factory": "^1.1", - "braintree/braintree_php": "^6.4" + "braintree/braintree_php": "^6.4", + "symfony/webpack-encore-bundle": "^1.17" }, "require-dev": { - "behat/behat": "^3.6.1", - "behat/mink-selenium2-driver": "^1.4", + "bitbag/coding-standard": "v3.0.0", + "behat/behat": "^3.7", + "behat/mink-selenium2-driver": "~1.6.0", "dmore/behat-chrome-extension": "^1.3", "dmore/chrome-mink-driver": "^2.7", "friends-of-behat/mink": "^1.8", @@ -24,22 +26,18 @@ "friends-of-behat/symfony-extension": "^2.1", "friends-of-behat/variadic-extension": "^1.3", "friends-of-behat/service-container-extension": "^1.0", - "friendsofsymfony/oauth-server-bundle": "^1.6 || >2.0.0-alpha.0 ^2.0@dev", "phpspec/phpspec": "^7.0", "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "0.12.85", - "phpstan/phpstan-doctrine": "0.12.33", - "phpstan/phpstan-strict-rules": "^0.12.0", - "phpstan/phpstan-webmozart-assert": "0.12.12", + "phpstan/phpstan": "1.4", + "phpstan/phpstan-doctrine": "^1.0", + "phpstan/phpstan-strict-rules": "^1.0", + "phpstan/phpstan-webmozart-assert": "^1.0", "phpunit/phpunit": "^9.5", "sensiolabs/security-checker": "^6.0", - "sylius-labs/coding-standard": "^4.0", - "symfony/browser-kit": "^4.4 || ^5.2", - "symfony/debug-bundle": "^4.4 || ^5.2", - "symfony/dotenv": "^4.4 || ^5.2", - "symfony/intl": "^4.4 || ^5.2", - "symfony/web-profiler-bundle": "^4.4 || ^5.2", - "symfony/web-server-bundle": "^3.4|^4.1", + "symfony/dotenv": "^5.4 || ^6.0", + "symfony/debug-bundle": "^5.4 || ^6.0", + "symfony/web-profiler-bundle": "5.4 | ^6.0", + "symfony/browser-kit": "^5.4 || ^6.0", "vimeo/psalm": "4.7.1", "polishsymfonycommunity/symfony-mocker-container": "^1.0" }, @@ -53,13 +51,6 @@ } }, "conflict": { - "doctrine/dbal": "^3.0", - "symfony/symfony": "4.1.8", - "symfony/browser-kit": "4.1.8", - "symfony/dom-crawler": "4.1.8", - "symfony/routing": "4.1.8", - "symfony/doctrine-bridge": "4.4.16", - "doctrine/orm": ">=2.15.2" }, "autoload": { "psr-4": { diff --git a/src/Resources/config/services.xml b/src/Resources/config/services.xml index 0c6a54f..50e4d91 100644 --- a/src/Resources/config/services.xml +++ b/src/Resources/config/services.xml @@ -17,7 +17,6 @@ - diff --git a/tests/Application/.env.dist b/tests/Application/.env.dist index 1ac23f8..091f4b0 100644 --- a/tests/Application/.env.dist +++ b/tests/Application/.env.dist @@ -29,9 +29,6 @@ JWT_PASSPHRASE=acme_plugin_development MESSENGER_TRANSPORT_DSN=sync:// ###< symfony/messenger ### -###> symfony/swiftmailer-bundle ### -# For Gmail as a transport, use: "gmail://username:password@localhost" -# For a generic SMTP server, use: "smtp://localhost:25?encryption=&auth_mode=" -# Delivery is disabled by default via "null://localhost" -MAILER_URL=smtp://localhost -###< symfony/swiftmailer-bundle ### +###> symfony/mailer ### +MAILER_DSN=null://null +###> symfony/messenger ### diff --git a/tests/Application/.env.prod.dist b/tests/Application/.env.prod.dist index 2e67200..53d96e1 100644 --- a/tests/Application/.env.prod.dist +++ b/tests/Application/.env.prod.dist @@ -15,9 +15,6 @@ APP_SECRET=EDITME DATABASE_URL=mysql://root@127.0.0.1/sylius_%kernel.environment%?serverVersion=5.5 ###< doctrine/doctrine-bundle ### -###> symfony/swiftmailer-bundle ### -# For Gmail as a transport, use: "gmail://username:password@localhost" -# For a generic SMTP server, use: "smtp://localhost:25?encryption=&auth_mode=" -# Delivery is disabled by default via "null://localhost" -MAILER_URL=smtp://localhost -###< symfony/swiftmailer-bundle ### +###> symfony/mailer ### +MAILER_DSN=null://null +###> symfony/messenger ### diff --git a/tests/Application/.env.test.dist b/tests/Application/.env.test.dist index 7ef5bb5..b867fd6 100644 --- a/tests/Application/.env.test.dist +++ b/tests/Application/.env.test.dist @@ -15,9 +15,6 @@ APP_SECRET=EDITME DATABASE_URL=mysql://root@127.0.0.1/sylius_%kernel.environment%?serverVersion=5.5 ###< doctrine/doctrine-bundle ### -###> symfony/swiftmailer-bundle ### -# For Gmail as a transport, use: "gmail://username:password@localhost" -# For a generic SMTP server, use: "smtp://localhost:25?encryption=&auth_mode=" -# Delivery is disabled by default via "null://localhost" -MAILER_URL=null://localhost -###< symfony/swiftmailer-bundle ### +###> symfony/mailer ### +MAILER_DSN=null://null +###> symfony/messenger ### diff --git a/tests/Application/Kernel.php b/tests/Application/Kernel.php index da624c2..4d5cd4d 100644 --- a/tests/Application/Kernel.php +++ b/tests/Application/Kernel.php @@ -12,7 +12,7 @@ use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\HttpKernel\Bundle\BundleInterface; use Symfony\Component\HttpKernel\Kernel as BaseKernel; -use Symfony\Component\Routing\RouteCollectionBuilder; +use Symfony\Component\Routing\Loader\Configurator\RoutingConfigurator; final class Kernel extends BaseKernel { @@ -58,7 +58,7 @@ protected function configureContainer(ContainerBuilder $container, LoaderInterfa } } - protected function configureRoutes(RouteCollectionBuilder $routes): void + protected function configureRoutes(RoutingConfigurator $routes): void { foreach ($this->getConfigurationDirectories() as $confDir) { $this->loadRoutesConfiguration($routes, $confDir); @@ -87,11 +87,11 @@ private function loadContainerConfiguration(LoaderInterface $loader, string $con $loader->load($confDir . '/{services}_' . $this->environment . self::CONFIG_EXTS, 'glob'); } - private function loadRoutesConfiguration(RouteCollectionBuilder $routes, string $confDir): void + private function loadRoutesConfiguration(RoutingConfigurator $routes, string $confDir): void { - $routes->import($confDir . '/{routes}/*' . self::CONFIG_EXTS, '/', 'glob'); - $routes->import($confDir . '/{routes}/' . $this->environment . '/**/*' . self::CONFIG_EXTS, '/', 'glob'); - $routes->import($confDir . '/{routes}' . self::CONFIG_EXTS, '/', 'glob'); + $routes->import($confDir . '/{routes}/*' . self::CONFIG_EXTS, 'glob'); + $routes->import($confDir . '/{routes}/' . $this->environment . '/**/*' . self::CONFIG_EXTS, 'glob'); + $routes->import($confDir . '/{routes}' . self::CONFIG_EXTS, 'glob'); } /** diff --git a/tests/Application/assets/admin/entry.js b/tests/Application/assets/admin/entry.js new file mode 100644 index 0000000..635f5ac --- /dev/null +++ b/tests/Application/assets/admin/entry.js @@ -0,0 +1 @@ +import 'sylius/bundle/AdminBundle/Resources/private/entry'; diff --git a/tests/Application/assets/shop/sentry.js b/tests/Application/assets/shop/sentry.js new file mode 100644 index 0000000..aadc317 --- /dev/null +++ b/tests/Application/assets/shop/sentry.js @@ -0,0 +1 @@ +import 'sylius/bundle/ShopBundle/Resources/private/entry'; diff --git a/tests/Application/config/bootstrap.php b/tests/Application/config/bootstrap.php index e23eca0..ae509ac 100644 --- a/tests/Application/config/bootstrap.php +++ b/tests/Application/config/bootstrap.php @@ -15,7 +15,7 @@ throw new RuntimeException('Please run "composer require symfony/dotenv" to load the ".env" files configuring the application.'); } else { // load all the .env files - (new Dotenv(true))->loadEnv(dirname(__DIR__) . '/.env'); + (new Dotenv())->loadEnv(dirname(__DIR__) . '/.env'); } $_SERVER['APP_ENV'] = $_ENV['APP_ENV'] = ($_SERVER['APP_ENV'] ?? $_ENV['APP_ENV'] ?? null) ?: 'dev'; diff --git a/tests/Application/config/bundles.php b/tests/Application/config/bundles.php index 3516965..489d689 100644 --- a/tests/Application/config/bundles.php +++ b/tests/Application/config/bundles.php @@ -4,7 +4,6 @@ Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true], Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true], Symfony\Bundle\SecurityBundle\SecurityBundle::class => ['all' => true], - Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle::class => ['all' => true], Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true], Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true], Sylius\Bundle\OrderBundle\SyliusOrderBundle::class => ['all' => true], @@ -54,4 +53,9 @@ Lexik\Bundle\JWTAuthenticationBundle\LexikJWTAuthenticationBundle::class => ['all' => true], Sylius\Bundle\ApiBundle\SyliusApiBundle::class => ['all' => true], SyliusLabs\DoctrineMigrationsExtraBundle\SyliusLabsDoctrineMigrationsExtraBundle::class => ['all' => true], + League\FlysystemBundle\FlysystemBundle::class => ['all' => true], + Sylius\Calendar\SyliusCalendarBundle::class => ['all' => true], + Symfony\WebpackEncoreBundle\WebpackEncoreBundle::class => ['all' => true], + BabDev\PagerfantaBundle\BabDevPagerfantaBundle::class => ['all' => true], + SyliusLabs\Polyfill\Symfony\Security\Bundle\SyliusLabsPolyfillSymfonySecurityBundle::class => ['all' => true], ]; diff --git a/tests/Application/config/packages/dev/mailer.yaml b/tests/Application/config/packages/dev/mailer.yaml new file mode 100644 index 0000000..0a0697c --- /dev/null +++ b/tests/Application/config/packages/dev/mailer.yaml @@ -0,0 +1,3 @@ +framework: + mailer: + dsn: '%env(MAILER_DSN)%' diff --git a/tests/Application/config/packages/dev/swiftmailer.yaml b/tests/Application/config/packages/dev/swiftmailer.yaml deleted file mode 100644 index f438078..0000000 --- a/tests/Application/config/packages/dev/swiftmailer.yaml +++ /dev/null @@ -1,2 +0,0 @@ -swiftmailer: - disable_delivery: true diff --git a/tests/Application/config/packages/mailer.yaml b/tests/Application/config/packages/mailer.yaml new file mode 100644 index 0000000..225ed59 --- /dev/null +++ b/tests/Application/config/packages/mailer.yaml @@ -0,0 +1,4 @@ +framework: + mailer: + dsn: '%env(MAILER_DSN)%' + diff --git a/tests/Application/config/packages/prod/doctrine.yaml b/tests/Application/config/packages/prod/doctrine.yaml deleted file mode 100644 index 2f16f0f..0000000 --- a/tests/Application/config/packages/prod/doctrine.yaml +++ /dev/null @@ -1,31 +0,0 @@ -doctrine: - orm: - metadata_cache_driver: - type: service - id: doctrine.system_cache_provider - query_cache_driver: - type: service - id: doctrine.system_cache_provider - result_cache_driver: - type: service - id: doctrine.result_cache_provider - -services: - doctrine.result_cache_provider: - class: Symfony\Component\Cache\DoctrineProvider - public: false - arguments: - - '@doctrine.result_cache_pool' - doctrine.system_cache_provider: - class: Symfony\Component\Cache\DoctrineProvider - public: false - arguments: - - '@doctrine.system_cache_pool' - -framework: - cache: - pools: - doctrine.result_cache_pool: - adapter: cache.app - doctrine.system_cache_pool: - adapter: cache.system diff --git a/tests/Application/config/packages/staging/swiftmailer.yaml b/tests/Application/config/packages/staging/swiftmailer.yaml deleted file mode 100644 index f438078..0000000 --- a/tests/Application/config/packages/staging/swiftmailer.yaml +++ /dev/null @@ -1,2 +0,0 @@ -swiftmailer: - disable_delivery: true diff --git a/tests/Application/config/packages/swiftmailer.yaml b/tests/Application/config/packages/swiftmailer.yaml deleted file mode 100644 index 3bab0d3..0000000 --- a/tests/Application/config/packages/swiftmailer.yaml +++ /dev/null @@ -1,2 +0,0 @@ -swiftmailer: - url: '%env(MAILER_URL)%' diff --git a/tests/Application/config/packages/sylius_mailer.yaml b/tests/Application/config/packages/sylius_mailer.yaml new file mode 100644 index 0000000..f0f122b --- /dev/null +++ b/tests/Application/config/packages/sylius_mailer.yaml @@ -0,0 +1,4 @@ +sylius_mailer: + sender: + name: Example + address: no-reply@example.com diff --git a/tests/Application/config/packages/test/framework.yaml b/tests/Application/config/packages/test/framework.yaml index 76d7e5e..daf04d4 100644 --- a/tests/Application/config/packages/test/framework.yaml +++ b/tests/Application/config/packages/test/framework.yaml @@ -1,4 +1,4 @@ framework: test: ~ session: - storage_id: session.storage.mock_file + handler_id: ~ diff --git a/tests/Application/config/packages/test/mailer.yaml b/tests/Application/config/packages/test/mailer.yaml new file mode 100644 index 0000000..cec7f8c --- /dev/null +++ b/tests/Application/config/packages/test/mailer.yaml @@ -0,0 +1,8 @@ +framework: + mailer: + dsn: 'null://null' + cache: + pools: + test.mailer_pool: + adapter: cache.adapter.filesystem + diff --git a/tests/Application/config/packages/test/security.yaml b/tests/Application/config/packages/test/security.yaml index 21cc377..8ccd542 100644 --- a/tests/Application/config/packages/test/security.yaml +++ b/tests/Application/config/packages/test/security.yaml @@ -1,3 +1,3 @@ security: - encoders: + password_hashers: sha512: sha512 diff --git a/tests/Application/config/packages/test/swiftmailer.yaml b/tests/Application/config/packages/test/swiftmailer.yaml deleted file mode 100644 index c438f4b..0000000 --- a/tests/Application/config/packages/test/swiftmailer.yaml +++ /dev/null @@ -1,6 +0,0 @@ -swiftmailer: - disable_delivery: true - logging: true - spool: - type: file - path: "%kernel.cache_dir%/spool" diff --git a/tests/Application/config/packages/test_cached/framework.yaml b/tests/Application/config/packages/test_cached/framework.yaml index 76d7e5e..daf04d4 100644 --- a/tests/Application/config/packages/test_cached/framework.yaml +++ b/tests/Application/config/packages/test_cached/framework.yaml @@ -1,4 +1,4 @@ framework: test: ~ session: - storage_id: session.storage.mock_file + handler_id: ~ diff --git a/tests/Application/config/packages/test_cached/security.yaml b/tests/Application/config/packages/test_cached/security.yaml index 21cc377..8ccd542 100644 --- a/tests/Application/config/packages/test_cached/security.yaml +++ b/tests/Application/config/packages/test_cached/security.yaml @@ -1,3 +1,3 @@ security: - encoders: + password_hashers: sha512: sha512 diff --git a/tests/Application/config/packages/test_cached/swiftmailer.yaml b/tests/Application/config/packages/test_cached/swiftmailer.yaml deleted file mode 100644 index c438f4b..0000000 --- a/tests/Application/config/packages/test_cached/swiftmailer.yaml +++ /dev/null @@ -1,6 +0,0 @@ -swiftmailer: - disable_delivery: true - logging: true - spool: - type: file - path: "%kernel.cache_dir%/spool" diff --git a/tests/Application/config/packages/webpack_encore.yaml b/tests/Application/config/packages/webpack_encore.yaml new file mode 100644 index 0000000..9427d36 --- /dev/null +++ b/tests/Application/config/packages/webpack_encore.yaml @@ -0,0 +1,5 @@ +webpack_encore: + output_path: '%kernel.project_dir%/public/build/default' + builds: + shop: '%kernel.project_dir%/public/build/shop' + admin: '%kernel.project_dir%/public/build/admin' diff --git a/tests/Application/config/sylius/1.10/bundles.php b/tests/Application/config/sylius/1.10/bundles.php deleted file mode 100644 index bd33f4a..0000000 --- a/tests/Application/config/sylius/1.10/bundles.php +++ /dev/null @@ -1,6 +0,0 @@ - ['all' => true], - SyliusLabs\Polyfill\Symfony\Security\Bundle\SyliusLabsPolyfillSymfonySecurityBundle::class => ['all' => true], -]; diff --git a/tests/Application/config/sylius/1.10/packages/security.yaml b/tests/Application/config/sylius/1.10/packages/security.yaml deleted file mode 100644 index 1062810..0000000 --- a/tests/Application/config/sylius/1.10/packages/security.yaml +++ /dev/null @@ -1,148 +0,0 @@ -parameters: - sylius.security.admin_regex: "^/%sylius_admin.path_name%" - sylius.security.api_regex: "^/api" - sylius.security.shop_regex: "^/(?!%sylius_admin.path_name%|new-api|api/.*|api$|media/.*)[^/]++" - sylius.security.new_api_route: "/new-api" - sylius.security.new_api_regex: "^%sylius.security.new_api_route%" - sylius.security.new_api_admin_route: "%sylius.security.new_api_route%/admin" - sylius.security.new_api_admin_regex: "^%sylius.security.new_api_admin_route%" - sylius.security.new_api_shop_route: "%sylius.security.new_api_route%/shop" - sylius.security.new_api_shop_regex: "^%sylius.security.new_api_shop_route%" - -security: - always_authenticate_before_granting: true - providers: - sylius_admin_user_provider: - id: sylius.admin_user_provider.email_or_name_based - sylius_api_admin_user_provider: - id: sylius.admin_user_provider.email_or_name_based - sylius_shop_user_provider: - id: sylius.shop_user_provider.email_or_name_based - sylius_api_shop_user_provider: - id: sylius.shop_user_provider.email_or_name_based - sylius_api_chain_provider: - chain: - providers: [sylius_api_shop_user_provider, sylius_api_admin_user_provider] - - encoders: - Sylius\Component\User\Model\UserInterface: argon2i - firewalls: - admin: - switch_user: true - context: admin - pattern: "%sylius.security.admin_regex%" - provider: sylius_admin_user_provider - form_login: - provider: sylius_admin_user_provider - login_path: sylius_admin_login - check_path: sylius_admin_login_check - failure_path: sylius_admin_login - default_target_path: sylius_admin_dashboard - use_forward: false - use_referer: true - csrf_token_generator: security.csrf.token_manager - csrf_parameter: _csrf_admin_security_token - csrf_token_id: admin_authenticate - remember_me: - secret: "%env(APP_SECRET)%" - path: "/%sylius_admin.path_name%" - name: APP_ADMIN_REMEMBER_ME - lifetime: 31536000 - remember_me_parameter: _remember_me - logout: - path: sylius_admin_logout - target: sylius_admin_login - anonymous: true - - new_api_admin_user: - pattern: "%sylius.security.new_api_route%/admin-user-authentication-token" - provider: sylius_admin_user_provider - stateless: true - anonymous: true - json_login: - check_path: "%sylius.security.new_api_route%/admin-user-authentication-token" - username_path: email - password_path: password - success_handler: lexik_jwt_authentication.handler.authentication_success - failure_handler: lexik_jwt_authentication.handler.authentication_failure - guard: - authenticators: - - lexik_jwt_authentication.jwt_token_authenticator - - new_api_shop_user: - pattern: "%sylius.security.new_api_route%/shop-user-authentication-token" - provider: sylius_shop_user_provider - stateless: true - anonymous: true - json_login: - check_path: "%sylius.security.new_api_route%/shop-user-authentication-token" - username_path: email - password_path: password - success_handler: lexik_jwt_authentication.handler.authentication_success - failure_handler: lexik_jwt_authentication.handler.authentication_failure - guard: - authenticators: - - lexik_jwt_authentication.jwt_token_authenticator - - new_api: - pattern: "%sylius.security.new_api_regex%/*" - provider: sylius_api_chain_provider - stateless: true - anonymous: lazy - guard: - authenticators: - - lexik_jwt_authentication.jwt_token_authenticator - - shop: - switch_user: { role: ROLE_ALLOWED_TO_SWITCH } - context: shop - pattern: "%sylius.security.shop_regex%" - provider: sylius_shop_user_provider - form_login: - success_handler: sylius.authentication.success_handler - failure_handler: sylius.authentication.failure_handler - provider: sylius_shop_user_provider - login_path: sylius_shop_login - check_path: sylius_shop_login_check - failure_path: sylius_shop_login - default_target_path: sylius_shop_homepage - use_forward: false - use_referer: true - csrf_token_generator: security.csrf.token_manager - csrf_parameter: _csrf_shop_security_token - csrf_token_id: shop_authenticate - remember_me: - secret: "%env(APP_SECRET)%" - name: APP_SHOP_REMEMBER_ME - lifetime: 31536000 - remember_me_parameter: _remember_me - logout: - path: sylius_shop_logout - target: sylius_shop_login - invalidate_session: false - success_handler: sylius.handler.shop_user_logout - anonymous: true - - dev: - pattern: ^/(_(profiler|wdt)|css|images|js)/ - security: false - - access_control: - - { path: "%sylius.security.admin_regex%/_partial", role: IS_AUTHENTICATED_ANONYMOUSLY, ips: [127.0.0.1, ::1] } - - { path: "%sylius.security.admin_regex%/_partial", role: ROLE_NO_ACCESS } - - { path: "%sylius.security.shop_regex%/_partial", role: IS_AUTHENTICATED_ANONYMOUSLY, ips: [127.0.0.1, ::1] } - - { path: "%sylius.security.shop_regex%/_partial", role: ROLE_NO_ACCESS } - - - { path: "%sylius.security.admin_regex%/login", role: IS_AUTHENTICATED_ANONYMOUSLY } - - { path: "%sylius.security.api_regex%/login", role: IS_AUTHENTICATED_ANONYMOUSLY } - - { path: "%sylius.security.shop_regex%/login", role: IS_AUTHENTICATED_ANONYMOUSLY } - - - { path: "%sylius.security.shop_regex%/register", role: IS_AUTHENTICATED_ANONYMOUSLY } - - { path: "%sylius.security.shop_regex%/verify", role: IS_AUTHENTICATED_ANONYMOUSLY } - - - { path: "%sylius.security.admin_regex%", role: ROLE_ADMINISTRATION_ACCESS } - - { path: "%sylius.security.api_regex%/.*", role: ROLE_API_ACCESS } - - { path: "%sylius.security.shop_regex%/account", role: ROLE_USER } - - - { path: "%sylius.security.new_api_admin_regex%/.*", role: ROLE_API_ACCESS } - - { path: "%sylius.security.new_api_shop_regex%/.*", role: IS_AUTHENTICATED_ANONYMOUSLY } diff --git a/tests/Application/config/sylius/1.11/bundles.php b/tests/Application/config/sylius/1.11/bundles.php deleted file mode 100644 index ce7c123..0000000 --- a/tests/Application/config/sylius/1.11/bundles.php +++ /dev/null @@ -1,7 +0,0 @@ - ['all' => true], - SyliusLabs\Polyfill\Symfony\Security\Bundle\SyliusLabsPolyfillSymfonySecurityBundle::class => ['all' => true], - Sylius\Calendar\SyliusCalendarBundle::class => ['all' => true], -]; diff --git a/tests/Application/config/sylius/1.11/packages/security.yaml b/tests/Application/config/sylius/1.11/packages/security.yaml deleted file mode 100644 index 1062810..0000000 --- a/tests/Application/config/sylius/1.11/packages/security.yaml +++ /dev/null @@ -1,148 +0,0 @@ -parameters: - sylius.security.admin_regex: "^/%sylius_admin.path_name%" - sylius.security.api_regex: "^/api" - sylius.security.shop_regex: "^/(?!%sylius_admin.path_name%|new-api|api/.*|api$|media/.*)[^/]++" - sylius.security.new_api_route: "/new-api" - sylius.security.new_api_regex: "^%sylius.security.new_api_route%" - sylius.security.new_api_admin_route: "%sylius.security.new_api_route%/admin" - sylius.security.new_api_admin_regex: "^%sylius.security.new_api_admin_route%" - sylius.security.new_api_shop_route: "%sylius.security.new_api_route%/shop" - sylius.security.new_api_shop_regex: "^%sylius.security.new_api_shop_route%" - -security: - always_authenticate_before_granting: true - providers: - sylius_admin_user_provider: - id: sylius.admin_user_provider.email_or_name_based - sylius_api_admin_user_provider: - id: sylius.admin_user_provider.email_or_name_based - sylius_shop_user_provider: - id: sylius.shop_user_provider.email_or_name_based - sylius_api_shop_user_provider: - id: sylius.shop_user_provider.email_or_name_based - sylius_api_chain_provider: - chain: - providers: [sylius_api_shop_user_provider, sylius_api_admin_user_provider] - - encoders: - Sylius\Component\User\Model\UserInterface: argon2i - firewalls: - admin: - switch_user: true - context: admin - pattern: "%sylius.security.admin_regex%" - provider: sylius_admin_user_provider - form_login: - provider: sylius_admin_user_provider - login_path: sylius_admin_login - check_path: sylius_admin_login_check - failure_path: sylius_admin_login - default_target_path: sylius_admin_dashboard - use_forward: false - use_referer: true - csrf_token_generator: security.csrf.token_manager - csrf_parameter: _csrf_admin_security_token - csrf_token_id: admin_authenticate - remember_me: - secret: "%env(APP_SECRET)%" - path: "/%sylius_admin.path_name%" - name: APP_ADMIN_REMEMBER_ME - lifetime: 31536000 - remember_me_parameter: _remember_me - logout: - path: sylius_admin_logout - target: sylius_admin_login - anonymous: true - - new_api_admin_user: - pattern: "%sylius.security.new_api_route%/admin-user-authentication-token" - provider: sylius_admin_user_provider - stateless: true - anonymous: true - json_login: - check_path: "%sylius.security.new_api_route%/admin-user-authentication-token" - username_path: email - password_path: password - success_handler: lexik_jwt_authentication.handler.authentication_success - failure_handler: lexik_jwt_authentication.handler.authentication_failure - guard: - authenticators: - - lexik_jwt_authentication.jwt_token_authenticator - - new_api_shop_user: - pattern: "%sylius.security.new_api_route%/shop-user-authentication-token" - provider: sylius_shop_user_provider - stateless: true - anonymous: true - json_login: - check_path: "%sylius.security.new_api_route%/shop-user-authentication-token" - username_path: email - password_path: password - success_handler: lexik_jwt_authentication.handler.authentication_success - failure_handler: lexik_jwt_authentication.handler.authentication_failure - guard: - authenticators: - - lexik_jwt_authentication.jwt_token_authenticator - - new_api: - pattern: "%sylius.security.new_api_regex%/*" - provider: sylius_api_chain_provider - stateless: true - anonymous: lazy - guard: - authenticators: - - lexik_jwt_authentication.jwt_token_authenticator - - shop: - switch_user: { role: ROLE_ALLOWED_TO_SWITCH } - context: shop - pattern: "%sylius.security.shop_regex%" - provider: sylius_shop_user_provider - form_login: - success_handler: sylius.authentication.success_handler - failure_handler: sylius.authentication.failure_handler - provider: sylius_shop_user_provider - login_path: sylius_shop_login - check_path: sylius_shop_login_check - failure_path: sylius_shop_login - default_target_path: sylius_shop_homepage - use_forward: false - use_referer: true - csrf_token_generator: security.csrf.token_manager - csrf_parameter: _csrf_shop_security_token - csrf_token_id: shop_authenticate - remember_me: - secret: "%env(APP_SECRET)%" - name: APP_SHOP_REMEMBER_ME - lifetime: 31536000 - remember_me_parameter: _remember_me - logout: - path: sylius_shop_logout - target: sylius_shop_login - invalidate_session: false - success_handler: sylius.handler.shop_user_logout - anonymous: true - - dev: - pattern: ^/(_(profiler|wdt)|css|images|js)/ - security: false - - access_control: - - { path: "%sylius.security.admin_regex%/_partial", role: IS_AUTHENTICATED_ANONYMOUSLY, ips: [127.0.0.1, ::1] } - - { path: "%sylius.security.admin_regex%/_partial", role: ROLE_NO_ACCESS } - - { path: "%sylius.security.shop_regex%/_partial", role: IS_AUTHENTICATED_ANONYMOUSLY, ips: [127.0.0.1, ::1] } - - { path: "%sylius.security.shop_regex%/_partial", role: ROLE_NO_ACCESS } - - - { path: "%sylius.security.admin_regex%/login", role: IS_AUTHENTICATED_ANONYMOUSLY } - - { path: "%sylius.security.api_regex%/login", role: IS_AUTHENTICATED_ANONYMOUSLY } - - { path: "%sylius.security.shop_regex%/login", role: IS_AUTHENTICATED_ANONYMOUSLY } - - - { path: "%sylius.security.shop_regex%/register", role: IS_AUTHENTICATED_ANONYMOUSLY } - - { path: "%sylius.security.shop_regex%/verify", role: IS_AUTHENTICATED_ANONYMOUSLY } - - - { path: "%sylius.security.admin_regex%", role: ROLE_ADMINISTRATION_ACCESS } - - { path: "%sylius.security.api_regex%/.*", role: ROLE_API_ACCESS } - - { path: "%sylius.security.shop_regex%/account", role: ROLE_USER } - - - { path: "%sylius.security.new_api_admin_regex%/.*", role: ROLE_API_ACCESS } - - { path: "%sylius.security.new_api_shop_regex%/.*", role: IS_AUTHENTICATED_ANONYMOUSLY } diff --git a/tests/Application/config/sylius/1.12/packages/security.yaml b/tests/Application/config/sylius/1.12/packages/security.yaml new file mode 100644 index 0000000..842b093 --- /dev/null +++ b/tests/Application/config/sylius/1.12/packages/security.yaml @@ -0,0 +1,124 @@ +security: + enable_authenticator_manager: true + providers: + sylius_admin_user_provider: + id: sylius.admin_user_provider.email_or_name_based + sylius_api_admin_user_provider: + id: sylius.admin_user_provider.email_or_name_based + sylius_shop_user_provider: + id: sylius.shop_user_provider.email_or_name_based + sylius_api_shop_user_provider: + id: sylius.shop_user_provider.email_or_name_based + + password_hashers: + Sylius\Component\User\Model\UserInterface: argon2i + firewalls: + admin: + switch_user: true + context: admin + pattern: "%sylius.security.admin_regex%" + provider: sylius_admin_user_provider + form_login: + provider: sylius_admin_user_provider + login_path: sylius_admin_login + check_path: sylius_admin_login_check + failure_path: sylius_admin_login + default_target_path: sylius_admin_dashboard + use_forward: false + use_referer: true + enable_csrf: true + csrf_parameter: _csrf_admin_security_token + csrf_token_id: admin_authenticate + remember_me: + secret: "%env(APP_SECRET)%" + path: "/%sylius_admin.path_name%" + name: APP_ADMIN_REMEMBER_ME + lifetime: 31536000 + remember_me_parameter: _remember_me + logout: + path: sylius_admin_logout + target: sylius_admin_login + + new_api_admin_user: + pattern: "%sylius.security.new_api_admin_regex%/.*" + provider: sylius_api_admin_user_provider + stateless: true + entry_point: jwt + json_login: + check_path: "%sylius.security.new_api_admin_route%/authentication-token" + username_path: email + password_path: password + success_handler: lexik_jwt_authentication.handler.authentication_success + failure_handler: lexik_jwt_authentication.handler.authentication_failure + jwt: true + + new_api_shop_user: + pattern: "%sylius.security.new_api_shop_regex%/.*" + provider: sylius_api_shop_user_provider + stateless: true + entry_point: jwt + json_login: + check_path: "%sylius.security.new_api_shop_route%/authentication-token" + username_path: email + password_path: password + success_handler: lexik_jwt_authentication.handler.authentication_success + failure_handler: lexik_jwt_authentication.handler.authentication_failure + jwt: true + + shop: + switch_user: { role: ROLE_ALLOWED_TO_SWITCH } + context: shop + pattern: "%sylius.security.shop_regex%" + provider: sylius_shop_user_provider + form_login: + success_handler: sylius.authentication.success_handler + failure_handler: sylius.authentication.failure_handler + provider: sylius_shop_user_provider + login_path: sylius_shop_login + check_path: sylius_shop_login_check + failure_path: sylius_shop_login + default_target_path: sylius_shop_homepage + use_forward: false + use_referer: true + enable_csrf: true + csrf_parameter: _csrf_shop_security_token + csrf_token_id: shop_authenticate + remember_me: + secret: "%env(APP_SECRET)%" + name: APP_SHOP_REMEMBER_ME + lifetime: 31536000 + remember_me_parameter: _remember_me + logout: + path: sylius_shop_logout + target: sylius_shop_homepage + invalidate_session: false + + dev: + pattern: ^/(_(profiler|wdt)|css|images|js)/ + security: false + + image_resolver: + pattern: ^/media/cache/resolve + security: false + + access_control: + - { path: "%sylius.security.admin_regex%/_partial", role: PUBLIC_ACCESS, ips: [127.0.0.1, ::1] } + - { path: "%sylius.security.admin_regex%/_partial", role: ROLE_NO_ACCESS } + - { path: "%sylius.security.shop_regex%/_partial", role: PUBLIC_ACCESS, ips: [127.0.0.1, ::1] } + - { path: "%sylius.security.shop_regex%/_partial", role: ROLE_NO_ACCESS } + + - { path: "%sylius.security.admin_regex%/login", role: PUBLIC_ACCESS } + - { path: "%sylius.security.shop_regex%/login", role: PUBLIC_ACCESS } + + - { path: "%sylius.security.shop_regex%/register", role: PUBLIC_ACCESS } + - { path: "%sylius.security.shop_regex%/verify", role: PUBLIC_ACCESS } + + - { path: "%sylius.security.admin_regex%", role: ROLE_ADMINISTRATION_ACCESS } + - { path: "%sylius.security.shop_regex%/account", role: ROLE_USER } + + - { path: "%sylius.security.new_api_admin_route%/reset-password-requests", role: PUBLIC_ACCESS } + - { path: "%sylius.security.new_api_admin_regex%/.*", role: ROLE_API_ACCESS } + - { path: "%sylius.security.new_api_admin_route%/authentication-token", role: PUBLIC_ACCESS } + - { path: "%sylius.security.new_api_user_account_regex%/.*", role: ROLE_USER } + - { path: "%sylius.security.new_api_shop_route%/authentication-token", role: PUBLIC_ACCESS } + - { path: "%sylius.security.new_api_shop_regex%/.*", role: PUBLIC_ACCESS } diff --git a/tests/Application/config/sylius/1.13/bundles.php b/tests/Application/config/sylius/1.13/bundles.php new file mode 100644 index 0000000..5d54121 --- /dev/null +++ b/tests/Application/config/sylius/1.13/bundles.php @@ -0,0 +1,7 @@ + ['all' => true], +]; diff --git a/tests/Application/config/sylius/1.13/packages/_sylius.yaml b/tests/Application/config/sylius/1.13/packages/_sylius.yaml new file mode 100644 index 0000000..baa3d7e --- /dev/null +++ b/tests/Application/config/sylius/1.13/packages/_sylius.yaml @@ -0,0 +1,10 @@ +parameters: + test_default_state_machine_adapter: 'symfony_workflow' + test_sylius_state_machine_adapter: '%env(string:default:test_default_state_machine_adapter:TEST_SYLIUS_STATE_MACHINE_ADAPTER)%' + +sylius_state_machine_abstraction: + graphs_to_adapters_mapping: + sylius_refund_refund_payment: '%test_sylius_state_machine_adapter%' + +sylius_api: + enabled: true diff --git a/tests/Application/config/sylius/1.13/packages/security.yaml b/tests/Application/config/sylius/1.13/packages/security.yaml new file mode 100644 index 0000000..842b093 --- /dev/null +++ b/tests/Application/config/sylius/1.13/packages/security.yaml @@ -0,0 +1,124 @@ +security: + enable_authenticator_manager: true + providers: + sylius_admin_user_provider: + id: sylius.admin_user_provider.email_or_name_based + sylius_api_admin_user_provider: + id: sylius.admin_user_provider.email_or_name_based + sylius_shop_user_provider: + id: sylius.shop_user_provider.email_or_name_based + sylius_api_shop_user_provider: + id: sylius.shop_user_provider.email_or_name_based + + password_hashers: + Sylius\Component\User\Model\UserInterface: argon2i + firewalls: + admin: + switch_user: true + context: admin + pattern: "%sylius.security.admin_regex%" + provider: sylius_admin_user_provider + form_login: + provider: sylius_admin_user_provider + login_path: sylius_admin_login + check_path: sylius_admin_login_check + failure_path: sylius_admin_login + default_target_path: sylius_admin_dashboard + use_forward: false + use_referer: true + enable_csrf: true + csrf_parameter: _csrf_admin_security_token + csrf_token_id: admin_authenticate + remember_me: + secret: "%env(APP_SECRET)%" + path: "/%sylius_admin.path_name%" + name: APP_ADMIN_REMEMBER_ME + lifetime: 31536000 + remember_me_parameter: _remember_me + logout: + path: sylius_admin_logout + target: sylius_admin_login + + new_api_admin_user: + pattern: "%sylius.security.new_api_admin_regex%/.*" + provider: sylius_api_admin_user_provider + stateless: true + entry_point: jwt + json_login: + check_path: "%sylius.security.new_api_admin_route%/authentication-token" + username_path: email + password_path: password + success_handler: lexik_jwt_authentication.handler.authentication_success + failure_handler: lexik_jwt_authentication.handler.authentication_failure + jwt: true + + new_api_shop_user: + pattern: "%sylius.security.new_api_shop_regex%/.*" + provider: sylius_api_shop_user_provider + stateless: true + entry_point: jwt + json_login: + check_path: "%sylius.security.new_api_shop_route%/authentication-token" + username_path: email + password_path: password + success_handler: lexik_jwt_authentication.handler.authentication_success + failure_handler: lexik_jwt_authentication.handler.authentication_failure + jwt: true + + shop: + switch_user: { role: ROLE_ALLOWED_TO_SWITCH } + context: shop + pattern: "%sylius.security.shop_regex%" + provider: sylius_shop_user_provider + form_login: + success_handler: sylius.authentication.success_handler + failure_handler: sylius.authentication.failure_handler + provider: sylius_shop_user_provider + login_path: sylius_shop_login + check_path: sylius_shop_login_check + failure_path: sylius_shop_login + default_target_path: sylius_shop_homepage + use_forward: false + use_referer: true + enable_csrf: true + csrf_parameter: _csrf_shop_security_token + csrf_token_id: shop_authenticate + remember_me: + secret: "%env(APP_SECRET)%" + name: APP_SHOP_REMEMBER_ME + lifetime: 31536000 + remember_me_parameter: _remember_me + logout: + path: sylius_shop_logout + target: sylius_shop_homepage + invalidate_session: false + + dev: + pattern: ^/(_(profiler|wdt)|css|images|js)/ + security: false + + image_resolver: + pattern: ^/media/cache/resolve + security: false + + access_control: + - { path: "%sylius.security.admin_regex%/_partial", role: PUBLIC_ACCESS, ips: [127.0.0.1, ::1] } + - { path: "%sylius.security.admin_regex%/_partial", role: ROLE_NO_ACCESS } + - { path: "%sylius.security.shop_regex%/_partial", role: PUBLIC_ACCESS, ips: [127.0.0.1, ::1] } + - { path: "%sylius.security.shop_regex%/_partial", role: ROLE_NO_ACCESS } + + - { path: "%sylius.security.admin_regex%/login", role: PUBLIC_ACCESS } + - { path: "%sylius.security.shop_regex%/login", role: PUBLIC_ACCESS } + + - { path: "%sylius.security.shop_regex%/register", role: PUBLIC_ACCESS } + - { path: "%sylius.security.shop_regex%/verify", role: PUBLIC_ACCESS } + + - { path: "%sylius.security.admin_regex%", role: ROLE_ADMINISTRATION_ACCESS } + - { path: "%sylius.security.shop_regex%/account", role: ROLE_USER } + + - { path: "%sylius.security.new_api_admin_route%/reset-password-requests", role: PUBLIC_ACCESS } + - { path: "%sylius.security.new_api_admin_regex%/.*", role: ROLE_API_ACCESS } + - { path: "%sylius.security.new_api_admin_route%/authentication-token", role: PUBLIC_ACCESS } + - { path: "%sylius.security.new_api_user_account_regex%/.*", role: ROLE_USER } + - { path: "%sylius.security.new_api_shop_route%/authentication-token", role: PUBLIC_ACCESS } + - { path: "%sylius.security.new_api_shop_regex%/.*", role: PUBLIC_ACCESS } diff --git a/tests/Application/config/sylius/1.8/bundles.php b/tests/Application/config/sylius/1.8/bundles.php deleted file mode 100644 index c3c8ea4..0000000 --- a/tests/Application/config/sylius/1.8/bundles.php +++ /dev/null @@ -1,8 +0,0 @@ - ['all' => true], - WhiteOctober\PagerfantaBundle\WhiteOctoberPagerfantaBundle::class => ['all' => true], - FOS\OAuthServerBundle\FOSOAuthServerBundle::class => ['all' => true], - Sylius\Bundle\AdminApiBundle\SyliusAdminApiBundle::class => ['all' => true], -]; diff --git a/tests/Application/config/sylius/1.8/packages/_sylius.yaml b/tests/Application/config/sylius/1.8/packages/_sylius.yaml deleted file mode 100644 index 1674a97..0000000 --- a/tests/Application/config/sylius/1.8/packages/_sylius.yaml +++ /dev/null @@ -1,2 +0,0 @@ -imports: - - { resource: "@SyliusAdminApiBundle/Resources/config/app/config.yml" } diff --git a/tests/Application/config/sylius/1.8/packages/security.yaml b/tests/Application/config/sylius/1.8/packages/security.yaml deleted file mode 100644 index 8161bda..0000000 --- a/tests/Application/config/sylius/1.8/packages/security.yaml +++ /dev/null @@ -1,159 +0,0 @@ -parameters: - sylius.security.admin_regex: "^/%sylius_admin.path_name%" - sylius.security.api_regex: "^/api" - sylius.security.shop_regex: "^/(?!%sylius_admin.path_name%|new-api|api/.*|api$|media/.*)[^/]++" - sylius.security.new_api_route: "/new-api" - sylius.security.new_api_regex: "^%sylius.security.new_api_route%" - sylius.security.new_api_admin_route: "%sylius.security.new_api_route%/admin" - sylius.security.new_api_admin_regex: "^%sylius.security.new_api_admin_route%" - sylius.security.new_api_shop_route: "%sylius.security.new_api_route%/shop" - sylius.security.new_api_shop_regex: "^%sylius.security.new_api_shop_route%" - -security: - always_authenticate_before_granting: true - providers: - sylius_admin_user_provider: - id: sylius.admin_user_provider.email_or_name_based - sylius_api_admin_user_provider: - id: sylius.admin_user_provider.email_or_name_based - sylius_shop_user_provider: - id: sylius.shop_user_provider.email_or_name_based - sylius_api_shop_user_provider: - id: sylius.shop_user_provider.email_or_name_based - sylius_api_chain_provider: - chain: - providers: [sylius_api_shop_user_provider, sylius_api_admin_user_provider] - - encoders: - Sylius\Component\User\Model\UserInterface: argon2i - firewalls: - admin: - switch_user: true - context: admin - pattern: "%sylius.security.admin_regex%" - provider: sylius_admin_user_provider - form_login: - provider: sylius_admin_user_provider - login_path: sylius_admin_login - check_path: sylius_admin_login_check - failure_path: sylius_admin_login - default_target_path: sylius_admin_dashboard - use_forward: false - use_referer: true - csrf_token_generator: security.csrf.token_manager - csrf_parameter: _csrf_admin_security_token - csrf_token_id: admin_authenticate - remember_me: - secret: "%env(APP_SECRET)%" - path: "/%sylius_admin.path_name%" - name: APP_ADMIN_REMEMBER_ME - lifetime: 31536000 - remember_me_parameter: _remember_me - logout: - path: sylius_admin_logout - target: sylius_admin_login - anonymous: true - - oauth_token: - pattern: "%sylius.security.api_regex%/oauth/v2/token" - security: false - - new_api_admin_user: - pattern: "%sylius.security.new_api_route%/admin-user-authentication-token" - provider: sylius_admin_user_provider - stateless: true - anonymous: true - json_login: - check_path: "%sylius.security.new_api_route%/admin-user-authentication-token" - username_path: email - password_path: password - success_handler: lexik_jwt_authentication.handler.authentication_success - failure_handler: lexik_jwt_authentication.handler.authentication_failure - guard: - authenticators: - - lexik_jwt_authentication.jwt_token_authenticator - - new_api_shop_user: - pattern: "%sylius.security.new_api_route%/shop-user-authentication-token" - provider: sylius_shop_user_provider - stateless: true - anonymous: true - json_login: - check_path: "%sylius.security.new_api_route%/shop-user-authentication-token" - username_path: email - password_path: password - success_handler: lexik_jwt_authentication.handler.authentication_success - failure_handler: lexik_jwt_authentication.handler.authentication_failure - guard: - authenticators: - - lexik_jwt_authentication.jwt_token_authenticator - - new_api: - pattern: "%sylius.security.new_api_regex%/*" - provider: sylius_api_chain_provider - stateless: true - anonymous: lazy - guard: - authenticators: - - lexik_jwt_authentication.jwt_token_authenticator - - api: - pattern: "%sylius.security.api_regex%/.*" - provider: sylius_admin_user_provider - fos_oauth: true - stateless: true - anonymous: true - - shop: - switch_user: { role: ROLE_ALLOWED_TO_SWITCH } - context: shop - pattern: "%sylius.security.shop_regex%" - provider: sylius_shop_user_provider - form_login: - success_handler: sylius.authentication.success_handler - failure_handler: sylius.authentication.failure_handler - provider: sylius_shop_user_provider - login_path: sylius_shop_login - check_path: sylius_shop_login_check - failure_path: sylius_shop_login - default_target_path: sylius_shop_homepage - use_forward: false - use_referer: true - csrf_token_generator: security.csrf.token_manager - csrf_parameter: _csrf_shop_security_token - csrf_token_id: shop_authenticate - remember_me: - secret: "%env(APP_SECRET)%" - name: APP_SHOP_REMEMBER_ME - lifetime: 31536000 - remember_me_parameter: _remember_me - logout: - path: sylius_shop_logout - target: sylius_shop_login - invalidate_session: false - success_handler: sylius.handler.shop_user_logout - anonymous: true - - dev: - pattern: ^/(_(profiler|wdt)|css|images|js)/ - security: false - - access_control: - - { path: "%sylius.security.admin_regex%/_partial", role: IS_AUTHENTICATED_ANONYMOUSLY, ips: [127.0.0.1, ::1] } - - { path: "%sylius.security.admin_regex%/_partial", role: ROLE_NO_ACCESS } - - { path: "%sylius.security.shop_regex%/_partial", role: IS_AUTHENTICATED_ANONYMOUSLY, ips: [127.0.0.1, ::1] } - - { path: "%sylius.security.shop_regex%/_partial", role: ROLE_NO_ACCESS } - - - { path: "%sylius.security.admin_regex%/login", role: IS_AUTHENTICATED_ANONYMOUSLY } - - { path: "%sylius.security.api_regex%/login", role: IS_AUTHENTICATED_ANONYMOUSLY } - - { path: "%sylius.security.shop_regex%/login", role: IS_AUTHENTICATED_ANONYMOUSLY } - - - { path: "%sylius.security.shop_regex%/register", role: IS_AUTHENTICATED_ANONYMOUSLY } - - { path: "%sylius.security.shop_regex%/verify", role: IS_AUTHENTICATED_ANONYMOUSLY } - - - { path: "%sylius.security.admin_regex%", role: ROLE_ADMINISTRATION_ACCESS } - - { path: "%sylius.security.api_regex%/.*", role: ROLE_API_ACCESS } - - { path: "%sylius.security.shop_regex%/account", role: ROLE_USER } - - - { path: "%sylius.security.new_api_admin_regex%/.*", role: ROLE_API_ACCESS } - - { path: "%sylius.security.new_api_shop_regex%/.*", role: IS_AUTHENTICATED_ANONYMOUSLY } diff --git a/tests/Application/config/sylius/1.8/routes/sylius_admin_api.yaml b/tests/Application/config/sylius/1.8/routes/sylius_admin_api.yaml deleted file mode 100644 index 80aed45..0000000 --- a/tests/Application/config/sylius/1.8/routes/sylius_admin_api.yaml +++ /dev/null @@ -1,3 +0,0 @@ -sylius_admin_api: - resource: "@SyliusAdminApiBundle/Resources/config/routing.yml" - prefix: /api diff --git a/tests/Application/config/sylius/1.9/bundles.php b/tests/Application/config/sylius/1.9/bundles.php deleted file mode 100644 index 66f523d..0000000 --- a/tests/Application/config/sylius/1.9/bundles.php +++ /dev/null @@ -1,8 +0,0 @@ - ['all' => true], - SyliusLabs\Polyfill\Symfony\Security\Bundle\SyliusLabsPolyfillSymfonySecurityBundle::class => ['all' => true], - FOS\OAuthServerBundle\FOSOAuthServerBundle::class => ['all' => true], - Sylius\Bundle\AdminApiBundle\SyliusAdminApiBundle::class => ['all' => true], -]; diff --git a/tests/Application/config/sylius/1.9/packages/_sylius.yaml b/tests/Application/config/sylius/1.9/packages/_sylius.yaml deleted file mode 100644 index 1674a97..0000000 --- a/tests/Application/config/sylius/1.9/packages/_sylius.yaml +++ /dev/null @@ -1,2 +0,0 @@ -imports: - - { resource: "@SyliusAdminApiBundle/Resources/config/app/config.yml" } diff --git a/tests/Application/config/sylius/1.9/packages/security.yaml b/tests/Application/config/sylius/1.9/packages/security.yaml deleted file mode 100644 index 8161bda..0000000 --- a/tests/Application/config/sylius/1.9/packages/security.yaml +++ /dev/null @@ -1,159 +0,0 @@ -parameters: - sylius.security.admin_regex: "^/%sylius_admin.path_name%" - sylius.security.api_regex: "^/api" - sylius.security.shop_regex: "^/(?!%sylius_admin.path_name%|new-api|api/.*|api$|media/.*)[^/]++" - sylius.security.new_api_route: "/new-api" - sylius.security.new_api_regex: "^%sylius.security.new_api_route%" - sylius.security.new_api_admin_route: "%sylius.security.new_api_route%/admin" - sylius.security.new_api_admin_regex: "^%sylius.security.new_api_admin_route%" - sylius.security.new_api_shop_route: "%sylius.security.new_api_route%/shop" - sylius.security.new_api_shop_regex: "^%sylius.security.new_api_shop_route%" - -security: - always_authenticate_before_granting: true - providers: - sylius_admin_user_provider: - id: sylius.admin_user_provider.email_or_name_based - sylius_api_admin_user_provider: - id: sylius.admin_user_provider.email_or_name_based - sylius_shop_user_provider: - id: sylius.shop_user_provider.email_or_name_based - sylius_api_shop_user_provider: - id: sylius.shop_user_provider.email_or_name_based - sylius_api_chain_provider: - chain: - providers: [sylius_api_shop_user_provider, sylius_api_admin_user_provider] - - encoders: - Sylius\Component\User\Model\UserInterface: argon2i - firewalls: - admin: - switch_user: true - context: admin - pattern: "%sylius.security.admin_regex%" - provider: sylius_admin_user_provider - form_login: - provider: sylius_admin_user_provider - login_path: sylius_admin_login - check_path: sylius_admin_login_check - failure_path: sylius_admin_login - default_target_path: sylius_admin_dashboard - use_forward: false - use_referer: true - csrf_token_generator: security.csrf.token_manager - csrf_parameter: _csrf_admin_security_token - csrf_token_id: admin_authenticate - remember_me: - secret: "%env(APP_SECRET)%" - path: "/%sylius_admin.path_name%" - name: APP_ADMIN_REMEMBER_ME - lifetime: 31536000 - remember_me_parameter: _remember_me - logout: - path: sylius_admin_logout - target: sylius_admin_login - anonymous: true - - oauth_token: - pattern: "%sylius.security.api_regex%/oauth/v2/token" - security: false - - new_api_admin_user: - pattern: "%sylius.security.new_api_route%/admin-user-authentication-token" - provider: sylius_admin_user_provider - stateless: true - anonymous: true - json_login: - check_path: "%sylius.security.new_api_route%/admin-user-authentication-token" - username_path: email - password_path: password - success_handler: lexik_jwt_authentication.handler.authentication_success - failure_handler: lexik_jwt_authentication.handler.authentication_failure - guard: - authenticators: - - lexik_jwt_authentication.jwt_token_authenticator - - new_api_shop_user: - pattern: "%sylius.security.new_api_route%/shop-user-authentication-token" - provider: sylius_shop_user_provider - stateless: true - anonymous: true - json_login: - check_path: "%sylius.security.new_api_route%/shop-user-authentication-token" - username_path: email - password_path: password - success_handler: lexik_jwt_authentication.handler.authentication_success - failure_handler: lexik_jwt_authentication.handler.authentication_failure - guard: - authenticators: - - lexik_jwt_authentication.jwt_token_authenticator - - new_api: - pattern: "%sylius.security.new_api_regex%/*" - provider: sylius_api_chain_provider - stateless: true - anonymous: lazy - guard: - authenticators: - - lexik_jwt_authentication.jwt_token_authenticator - - api: - pattern: "%sylius.security.api_regex%/.*" - provider: sylius_admin_user_provider - fos_oauth: true - stateless: true - anonymous: true - - shop: - switch_user: { role: ROLE_ALLOWED_TO_SWITCH } - context: shop - pattern: "%sylius.security.shop_regex%" - provider: sylius_shop_user_provider - form_login: - success_handler: sylius.authentication.success_handler - failure_handler: sylius.authentication.failure_handler - provider: sylius_shop_user_provider - login_path: sylius_shop_login - check_path: sylius_shop_login_check - failure_path: sylius_shop_login - default_target_path: sylius_shop_homepage - use_forward: false - use_referer: true - csrf_token_generator: security.csrf.token_manager - csrf_parameter: _csrf_shop_security_token - csrf_token_id: shop_authenticate - remember_me: - secret: "%env(APP_SECRET)%" - name: APP_SHOP_REMEMBER_ME - lifetime: 31536000 - remember_me_parameter: _remember_me - logout: - path: sylius_shop_logout - target: sylius_shop_login - invalidate_session: false - success_handler: sylius.handler.shop_user_logout - anonymous: true - - dev: - pattern: ^/(_(profiler|wdt)|css|images|js)/ - security: false - - access_control: - - { path: "%sylius.security.admin_regex%/_partial", role: IS_AUTHENTICATED_ANONYMOUSLY, ips: [127.0.0.1, ::1] } - - { path: "%sylius.security.admin_regex%/_partial", role: ROLE_NO_ACCESS } - - { path: "%sylius.security.shop_regex%/_partial", role: IS_AUTHENTICATED_ANONYMOUSLY, ips: [127.0.0.1, ::1] } - - { path: "%sylius.security.shop_regex%/_partial", role: ROLE_NO_ACCESS } - - - { path: "%sylius.security.admin_regex%/login", role: IS_AUTHENTICATED_ANONYMOUSLY } - - { path: "%sylius.security.api_regex%/login", role: IS_AUTHENTICATED_ANONYMOUSLY } - - { path: "%sylius.security.shop_regex%/login", role: IS_AUTHENTICATED_ANONYMOUSLY } - - - { path: "%sylius.security.shop_regex%/register", role: IS_AUTHENTICATED_ANONYMOUSLY } - - { path: "%sylius.security.shop_regex%/verify", role: IS_AUTHENTICATED_ANONYMOUSLY } - - - { path: "%sylius.security.admin_regex%", role: ROLE_ADMINISTRATION_ACCESS } - - { path: "%sylius.security.api_regex%/.*", role: ROLE_API_ACCESS } - - { path: "%sylius.security.shop_regex%/account", role: ROLE_USER } - - - { path: "%sylius.security.new_api_admin_regex%/.*", role: ROLE_API_ACCESS } - - { path: "%sylius.security.new_api_shop_regex%/.*", role: IS_AUTHENTICATED_ANONYMOUSLY } diff --git a/tests/Application/config/sylius/1.9/routes/sylius_admin_api.yaml b/tests/Application/config/sylius/1.9/routes/sylius_admin_api.yaml deleted file mode 100644 index 80aed45..0000000 --- a/tests/Application/config/sylius/1.9/routes/sylius_admin_api.yaml +++ /dev/null @@ -1,3 +0,0 @@ -sylius_admin_api: - resource: "@SyliusAdminApiBundle/Resources/config/routing.yml" - prefix: /api diff --git a/tests/Application/package.json b/tests/Application/package.json index b27949d..9a7369e 100644 --- a/tests/Application/package.json +++ b/tests/Application/package.json @@ -1,7 +1,7 @@ { "dependencies": { "babel-polyfill": "^6.26.0", - "chart.js": "^2.9.3", + "chart.js": "^3.7.1", "jquery": "^3.4.0", "jquery.dirtyforms": "^2.0.0", "lightbox2": "^2.9.0", @@ -9,7 +9,7 @@ "slick-carousel": "^1.8.1" }, "devDependencies": { - "@symfony/webpack-encore": "^0.28.0", + "@symfony/webpack-encore": "^1.6.1", "babel-core": "^6.26.3", "babel-plugin-external-helpers": "^6.22.0", "babel-plugin-module-resolver": "^3.1.1", @@ -39,13 +39,14 @@ "rollup-plugin-inject": "^2.0.0", "rollup-plugin-node-resolve": "^3.3.0", "rollup-plugin-uglify": "^4.0.0", - "sass-loader": "^7.0.1", + "sass-loader": "^12.1.0", "upath": "^1.1.0", "yargs": "^6.4.0" }, "scripts": { - "build": "gulp build", - "gulp": "gulp build", + "dev": "yarn encore dev", + "watch": "yarn encore dev --watch", + "prod": "yarn encore prod", "lint": "yarn lint:js", "lint:js": "eslint gulpfile.babel.js" }, diff --git a/tests/Application/webpack.config.js b/tests/Application/webpack.config.js index ba0308f..6d9f312 100644 --- a/tests/Application/webpack.config.js +++ b/tests/Application/webpack.config.js @@ -1,20 +1,20 @@ const path = require('path'); const Encore = require('@symfony/webpack-encore'); -const syliusBundles = path.resolve(__dirname, 'vendor/sylius/sylius/src/Sylius/Bundle/'); +const syliusBundles = path.resolve(__dirname, '../../vendor/sylius/sylius/src/Sylius/Bundle/'); const uiBundleScripts = path.resolve(syliusBundles, 'UiBundle/Resources/private/js/'); const uiBundleResources = path.resolve(syliusBundles, 'UiBundle/Resources/private/'); // Shop config Encore - .setOutputPath('public/build/shop/') - .setPublicPath('/build/shop') - .addEntry('shop-entry', './assets/shop/entry.js') - .disableSingleRuntimeChunk() - .cleanupOutputBeforeBuild() - .enableSourceMaps(!Encore.isProduction()) - .enableVersioning(Encore.isProduction()) - .enableSassLoader(); + .setOutputPath('public/build/shop/') + .setPublicPath('/build/shop') + .addEntry('shop-entry', '../../vendor/sylius/sylius/src/Sylius/Bundle/ShopBundle/Resources/private/entry.js') + .disableSingleRuntimeChunk() + .cleanupOutputBeforeBuild() + .enableSourceMaps(!Encore.isProduction()) + .enableVersioning(Encore.isProduction()) + .enableSassLoader(); const shopConfig = Encore.getWebpackConfig(); @@ -27,20 +27,21 @@ Encore.reset(); // Admin config Encore - .setOutputPath('public/build/admin/') - .setPublicPath('/build/admin') - .addEntry('admin-entry', './assets/admin/entry.js') - .disableSingleRuntimeChunk() - .cleanupOutputBeforeBuild() - .enableSourceMaps(!Encore.isProduction()) - .enableVersioning(Encore.isProduction()) - .enableSassLoader(); + .setOutputPath('public/build/admin/') + .setPublicPath('/build/admin') + .addEntry('admin-entry', '../../vendor/sylius/sylius/src/Sylius/Bundle/AdminBundle/Resources/private/entry.js') + .disableSingleRuntimeChunk() + .cleanupOutputBeforeBuild() + .enableSourceMaps(!Encore.isProduction()) + .enableVersioning(Encore.isProduction()) + .enableSassLoader(); const adminConfig = Encore.getWebpackConfig(); adminConfig.resolve.alias['sylius/ui'] = uiBundleScripts; adminConfig.resolve.alias['sylius/ui-resources'] = uiBundleResources; adminConfig.resolve.alias['sylius/bundle'] = syliusBundles; +adminConfig.resolve.alias['chart.js/dist/Chart.min'] = path.resolve(__dirname, 'node_modules/chart.js/dist/chart.min.js'); adminConfig.externals = Object.assign({}, adminConfig.externals, { window: 'window', document: 'document' }); adminConfig.name = 'admin'; From 70d94bef12a9a26dfb06d23676fe2001cda7ea6f Mon Sep 17 00:00:00 2001 From: janpalen Date: Thu, 18 Jul 2024 11:03:51 +0200 Subject: [PATCH 02/12] OP-369 - Add ecs to plugin --- composer.json | 12 ++++++------ ecs.php | 13 +++++++++++++ 2 files changed, 19 insertions(+), 6 deletions(-) create mode 100644 ecs.php diff --git a/composer.json b/composer.json index bb6b888..ce8761e 100644 --- a/composer.json +++ b/composer.json @@ -12,9 +12,9 @@ "symfony/webpack-encore-bundle": "^1.17" }, "require-dev": { - "bitbag/coding-standard": "v3.0.0", "behat/behat": "^3.7", "behat/mink-selenium2-driver": "~1.6.0", + "bitbag/coding-standard": "^3.0", "dmore/behat-chrome-extension": "^1.3", "dmore/chrome-mink-driver": "^2.7", "friends-of-behat/mink": "^1.8", @@ -22,10 +22,10 @@ "friends-of-behat/mink-debug-extension": "^2.0.0", "friends-of-behat/mink-extension": "^2.4", "friends-of-behat/page-object-extension": "^0.3", + "friends-of-behat/service-container-extension": "^1.0", "friends-of-behat/suite-settings-extension": "^1.0", "friends-of-behat/symfony-extension": "^2.1", "friends-of-behat/variadic-extension": "^1.3", - "friends-of-behat/service-container-extension": "^1.0", "phpspec/phpspec": "^7.0", "phpstan/extension-installer": "^1.0", "phpstan/phpstan": "1.4", @@ -33,13 +33,13 @@ "phpstan/phpstan-strict-rules": "^1.0", "phpstan/phpstan-webmozart-assert": "^1.0", "phpunit/phpunit": "^9.5", + "polishsymfonycommunity/symfony-mocker-container": "^1.0", "sensiolabs/security-checker": "^6.0", - "symfony/dotenv": "^5.4 || ^6.0", + "symfony/browser-kit": "^5.4 || ^6.0", "symfony/debug-bundle": "^5.4 || ^6.0", + "symfony/dotenv": "^5.4 || ^6.0", "symfony/web-profiler-bundle": "5.4 | ^6.0", - "symfony/browser-kit": "^5.4 || ^6.0", - "vimeo/psalm": "4.7.1", - "polishsymfonycommunity/symfony-mocker-container": "^1.0" + "vimeo/psalm": "4.7.1" }, "config": { "sort-packages": true, diff --git a/ecs.php b/ecs.php new file mode 100644 index 0000000..abcfbcf --- /dev/null +++ b/ecs.php @@ -0,0 +1,13 @@ +import('vendor/bitbag/coding-standard/ecs.php'); + $config->paths(['src', 'tests']); +}; From 427947a611035070cc3f5b314662fb95227c144c Mon Sep 17 00:00:00 2001 From: janpalen Date: Thu, 18 Jul 2024 11:17:16 +0200 Subject: [PATCH 03/12] OP-369 - Change files for ecs standard --- src/Action/Api/BaseApiAwareAction.php | 9 +++++---- src/Action/Api/DoSaleAction.php | 11 ++++++----- src/Action/Api/FindPaymentMethodNonceAction.php | 11 ++++++----- src/Action/Api/GenerateClientTokenAction.php | 11 ++++++----- src/Action/CaptureAction.php | 9 +++++---- src/Action/ConvertPaymentAction.php | 11 ++++++----- .../ObtainCardholderAuthenticationAction.php | 10 +++++----- src/Action/ObtainPaymentMethodNonceAction.php | 9 +++++---- src/Action/PurchaseAction.php | 9 +++++---- src/Action/StatusAction.php | 9 +++++---- src/ApiClient/BraintreeApiClient.php | 13 +++++-------- src/ApiClient/BraintreeApiClientInterface.php | 16 ++++++++-------- src/BitBagSyliusBraintreePlugin.php | 9 +++++---- src/BraintreeGatewayFactory.php | 9 +++++---- .../BitBagSyliusBraintreeExtension.php | 9 +++++---- .../Type/BraintreeGatewayConfigurationType.php | 9 +++++---- .../PaymentProcessorInterface.php | 9 +++++---- src/PaymentProcessing/RefundPaymentProcessor.php | 9 +++++---- src/Reply/Api/PaymentMethodNonceArray.php | 9 +++++---- src/Reply/Api/TransactionArray.php | 9 +++++---- src/Reply/Api/TransactionResultArray.php | 9 +++++---- src/Request/Api/DoSale.php | 9 +++++---- src/Request/Api/FindPaymentMethodNonce.php | 9 +++++---- src/Request/Api/GenerateClientToken.php | 15 ++++++++------- src/Request/ObtainCardholderAuthentication.php | 9 +++++---- src/Request/ObtainPaymentMethodNonce.php | 9 +++++---- src/Request/Purchase.php | 9 +++++---- src/Request/RequestInterface.php | 9 +++++---- src/Util/ArrayUtils.php | 9 +++++---- 29 files changed, 155 insertions(+), 132 deletions(-) diff --git a/src/Action/Api/BaseApiAwareAction.php b/src/Action/Api/BaseApiAwareAction.php index 917a31b..b9c8c5d 100644 --- a/src/Action/Api/BaseApiAwareAction.php +++ b/src/Action/Api/BaseApiAwareAction.php @@ -1,10 +1,11 @@ getSaleRequestParams($request); diff --git a/src/Action/Api/FindPaymentMethodNonceAction.php b/src/Action/Api/FindPaymentMethodNonceAction.php index b44f206..66f938b 100644 --- a/src/Action/Api/FindPaymentMethodNonceAction.php +++ b/src/Action/Api/FindPaymentMethodNonceAction.php @@ -1,10 +1,11 @@ getSource() instanceof PaymentInterface && - $request->getTo() == 'array' + 'array' == $request->getTo() ; } } diff --git a/src/Action/ObtainCardholderAuthenticationAction.php b/src/Action/ObtainCardholderAuthenticationAction.php index faa435e..2977f4e 100644 --- a/src/Action/ObtainCardholderAuthenticationAction.php +++ b/src/Action/ObtainCardholderAuthenticationAction.php @@ -1,10 +1,11 @@ Date: Thu, 18 Jul 2024 11:22:41 +0200 Subject: [PATCH 04/12] OP-369 - Update github build --- .github/workflows/build.yml | 48 ++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 27 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7bb7a04..58bd50e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -14,32 +14,22 @@ on: jobs: tests: - runs-on: ubuntu-22.04 + runs-on: ubuntu-latest name: "Sylius ${{ matrix.sylius }}, PHP ${{ matrix.php }}, Symfony ${{ matrix.symfony }}, MySQL ${{ matrix.mysql }}" strategy: fail-fast: false matrix: - php: [7.4, 8.0] - symfony: [^4.4, ^5.2] - sylius: [~1.8.0, ~1.9.0, ~1.10.0, ~1.11.0] - node: [14.x] - mysql: [5.7] - - exclude: - - - sylius: ~1.8.0 - symfony: ^5.2 - - - sylius: ~1.8.0 - php: 8.0 - - - sylius: ~1.9.0 - php: 8.0 - - - sylius: ~1.11.0 - php: 7.4 + php: ["8.0", "8.1"] + symfony: ["^5.4","^6.0"] + sylius: ["~1.12.0"] + node: ["14.x"] + mysql: ["5.7", "8.0"] + +# exclude: +# - sylius: "~1.13.0" +# php: "^8.0" env: APP_ENV: test @@ -47,7 +37,7 @@ jobs: steps: - - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Setup PHP @@ -60,7 +50,7 @@ jobs: - name: Setup Node - uses: actions/setup-node@v1 + uses: actions/setup-node@v4 with: node-version: "${{ matrix.node }}" @@ -98,7 +88,7 @@ jobs: - name: Cache Composer - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: ${{ steps.composer-cache.outputs.dir }} key: ${{ runner.os }}-php-${{ matrix.php }}-composer-${{ hashFiles('**/composer.json **/composer.lock') }} @@ -125,7 +115,7 @@ jobs: - name: Get Yarn cache directory id: yarn-cache - run: echo "::set-output name=dir::$(yarn cache dir)" + run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT - name: Cache Yarn @@ -168,6 +158,10 @@ jobs: name: Validate database schema run: (cd tests/Application && bin/console doctrine:schema:validate) + - + name: Run ECS + run: vendor/bin/ecs check src + - name: Run PHPSpec run: vendor/bin/phpspec run --ansi -f progress --no-interaction @@ -178,14 +172,14 @@ jobs: - name: Upload Behat logs - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 if: failure() with: name: Behat logs path: etc/build/ if-no-files-found: ignore - - - + + - name: Failed build Slack notification uses: rtCamp/action-slack-notify@v2 if: ${{ failure() && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master') }} From 827ee6447f862af97e0455d9650cfd5919cfb400 Mon Sep 17 00:00:00 2001 From: janpalen Date: Thu, 18 Jul 2024 12:02:43 +0200 Subject: [PATCH 05/12] OP-369 - Change files for ecs --- src/Action/Api/DoSaleAction.php | 2 +- src/Action/Api/FindPaymentMethodNonceAction.php | 2 +- src/Action/Api/GenerateClientTokenAction.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Action/Api/DoSaleAction.php b/src/Action/Api/DoSaleAction.php index 25655bb..dd7307d 100644 --- a/src/Action/Api/DoSaleAction.php +++ b/src/Action/Api/DoSaleAction.php @@ -17,9 +17,9 @@ final class DoSaleAction extends BaseApiAwareAction { + /** @param DoSale $request */ public function execute($request): void { - /** @var DoSale $request */ RequestNotSupportedException::assertSupports($this, $request); $requestParams = $this->getSaleRequestParams($request); diff --git a/src/Action/Api/FindPaymentMethodNonceAction.php b/src/Action/Api/FindPaymentMethodNonceAction.php index 66f938b..e6708e4 100644 --- a/src/Action/Api/FindPaymentMethodNonceAction.php +++ b/src/Action/Api/FindPaymentMethodNonceAction.php @@ -18,9 +18,9 @@ final class FindPaymentMethodNonceAction extends BaseApiAwareAction { + /** @param GenerateClientToken $request */ public function execute($request): void { - /** @var GenerateClientToken $request */ RequestNotSupportedException::assertSupports($this, $request); try { diff --git a/src/Action/Api/GenerateClientTokenAction.php b/src/Action/Api/GenerateClientTokenAction.php index a31d9c6..7856826 100644 --- a/src/Action/Api/GenerateClientTokenAction.php +++ b/src/Action/Api/GenerateClientTokenAction.php @@ -16,9 +16,9 @@ final class GenerateClientTokenAction extends BaseApiAwareAction { + /** @param GenerateClientToken $request */ public function execute($request): void { - /** @var GenerateClientToken $request */ RequestNotSupportedException::assertSupports($this, $request); $requestParams = []; From ccf51fe1377ee0285a77ad8245a25c77d8d2507f Mon Sep 17 00:00:00 2001 From: janpalen Date: Thu, 18 Jul 2024 14:51:46 +0200 Subject: [PATCH 06/12] OP-369 - Behat tests fixes --- .../Resources/suites/ui/managing_payment_method_braintree.yml | 2 +- .../Resources/suites/ui/paying_with_braintree_for_order.yml | 2 +- .../Behat/Resources/suites/ui/refunding_braintree_payment.yml | 3 +-- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/tests/Behat/Resources/suites/ui/managing_payment_method_braintree.yml b/tests/Behat/Resources/suites/ui/managing_payment_method_braintree.yml index fb3b1af..0e1ffeb 100644 --- a/tests/Behat/Resources/suites/ui/managing_payment_method_braintree.yml +++ b/tests/Behat/Resources/suites/ui/managing_payment_method_braintree.yml @@ -29,4 +29,4 @@ default: - bitbag_sylius_braintree_plugin.behat.context.ui.admin.managing_payment_method_braintree filters: - tags: "@managing_braintree_payment_method && @ui" + tags: "@managing_braintree_payment_method&&@ui" diff --git a/tests/Behat/Resources/suites/ui/paying_with_braintree_for_order.yml b/tests/Behat/Resources/suites/ui/paying_with_braintree_for_order.yml index 2ab08cf..07846f3 100644 --- a/tests/Behat/Resources/suites/ui/paying_with_braintree_for_order.yml +++ b/tests/Behat/Resources/suites/ui/paying_with_braintree_for_order.yml @@ -43,4 +43,4 @@ default: - bitbag_sylius_braintree_plugin.behat.context.ui.shop.checkout filters: - tags: "@paying_with_braintree_for_order && @ui" + tags: "@paying_with_braintree_for_order&&@ui" diff --git a/tests/Behat/Resources/suites/ui/refunding_braintree_payment.yml b/tests/Behat/Resources/suites/ui/refunding_braintree_payment.yml index 27e7cc0..a1beba7 100644 --- a/tests/Behat/Resources/suites/ui/refunding_braintree_payment.yml +++ b/tests/Behat/Resources/suites/ui/refunding_braintree_payment.yml @@ -3,7 +3,6 @@ default: ui_refunding_braintree_payment: contexts: - sylius.behat.context.hook.doctrine_orm - - sylius.behat.context.hook.email_spool - sylius.behat.context.setup.channel - sylius.behat.context.setup.currency @@ -55,4 +54,4 @@ default: - bitbag_sylius_braintree_plugin.behat.context.ui.admin.refund filters: - tags: "@refunding_braintree_payment && @ui" + tags: "@refunding_braintree_payment&&@ui" From f842cabcfeaaed7f2d409e74e0b654c68dd9f9bc Mon Sep 17 00:00:00 2001 From: janpalen Date: Thu, 18 Jul 2024 14:52:04 +0200 Subject: [PATCH 07/12] OP-369 - Add support for sylius 1.13 --- .github/workflows/build.yml | 7 +++---- composer.json | 5 +++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 58bd50e..5222bae 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -26,10 +26,9 @@ jobs: sylius: ["~1.12.0"] node: ["14.x"] mysql: ["5.7", "8.0"] - -# exclude: -# - sylius: "~1.13.0" -# php: "^8.0" + exclude: + - sylius: "~1.13.0" + php: "^8.0" env: APP_ENV: test diff --git a/composer.json b/composer.json index ce8761e..fd1b70b 100644 --- a/composer.json +++ b/composer.json @@ -5,8 +5,8 @@ "description": "Braintree payment plugin for Sylius applications.", "license": "MIT", "require": { - "php": "^8.0", - "sylius/sylius": "~1.12.0", + "php": "^8.0 || ^8.1", + "sylius/sylius": "~1.12.0 || ~1.13.0", "php-http/message-factory": "^1.1", "braintree/braintree_php": "^6.4", "symfony/webpack-encore-bundle": "^1.17" @@ -51,6 +51,7 @@ } }, "conflict": { + "behat/mink-selenium2-driver": ">=1.7.0" }, "autoload": { "psr-4": { From b93e80ee4a478bda3d2c636c92166ec15c7d3e0c Mon Sep 17 00:00:00 2001 From: janpalen Date: Thu, 18 Jul 2024 15:29:27 +0200 Subject: [PATCH 08/12] OP-369 - Change README --- README.md | 15 +++++++++++++-- composer.json | 1 - 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 64ed370..72f5e86 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,18 @@ This **open-source plugin was developed to help the Sylius community**. If you h [![](https://bitbag.io/wp-content/uploads/2020/10/button-contact.png)](https://bitbag.io/contact-us/?utm_source=github&utm_medium=referral&utm_campaign=plugins_braintree) # Installation ---- +---- + +### Requirements + +We work on stable, supported and up-to-date versions of packages. We recommend you to do the same. + +| Package | Version | +| --- |--------------------| +| PHP | ^8.0 or ^8.1 | +| sylius/sylius | ^1.12.0 or ^1.13.0 | + +---- ```bash $ composer require bitbag/braintree-plugin @@ -72,7 +83,7 @@ $ bin/console debug:container bitbag_sylius_braintree_plugin $ composer install $ cd tests/Application $ yarn install -$ yarn build +$ yarn encore dev $ bin/console assets:install public -e test $ bin/console doctrine:database:create -e test $ bin/console doctrine:schema:create -e test diff --git a/composer.json b/composer.json index fd1b70b..2aaf5b6 100644 --- a/composer.json +++ b/composer.json @@ -7,7 +7,6 @@ "require": { "php": "^8.0 || ^8.1", "sylius/sylius": "~1.12.0 || ~1.13.0", - "php-http/message-factory": "^1.1", "braintree/braintree_php": "^6.4", "symfony/webpack-encore-bundle": "^1.17" }, From dd10297f3b9111e7995fea32abf8b8ab26f6c13d Mon Sep 17 00:00:00 2001 From: janpalen Date: Thu, 18 Jul 2024 15:49:23 +0200 Subject: [PATCH 09/12] OP-369 - Fixes for build --- .github/workflows/build.yml | 18 +++++++++-------- composer.json | 6 ++---- tests/Application/{.env.dist => .env} | 2 +- .../Application/{.env.prod.dist => .env.prod} | 2 +- tests/Application/.env.test | 5 +++++ tests/Application/.env.test.dist | 20 ------------------- tests/Application/.env.test.local | 2 +- tests/Application/.gitignore | 6 ------ .../assets/shop/{sentry.js => entry.js} | 0 tests/Application/config/bundles.php | 9 +++++++++ .../config/packages/security_checker.yaml | 9 --------- .../config/sylius/1.13/bundles.php | 7 +++++++ 12 files changed, 36 insertions(+), 50 deletions(-) rename tests/Application/{.env.dist => .env} (97%) rename tests/Application/{.env.prod.dist => .env.prod} (96%) create mode 100644 tests/Application/.env.test delete mode 100644 tests/Application/.env.test.dist rename tests/Application/assets/shop/{sentry.js => entry.js} (100%) delete mode 100644 tests/Application/config/packages/security_checker.yaml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5222bae..5a90725 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -21,14 +21,16 @@ jobs: strategy: fail-fast: false matrix: - php: ["8.0", "8.1"] - symfony: ["^5.4","^6.0"] - sylius: ["~1.12.0"] - node: ["14.x"] - mysql: ["5.7", "8.0"] + php: ["8.0", "8.1", "8.2", "8.3"] + symfony: ["^5.4","^6.4"] + sylius: ["~1.12.0", "~1.13.0"] + node: ["^14.0"] + mysql: ["8"] exclude: - - sylius: "~1.13.0" - php: "^8.0" + - sylius: "~1.13.0" + php: "8.0" + - symfony: "^6.4" + php: "8.0" env: APP_ENV: test @@ -139,7 +141,7 @@ jobs: name: Prepare test application assets run: | (cd tests/Application && bin/console assets:install public -vvv) - (cd tests/Application && yarn build) + (cd tests/Application && yarn encore dev) - name: Prepare test application cache diff --git a/composer.json b/composer.json index 2aaf5b6..77db1ef 100644 --- a/composer.json +++ b/composer.json @@ -27,18 +27,16 @@ "friends-of-behat/variadic-extension": "^1.3", "phpspec/phpspec": "^7.0", "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "1.4", + "phpstan/phpstan": "^1.4", "phpstan/phpstan-doctrine": "^1.0", "phpstan/phpstan-strict-rules": "^1.0", "phpstan/phpstan-webmozart-assert": "^1.0", "phpunit/phpunit": "^9.5", "polishsymfonycommunity/symfony-mocker-container": "^1.0", - "sensiolabs/security-checker": "^6.0", "symfony/browser-kit": "^5.4 || ^6.0", "symfony/debug-bundle": "^5.4 || ^6.0", "symfony/dotenv": "^5.4 || ^6.0", - "symfony/web-profiler-bundle": "5.4 | ^6.0", - "vimeo/psalm": "4.7.1" + "symfony/web-profiler-bundle": "5.4 | ^6.0" }, "config": { "sort-packages": true, diff --git a/tests/Application/.env.dist b/tests/Application/.env similarity index 97% rename from tests/Application/.env.dist rename to tests/Application/.env index 091f4b0..0790399 100644 --- a/tests/Application/.env.dist +++ b/tests/Application/.env @@ -12,7 +12,7 @@ APP_SECRET=EDITME # Format described at http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url # For a sqlite database, use: "sqlite:///%kernel.project_dir%/var/data.db" # Set "serverVersion" to your server version to avoid edge-case exceptions and extra database calls -DATABASE_URL=mysql://root@127.0.0.1/sylius_%kernel.environment%?serverVersion=5.5 +DATABASE_URL=mysql://root@127.0.0.1/sylius_%kernel.environment%?serverVersion=8&charset=utf8mb4 ###< doctrine/doctrine-bundle ### ###> lexik/jwt-authentication-bundle ### diff --git a/tests/Application/.env.prod.dist b/tests/Application/.env.prod similarity index 96% rename from tests/Application/.env.prod.dist rename to tests/Application/.env.prod index 53d96e1..72d5b83 100644 --- a/tests/Application/.env.prod.dist +++ b/tests/Application/.env.prod @@ -12,7 +12,7 @@ APP_SECRET=EDITME # Format described at http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url # For a sqlite database, use: "sqlite:///%kernel.project_dir%/var/data.db" # Set "serverVersion" to your server version to avoid edge-case exceptions and extra database calls -DATABASE_URL=mysql://root@127.0.0.1/sylius_%kernel.environment%?serverVersion=5.5 +DATABASE_URL=mysql://root@127.0.0.1/sylius_%kernel.environment%?serverVersion=8&charset=utf8mb4 ###< doctrine/doctrine-bundle ### ###> symfony/mailer ### diff --git a/tests/Application/.env.test b/tests/Application/.env.test new file mode 100644 index 0000000..160a969 --- /dev/null +++ b/tests/Application/.env.test @@ -0,0 +1,5 @@ +APP_SECRET=EDITME + +DATABASE_URL=mysql://root@127.0.0.1/sylius_%kernel.environment%?serverVersion=8&charset=utf8mb4 + +MAILER_DSN=null://null diff --git a/tests/Application/.env.test.dist b/tests/Application/.env.test.dist deleted file mode 100644 index b867fd6..0000000 --- a/tests/Application/.env.test.dist +++ /dev/null @@ -1,20 +0,0 @@ -# This file is a "template" of which env vars needs to be defined in your configuration or in an .env file -# Set variables here that may be different on each deployment target of the app, e.g. development, staging, production. -# https://symfony.com/doc/current/best_practices/configuration.html#infrastructure-related-configuration - -###> symfony/framework-bundle ### -APP_ENV=test -APP_DEBUG=1 -APP_SECRET=EDITME -###< symfony/framework-bundle ### - -###> doctrine/doctrine-bundle ### -# Format described at http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url -# For a sqlite database, use: "sqlite:///%kernel.project_dir%/var/data.db" -# Set "serverVersion" to your server version to avoid edge-case exceptions and extra database calls -DATABASE_URL=mysql://root@127.0.0.1/sylius_%kernel.environment%?serverVersion=5.5 -###< doctrine/doctrine-bundle ### - -###> symfony/mailer ### -MAILER_DSN=null://null -###> symfony/messenger ### diff --git a/tests/Application/.env.test.local b/tests/Application/.env.test.local index 48b5274..3fa33ba 100644 --- a/tests/Application/.env.test.local +++ b/tests/Application/.env.test.local @@ -1 +1 @@ -DATABASE_URL=sqlite:///%kernel.project_dir%/var/data.db +DATABASE_URL=mysql://root@127.0.0.1/sylius_%kernel.environment%?serverVersion=8.0 diff --git a/tests/Application/.gitignore b/tests/Application/.gitignore index 63254e9..f813e3a 100644 --- a/tests/Application/.gitignore +++ b/tests/Application/.gitignore @@ -10,9 +10,3 @@ /vendor /node_modules - -/.env -/.env.prod -/.env.staging -/.env.test -/.env.test_cached diff --git a/tests/Application/assets/shop/sentry.js b/tests/Application/assets/shop/entry.js similarity index 100% rename from tests/Application/assets/shop/sentry.js rename to tests/Application/assets/shop/entry.js diff --git a/tests/Application/config/bundles.php b/tests/Application/config/bundles.php index 489d689..6742876 100644 --- a/tests/Application/config/bundles.php +++ b/tests/Application/config/bundles.php @@ -1,5 +1,14 @@ ['all' => true], Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true], diff --git a/tests/Application/config/packages/security_checker.yaml b/tests/Application/config/packages/security_checker.yaml deleted file mode 100644 index 0f9cf00..0000000 --- a/tests/Application/config/packages/security_checker.yaml +++ /dev/null @@ -1,9 +0,0 @@ -services: - SensioLabs\Security\SecurityChecker: - public: false - - SensioLabs\Security\Command\SecurityCheckerCommand: - arguments: ['@SensioLabs\Security\SecurityChecker'] - public: false - tags: - - { name: console.command, command: 'security:check' } diff --git a/tests/Application/config/sylius/1.13/bundles.php b/tests/Application/config/sylius/1.13/bundles.php index 5d54121..e615f85 100644 --- a/tests/Application/config/sylius/1.13/bundles.php +++ b/tests/Application/config/sylius/1.13/bundles.php @@ -1,5 +1,12 @@ Date: Fri, 26 Jul 2024 09:32:27 +0200 Subject: [PATCH 10/12] OP-369 - Upgrade package.json file for node 20 usage --- .github/workflows/build.yml | 4 +-- tests/Application/package.json | 63 ++++++++++++++++++---------------- 2 files changed, 36 insertions(+), 31 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5a90725..255a239 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -24,8 +24,8 @@ jobs: php: ["8.0", "8.1", "8.2", "8.3"] symfony: ["^5.4","^6.4"] sylius: ["~1.12.0", "~1.13.0"] - node: ["^14.0"] - mysql: ["8"] + node: ["^18.0", "^20.0"] + mysql: ["8.0"] exclude: - sylius: "~1.13.0" php: "8.0" diff --git a/tests/Application/package.json b/tests/Application/package.json index 9a7369e..f4e4088 100644 --- a/tests/Application/package.json +++ b/tests/Application/package.json @@ -1,47 +1,52 @@ { "dependencies": { + "@babel/core": "^7.24.9", + "@babel/preset-env": "^7.14.7", "babel-polyfill": "^6.26.0", - "chart.js": "^3.7.1", - "jquery": "^3.4.0", + "chart.js": "^3.9.1", + "jquery": "^3.6.0", "jquery.dirtyforms": "^2.0.0", - "lightbox2": "^2.9.0", - "semantic-ui-css": "^2.2.0", + "lightbox2": "^2.11.0", + "semantic-ui-css": "^2.4.0", "slick-carousel": "^1.8.1" }, "devDependencies": { - "@symfony/webpack-encore": "^1.6.1", + "@symfony/webpack-encore": "^4.0.0", "babel-core": "^6.26.3", "babel-plugin-external-helpers": "^6.22.0", - "babel-plugin-module-resolver": "^3.1.1", + "babel-plugin-module-resolver": "^3.2.0", "babel-plugin-transform-object-rest-spread": "^6.26.0", "babel-preset-env": "^1.7.0", "babel-register": "^6.26.0", "dedent": "^0.7.0", - "eslint": "^4.19.1", - "eslint-config-airbnb-base": "^12.1.0", - "eslint-import-resolver-babel-module": "^4.0.0", - "eslint-plugin-import": "^2.11.0", - "fast-async": "^6.3.7", - "gulp": "^4.0.0", + "eslint": "^8.22.0", + "eslint-config-airbnb-base": "^15.0.0", + "eslint-import-resolver-babel-module": "^5.3.1", + "eslint-plugin-import": "^2.26.0", + "fast-async": "^7.0.6", + "gulp": "^4.0.2", "gulp-chug": "^0.5", - "gulp-concat": "^2.6.0", - "gulp-debug": "^2.1.2", - "gulp-if": "^2.0.0", - "gulp-livereload": "^4.0.1", + "gulp-concat": "^2.6.1", + "gulp-debug": "^4.0.0", + "gulp-if": "^3.0.0", + "gulp-livereload": "^4.0.2", "gulp-order": "^1.1.1", - "gulp-sass": "^4.0.1", - "gulp-sourcemaps": "^1.6.0", - "gulp-uglifycss": "^1.0.5", - "merge-stream": "^1.0.0", - "rollup": "^0.60.2", - "rollup-plugin-babel": "^3.0.4", - "rollup-plugin-commonjs": "^9.1.3", - "rollup-plugin-inject": "^2.0.0", - "rollup-plugin-node-resolve": "^3.3.0", - "rollup-plugin-uglify": "^4.0.0", - "sass-loader": "^12.1.0", - "upath": "^1.1.0", - "yargs": "^6.4.0" + "gulp-sass": "^5.1.0", + "gulp-sourcemaps": "^3.0.0", + "gulp-uglifycss": "^1.0.9", + "merge-stream": "^2.0.0", + "rollup": "^3.18.0", + "rollup-plugin-babel": "^4.4.0", + "rollup-plugin-commonjs": "^10.1.0", + "rollup-plugin-inject": "^3.0.2", + "rollup-plugin-node-resolve": "^5.2.0", + "rollup-plugin-uglify": "^6.0.4", + "sass": "^1.77.8", + "sass-loader": "^13.0.0", + "upath": "^2.0.0", + "webpack": "^5.93.0", + "webpack-cli": "^5.1.4", + "yargs": "^17.7.1" }, "scripts": { "dev": "yarn encore dev", From 9c25ff4e4961567fdfb1b02cc7d440e567f6e7f1 Mon Sep 17 00:00:00 2001 From: SzymonFilipek <138723846+SzymonFilipek@users.noreply.github.com> Date: Fri, 2 Aug 2024 15:42:00 +0200 Subject: [PATCH 11/12] Create images.md --- doc/images/images.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 doc/images/images.md diff --git a/doc/images/images.md b/doc/images/images.md new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/doc/images/images.md @@ -0,0 +1 @@ + From 43c890e42e281e30dec45336360bb23aba7e2643 Mon Sep 17 00:00:00 2001 From: SzymonFilipek <138723846+SzymonFilipek@users.noreply.github.com> Date: Fri, 2 Aug 2024 15:42:15 +0200 Subject: [PATCH 12/12] Add files via upload --- doc/images/braintree_create.png | Bin 0 -> 72371 bytes doc/images/braintree_methods.png | Bin 0 -> 80905 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/images/braintree_create.png create mode 100644 doc/images/braintree_methods.png diff --git a/doc/images/braintree_create.png b/doc/images/braintree_create.png new file mode 100644 index 0000000000000000000000000000000000000000..d2266787279650f353829342e19b23e24215c77f GIT binary patch literal 72371 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 L270%izxMqfye{V+ literal 0 HcmV?d00001 diff --git a/doc/images/braintree_methods.png b/doc/images/braintree_methods.png new file mode 100644 index 0000000000000000000000000000000000000000..5b568a95725ab1c88ee58595228a9af9fbf5c282 GIT binary patch literal 80905 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 l#I$Y@=(W$%zR!gT^&}$J;i?(>G4R`@YN_8