Skip to content

Commit

Permalink
feat: unit tests (#1)
Browse files Browse the repository at this point in the history
* chore: setup tests
  • Loading branch information
hschoenenberger authored Dec 19, 2024
1 parent 8645788 commit 1e85cf6
Show file tree
Hide file tree
Showing 19 changed files with 361 additions and 26 deletions.
114 changes: 114 additions & 0 deletions .github/workflows/php.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
name: PHP tests

on:
pull_request:
types: [opened, reopened, synchronize, labeled]

jobs:
php-linter:
name: PHP Syntax check 5.6|7.2|8.0|8.1
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3

- name: PHP syntax checker 5.6
uses: prestashop/github-action-php-lint/5.6@master
with:
folder-to-exclude: "! -path \"./vendor/*\" ! -path \"./tests/*\""

- name: PHP syntax checker 7.2
uses: prestashop/github-action-php-lint/7.2@master
with:
folder-to-exclude: "! -path \"./vendor/*\" ! -path \"./tests/*\""

- name: PHP syntax checker 8.0
uses: prestashop/github-action-php-lint/8.0@master
with:
folder-to-exclude: "! -path \"./vendor/*\" ! -path \"./tests/*\""

- name: PHP syntax checker 8.1
uses: prestashop/github-action-php-lint/8.1@master
with:
folder-to-exclude: "! -path \"./vendor/*\" ! -path \"./tests/*\""

php-cs-fixer:
name: PHP-CS-Fixer
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3

- name: Cache vendor folder
uses: actions/cache@v3
with:
path: vendor
key: ${{ runner.os }}-${{ hashFiles('**/composer.lock') }}

- name: Cache composer folder
uses: actions/cache@v3
with:
path: ~/.composer/cache
key: php-composer-cache

- run: composer install

- name: Run PHP-CS-Fixer
run: vendor/bin/php-cs-fixer fix --config .php_cs.dist.php --diff --dry-run

phpstan:
name: PHPStan
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3

- name: Cache vendor folder
uses: actions/cache@v3
with:
path: vendor
key: ${{ runner.os }}-${{ hashFiles('**/composer.lock') }}

- name: Cache composer folder
uses: actions/cache@v3
with:
path: ~/.composer/cache
key: php-composer-cache

- run: composer install

- name : Run PHPStan for Guzzle 7
run: vendor/bin/phpstan analyse -c tests/phpstan.neon

phpunit:
name: PHPUnit
runs-on: ubuntu-latest
strategy:
matrix:
php-versions: ["7.2", "7.3", "8.0", "8.1"]
steps:
- name: Checkout
uses: actions/checkout@v3

- name: Setup PHP with Xdebug
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-versions }}
coverage: xdebug

- name: Cache vendor folder
uses: actions/cache@v3
with:
path: vendor
key: ${{ runner.os }}-${{ hashFiles('**/composer.lock') }}-${{ matrix.php-versions }}

- name: Cache composer folder
uses: actions/cache@v3
with:
path: ~/.composer/cache
key: php-composer-cache-${{ matrix.php-versions }}

- run: composer install

- name: Run PHPUnit
run: vendor/bin/phpunit --coverage-text
11 changes: 11 additions & 0 deletions .php_cs.dist.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?php

$config = new PrestaShop\CodingStandards\CsFixer\Config();

$config
->setUsingCache(false)
->getFinder()
->in(__DIR__)
->exclude('vendor');

return $config;
7 changes: 7 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
# lightweight-container

