get(ContextManager::class)->activateContexts( [CountryContext::class => $country], function () { $product = new Product(); $product->createFromDB(7); $product->fetchVariations(); $this->assertNotEmpty($product->variations); $this->assertEquals(800, $product->getProductPrice()->getPriceWithVat()->asFloat(), 'Cena na produktu musi byt 800 Kc'); foreach ($product->variations['variations'] as $variation) { $this->assertEquals(800, $variation['productPrice']->getPriceWithVat()->asFloat(), 'Cena na variante musi byt 800 Kc'); } } ); } public function data_testProductWithPricesWithVatFromTop(): array { return [ ['CZ'], ['SK'], ]; } public function testCreateFromDb() { $product = new Product(); $product->createFromDB(11); $this->assertSame('66 Kč', $product->price); $this->assertSame('99.6004', (string) $product->priceMax['price_with_vat']); $this->assertSame('1652.0660', (string) $product->priceRaw); $this->assertSame(null, $product->priceCommon); $this->assertSame('55 Kč', $product->priceNoVat); $this->assertSame('66.4668', (string) $product->price_array['price_with_vat']); $this->assertSame('66 Kč', $product->price); $this->assertSame('80.0400', (string) $product->discount); $this->assertSame('1999.0000', (string) $product->priceOriginal['value_with_vat']); $this->assertSame('0.0000', (string) $product->price_buy['value_with_vat']); } /** * @dataProvider data_roundPrice */ public function testRoundPrice($price, $roundTo, $direction, $result, $bata = null) { $this->assertEquals($result, roundPrice(toDecimal($price), $roundTo, $direction, bata: $bata)->asFloat()); } public function data_roundPrice() { return [ [540, -10, 'DB', 540], [544, -10, 'DB', 540], [545, -10, 'DB', 550], [547, -10, 'DB', 550], [552, -5, 'DB', 550], [553, -5, 'DB', 555], [557, -5, 'DB', 555], [558, -5, 'DB', 560], [560, -5, 'DB', 560], [31.59, 10, 'up', 31.6], [-31.59, 10, 'up', -31.6], // baťovské ceny - XYZ.99 nahoru [0, 100, 'up', 0, 0.01], [5.00, 100, 'up', 5.99, 0.01], [5.20, 100, 'up', 5.99, 0.01], [5.50, 100, 'up', 5.99, 0.01], [-5.00, 100, 'up', -5.99, 0.01], [-5.20, 100, 'up', -5.99, 0.01], [-5.50, 100, 'up', -5.99, 0.01], // baťovské ceny - XYZ.99 matematicky [0, 100, 'math', 0, 0.01], [5.00, 100, 'math', 4.99, 0.01], [5.20, 100, 'math', 4.99, 0.01], [5.50, 100, 'math', 5.99, 0.01], [-5.00, 100, 'math', -4.99, 0.01], [-5.20, 100, 'math', -4.99, 0.01], [-5.50, 100, 'math', -5.99, 0.01], // baťovské ceny - XYZ.99 dolu [0, 100, 'down', 0, 0.01], [5.00, 100, 'down', 4.99, 0.01], [5.20, 100, 'down', 4.99, 0.01], [5.50, 100, 'down', 4.99, 0.01], [-5.00, 100, 'down', -4.99, 0.01], [-5.20, 100, 'down', -4.99, 0.01], [-5.50, 100, 'down', -4.99, 0.01], // baťovské ceny - XYZ.49 nebo XYZ.99 nahoru [0, 50, 'up', 0, 0.01], [5.00, 50, 'up', 5.49, 0.01], [5.20, 50, 'up', 5.49, 0.01], [5.50, 50, 'up', 5.99, 0.01], [-5.00, 50, 'up', -5.49, 0.01], [-5.20, 50, 'up', -5.49, 0.01], [-5.50, 50, 'up', -5.99, 0.01], [-5.90, 50, 'up', -5.99, 0.01], [-5.99, 50, 'up', -5.99, 0.01], [-6.00, 50, 'up', -6.49, 0.01], // baťovské ceny - XYZ.49 nebo XYZ.99 matematicky [0, 50, 'math', 0, 0.01], [5.00, 50, 'math', 4.99, 0.01], [5.20, 50, 'math', 4.99, 0.01], [5.50, 50, 'math', 5.49, 0.01], [-5.00, 50, 'math', -4.99, 0.01], [-5.20, 50, 'math', -4.99, 0.01], [-5.50, 50, 'math', -5.49, 0.01], [-5.90, 50, 'math', -5.99, 0.01], [-5.99, 50, 'math', -5.99, 0.01], [-6.00, 50, 'math', -5.99, 0.01], // baťovské ceny - XYZ.49 nebo XYZ.99 dolu [0, 50, 'down', 0, 0.01], [5.00, 50, 'down', 4.99, 0.01], [5.20, 50, 'down', 4.99, 0.01], [5.50, 50, 'down', 5.49, 0.01], [-5.00, 50, 'down', -4.99, 0.01], [-5.20, 50, 'down', -4.99, 0.01], [-5.50, 50, 'down', -5.49, 0.01], [-5.90, 50, 'down', -5.49, 0.01], [-5.99, 50, 'down', -5.99, 0.01], [-6.00, 50, 'down', -5.99, 0.01], ]; } public function testVisibleTranslationProduct() { $this->switchLanguage(); $product = new Product(); $product->createFromDB(2); $this->assertTrue($product->isVisible()); } public function testHiddenTranslationProduct() { $this->switchLanguage(); $product = new Product(); $product->createFromDB(1); $this->assertFalse($product->isVisible()); } public function testOldTranslationProduct() { $this->switchLanguage(); $product = new Product(); $product->createFromDB(3); $this->assertTrue($product->isOld()); } public function testShowProduct() { $client = $this->createClient(); $client->request('GET', '/nike-capri-lace-test-dlouheho-nazvu-produktu-test-dlouheho-produktu-tes_z1/'); $this->assertTrue($client->getResponse()->isSuccessful()); } public function getDataSet() { return new \PHPUnit\DbUnit\DataSet\ArrayDataSet([ 'products_translations' => [ [ 'id' => 1, 'id_product' => 1, 'id_language' => 'sk', 'id_admin' => null, 'created' => '', 'updated' => null, 'title' => null, 'short_descr' => null, 'long_descr' => null, 'meta_title' => null, 'meta_description' => null, 'meta_keywords' => null, 'parameters' => null, 'figure' => 'N', ], [ 'id' => 2, 'id_product' => 2, 'id_language' => 'sk', 'id_admin' => null, 'created' => '', 'updated' => null, 'title' => null, 'short_descr' => null, 'long_descr' => null, 'meta_title' => null, 'meta_description' => null, 'meta_keywords' => null, 'parameters' => null, 'figure' => 'Y', ], [ 'id' => 3, 'id_product' => 3, 'id_language' => 'sk', 'id_admin' => null, 'created' => '', 'updated' => null, 'title' => null, 'short_descr' => null, 'long_descr' => null, 'meta_title' => null, 'meta_description' => null, 'meta_keywords' => null, 'parameters' => null, 'figure' => 'O', ], ], ]); } }