<?php 
/** 
 * Test for Calculator 
 *  
 * @link        https://github.com/picamator/PriceCalculator 
 * @license     http://opensource.org/licenses/BSD-3-Clause New BSD License 
 */ 
 
namespace PriceCalculator; 
use PriceCalculator\BaseTest; 
use PriceCalculator\Strategy\PriceNetInterface; 
use PriceCalculator\Strategy\PriceNet\PriceOver; 
use PriceCalculator\Strategy\PriceNet\PercentOver; 
use PriceCalculator\Strategy\PriceNet\Manual; 
 
class CalculatorTest extends BaseTest 
{ 
    /** 
     * @dataProvider providerStrategyPercentNet 
     * @param PriceNetInterface $strategy 
     * @param float $vat_percent 
     * @param float $price_purchase 
     * @param array $expected_result 
     */ 
    public function testStrategyPriceNet(PriceNetInterface $strategy,  
        $vat_percent, $price_purchase, array $expected_result 
    ) { 
        $price_calculator = new PriceCalculator($strategy, $vat_percent); 
        $result = $price_calculator->setPricePurchase($price_purchase) 
                    ->getPrice(); 
         
        $this->assertEqualArrays($expected_result, $result);    
    } 
     
    public function providerStrategyPercentNet() 
    { 
        // strategies 
        $price_over = new PriceOver(array('price_over' => 5.9991)); 
        $percent_over = new PercentOver(array('percent_over' => 10)); 
        $manual = new Manual(array('price_net' => 109.9911)); 
         
        // data 
        return array( 
            array($price_over, 23, 98.9921, array( 
                'price_net' => 104.9912, 
                'price_gross' => 129.1391, 
                'vat_value' => 24.1479 
            )), 
             
            array($percent_over, 23, 98.9921, array( 
                'price_net' => 108.8913, 
                'price_gross' => 133.9362, 
                'vat_value' => 25.0449 
            )), 
             
            array($manual, 23, 98.9921, array( 
                'price_net' => 109.9911, 
                'price_gross' => 135.289, 
                'vat_value' => 25.2979 
            )) 
        ); 
    } 
}
 
 |