[![Source Code](https://img.shields.io/badge/source-PrestaShopCorp/lightweight--container-blue.svg?style=flat-square)](https://github.com/PrestaShopCorp/lightweight-container)
[![Latest Version](https://img.shields.io/github/release/PrestaShopCorp/lightweight-container.svg?style=flat-square)](https://github.com/PrestaShopCorp/lightweight-container/releases)
[![Software License](https://img.shields.io/badge/license-OSL-brightgreen.svg?style=flat-square)](https://github.com/PrestaShopCorp/lightweight-container/blob/main/LICENSE)
[![Build Status](https://img.shields.io/github/actions/workflow/status/PrestaShopCorp/lightweight-container/.github/workflows/php.yml?label=CI&logo=github&style=flat-square)](https://github.com/PrestaShopCorp/lightweight-container/actions?query=workflow%3ACI)

[//]: # ([![Total Downloads]&#40;https://img.shields.io/packagist/dt/PrestaShopCorp/lightweight-container.svg?style=flat-square&#41;]&#40;https://packagist.org/packages/prestashopcorp/lightweight-container&#41;)

# Context

A module should not bundle and duplicate a heavy dependency from the framework used by the PrestaShop Core, we propose to replace module-lib-service-container with a simple service container to provide the following benefits :
Expand Down
21 changes: 19 additions & 2 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,11 @@
"PrestaShopCorp\\LightweightContainer\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"PrestaShopCorp\\LightweightContainer\\Test\\": "tests/src/"
}
},
"authors": [
{
"name": "hschoenenberger",
Expand All @@ -15,5 +20,17 @@
],
"require": {
"php": ">=5.6"
}
}
},
"require-dev": {
"phpunit/phpunit": "^8.0 || ^9.0",
"phpstan/phpstan": "^1.7",
"prestashop/php-dev-tools": "^4.2"
},
"scripts": {
"phpunit": "./vendor/bin/phpunit --coverage-text",
"php-cs-fixer": "./vendor/bin/php-cs-fixer fix --config .php_cs.dist.php --diff",
"header-stamp": "./vendor/bin/header-stamp --target=\".\" --license=./vendor/prestashop/header-stamp/assets/afl.txt --exclude=.github,vendor,tests"
},
"author": "PrestaShop",
"license": "AFL-3.0"
}
17 changes: 17 additions & 0 deletions phpunit.xml.dist
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" backupGlobals="false" backupStaticAttributes="false" bootstrap="vendor/autoload.php" colors="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd">
<coverage>
<include>
<directory suffix=".php">src</directory>
</include>
<report>
<clover outputFile="clover.xml"/>
</report>
</coverage>
<testsuites>
<testsuite name="all">
<directory>./tests</directory>
</testsuite>
</testsuites>
<logging/>
</phpunit>
21 changes: 20 additions & 1 deletion src/ServiceContainer/Contract/IContainerLogger.php
Original file line number Diff line number Diff line change
@@ -1,5 +1,24 @@
<?php

/**
* Copyright since 2007 PrestaShop SA and Contributors
* PrestaShop is an International Registered Trademark & Property of PrestaShop SA
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License version 3.0
* that is bundled with this package in the file LICENSE.md.
* It is also available through the world-wide-web at this URL:
* https://opensource.org/licenses/AFL-3.0
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to [email protected] so we can send you a copy immediately.
*
* @author PrestaShop SA and Contributors <[email protected]>
* @copyright Since 2007 PrestaShop SA and Contributors
* @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0
*/

namespace PrestaShopCorp\LightweightContainer\ServiceContainer\Contract;

interface IContainerLogger
Expand Down Expand Up @@ -31,4 +50,4 @@ public function warn($message);
* @return mixed
*/
public function error($message);
}
}
1 change: 1 addition & 0 deletions src/ServiceContainer/Contract/IServiceProvider.php
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
<?php

/**
* Copyright since 2007 PrestaShop SA and Contributors
* PrestaShop is an International Registered Trademark & Property of PrestaShop SA
Expand Down
1 change: 1 addition & 0 deletions src/ServiceContainer/Contract/ISingletonService.php
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
<?php

/**
* Copyright since 2007 PrestaShop SA and Contributors
* PrestaShop is an International Registered Trademark & Property of PrestaShop SA
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
<?php

/**
* Copyright since 2007 PrestaShop SA and Contributors
* PrestaShop is an International Registered Trademark & Property of PrestaShop SA
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
<?php

/**
* Copyright since 2007 PrestaShop SA and Contributors
* PrestaShop is an International Registered Trademark & Property of PrestaShop SA
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
<?php

/**
* Copyright since 2007 PrestaShop SA and Contributors
* PrestaShop is an International Registered Trademark & Property of PrestaShop SA
Expand Down
15 changes: 8 additions & 7 deletions src/ServiceContainer/Provider/ExampleProvider.php
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
<?php

/**
* Copyright since 2007 PrestaShop SA and Contributors
* PrestaShop is an International Registered Trademark & Property of PrestaShop SA
Expand Down Expand Up @@ -32,12 +33,12 @@ class ExampleProvider implements IServiceProvider
*/
public function provide(ServiceContainer $container)
{
// $container->registerProvider(MyService::class, static function () use ($container) {
// return new ServicesBillingClient(
// $container->getParameter('my_module.a_parameter'),
// $container->get(AaService::class),
// $container->get(BbService::class)
// );
// });
// $container->registerProvider(MyService::class, static function () use ($container) {
// return new ServicesBillingClient(
// $container->getParameter('my_module.a_parameter'),
// $container->get(AaService::class),
// $container->get(BbService::class)
// );
// });
}
}
23 changes: 7 additions & 16 deletions src/ServiceContainer/ServiceContainer.php
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
<?php

/**
* Copyright since 2007 PrestaShop SA and Contributors
* PrestaShop is an International Registered Trademark & Property of PrestaShop SA
Expand Down Expand Up @@ -62,20 +63,6 @@ public function __construct($configPath)
$this->configPath = $configPath;
}

/**
* @param string $configPath
*
* @return static
*/
public static function createInstance($configPath)
{
$container = new static($configPath);
$container->loadConfig();
$container->init();

return $container;
}

/**
* @return void
*/
Expand All @@ -87,13 +74,15 @@ public function loadConfig()
/**
* @return IContainerLogger
*/
public abstract function getLogger();
abstract public function getLogger();

/**
* @return void
* @return ServiceContainer
*/
public function init()
{
$this->loadConfig();

$this->getLogger()->debug('Initializing service container');

foreach ($this->provides as $provider) {
Expand All @@ -103,6 +92,8 @@ public function init()
(new $provider())->provide($this);
}
}

return $this;
}

/**
Expand Down
19 changes: 19 additions & 0 deletions src/config.example.php
Original file line number Diff line number Diff line change
@@ -1,5 +1,24 @@
<?php

/**
* Copyright since 2007 PrestaShop SA and Contributors
* PrestaShop is an International Registered Trademark & Property of PrestaShop SA
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License version 3.0
* that is bundled with this package in the file LICENSE.md.
* It is also available through the world-wide-web at this URL:
* https://opensource.org/licenses/AFL-3.0
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to [email protected] so we can send you a copy immediately.
*
* @author PrestaShop SA and Contributors <[email protected]>
* @copyright Since 2007 PrestaShop SA and Contributors
* @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0
*/

return [
'my_module.a_parameter' => 'my value example',
'my_module.log_level' => 'ERROR',
Expand Down
9 changes: 9 additions & 0 deletions tests/phpstan.neon
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
parameters:
paths:
- ../src
bootstrapFiles:
- ../vendor/autoload.php
checkMissingIterableValueType: false
reportUnmatchedIgnoredErrors: false

level: 6
Loading

0 comments on commit 1e85cf6

Please sign in to comment.