Example #1
0
 /**
  * Add premium / bonus article to cart
  * @param sAddPremium - ordernumber of bonus article (defined in s_articles_premiums)
  * Return to cart / confirm page on success
  */
 public function addPremiumAction()
 {
     if ($this->Request()->isPost()) {
         if (!$this->Request()->getParam('sAddPremium')) {
             $this->View()->sBasketInfo = Shopware()->Snippets()->getNamespace()->get('CheckoutSelectPremiumVariant', 'Please select an option to place the required premium to the cart', true);
         } else {
             $this->basket->sSYSTEM->_GET['sAddPremium'] = $this->Request()->getParam('sAddPremium');
             $this->basket->sInsertPremium();
         }
     }
     $this->forward($this->Request()->getParam('sTargetAction', 'index'));
 }
Example #2
0
 /**
  * @covers sBasket::sInsertPremium
  */
 public function testsInsertPremium()
 {
     // Test with empty session, expect true
     $this->assertTrue($this->module->sInsertPremium());
     // Create session id
     $this->module->sSYSTEM->sSESSION_ID = uniqid();
     $this->session->offsetSet('sessionId', $this->module->sSYSTEM->sSESSION_ID);
     // Test with session, expect true
     $this->assertTrue($this->module->sInsertPremium());
     $normalArticle = $this->db->fetchRow('SELECT * FROM s_articles_details detail
         INNER JOIN s_articles article
           ON article.id = detail.articleID
         WHERE detail.active = 1
         AND detail.articleId NOT IN (
           SELECT id FROM s_addon_premiums
         )
         ORDER BY RAND() LIMIT 1');
     $premiumArticleOne = $this->db->fetchRow('SELECT article.id, detail.ordernumber
         FROM s_articles_details detail
         INNER JOIN s_articles article
           ON article.id = detail.articleID
         WHERE detail.active = 1
         AND detail.ordernumber NOT IN (
           SELECT ordernumber FROM s_addon_premiums
         )
         ORDER BY RAND() LIMIT 1');
     $premiumArticleTwo = $this->db->fetchRow('SELECT article.id, detail.ordernumber
         FROM s_articles_details detail
         INNER JOIN s_articles article
           ON article.id = detail.articleID
         WHERE detail.active = 1
         AND detail.ordernumber IN (
           SELECT ordernumber FROM s_addon_premiums
         )
         ORDER BY RAND() LIMIT 1');
     // Add one normal article to basket
     // Test that calling sInsertPremium does nothing
     $this->db->insert('s_order_basket', array('price' => 1, 'quantity' => 1, 'sessionID' => $this->session->get('sessionId'), 'ordernumber' => $normalArticle['ordernumber'], 'articleID' => $normalArticle['articleID'], 'modus' => 0));
     $this->assertTrue($this->module->sInsertPremium());
     $this->assertEquals(1, $this->db->fetchOne('SELECT count(*) FROM s_order_basket WHERE sessionID = ?', array($this->module->sSYSTEM->sSESSION_ID)));
     // Add premium articles to basket
     // Test that calling sInsertPremium removes them
     $this->db->insert('s_order_basket', array('price' => 1, 'quantity' => 1, 'sessionID' => $this->session->get('sessionId'), 'ordernumber' => $premiumArticleOne['ordernumber'], 'articleID' => $premiumArticleOne['id'], 'modus' => 1));
     $this->db->insert('s_order_basket', array('price' => 1, 'quantity' => 1, 'sessionID' => $this->session->get('sessionId'), 'ordernumber' => $premiumArticleTwo['ordernumber'], 'articleID' => $premiumArticleTwo['id'], 'modus' => 1));
     $this->assertTrue($this->module->sInsertPremium());
     $this->assertEquals(1, $this->db->fetchOne('SELECT count(*) FROM s_order_basket WHERE sessionID = ?', array($this->module->sSYSTEM->sSESSION_ID)));
     // Add sAddPremium to _GET.
     // Basket price is 1, so expect premium articles to be denied
     $this->module->sSYSTEM->_GET['sAddPremium'] = $premiumArticleTwo['ordernumber'];
     $this->assertFalse($this->module->sInsertPremium());
     // Increase basket price and retry
     $this->db->insert('s_order_basket', array('price' => 10000, 'quantity' => 1, 'sessionID' => $this->session->get('sessionId'), 'ordernumber' => $normalArticle['ordernumber'], 'articleID' => $normalArticle['articleID'], 'modus' => 0));
     // Will still get false due to cache
     $this->assertFalse($this->module->sInsertPremium());
     // Change the premium article to a non-premium, fail
     $this->module->sSYSTEM->_GET['sAddPremium'] = $premiumArticleOne['ordernumber'];
     $this->assertFalse($this->module->sInsertPremium());
     $this->assertEquals(2, $this->db->fetchOne('SELECT count(*) FROM s_order_basket WHERE sessionID = ?', array($this->module->sSYSTEM->sSESSION_ID)));
     // Change the premium article to a premium, succeed
     $this->module->sSYSTEM->_GET['sAddPremium'] = $premiumArticleTwo['ordernumber'];
     $this->assertGreaterThan(0, $this->module->sInsertPremium());
     $this->assertEquals(3, $this->db->fetchOne('SELECT count(*) FROM s_order_basket WHERE sessionID = ?', array($this->module->sSYSTEM->sSESSION_ID)));
     // Housekeeping
     $this->db->delete('s_order_basket', array('sessionID = ?' => $this->session->get('sessionId')));
 }