function testCalculations()
 {
     $mp3player = $this->objFromFixture('Product', 'mp3player');
     $this->get(ShoppingCart::add_item_link($mp3player->ID));
     $cart = ShoppingCart::current_order();
     $this->assertEquals($cart->Total(), 215);
 }
 function testProductVersionDoesntChangeInOrder()
 {
     $productSocks = $this->objFromFixture('Product', 'socks');
     //add item to cart
     $this->get(ShoppingCart::add_item_link($productSocks->ID));
     $currentorder = ShoppingCart::current_order();
     $itembefore = DataObject::get_one("Product_OrderItem", "\"OrderID\" = " . $currentorder->ID);
     $this->assertEquals($itembefore->Total(), 8);
     //update product details
     $productSocks->Price = 9;
     $productSocks->write();
     $this->assertEquals($itembefore->Total(), 9);
     //total is updated whilst item is still in cart
     //check cart product details are not updated
     //place order
     //update product details
     //check order details are not updated
 }
 function testRemoveFromCart()
 {
     /* Retrieve the product to compare from fixture */
     $product = $this->objFromFixture('Product', 'mp3player');
     $anotherproduct = $this->objFromFixture('Product', 'tshirt');
     /* add items via url */
     $this->get(ShoppingCart::set_quantity_item_link($product->ID, $product->class) . "?quantity=5");
     $this->get(ShoppingCart::add_item_link($anotherproduct->ID, $product->class));
     /* remove items via url */
     $this->get(ShoppingCart::remove_item_link($product->ID, $product->class));
     $this->get(ShoppingCart::remove_item_link($anotherproduct->ID, $product->class));
     $items = ShoppingCart::get_items();
     $this->assertEquals($items->Count(), 1, 'There is 1 item in the cart');
     $this->assertEquals($items->First()->Quantity, 4, 'We have 4 mp3 players in the cart.');
     ShoppingCart::clear();
     //test clearing cart
     $this->assertEquals(ShoppingCart::get_items(), null, 'Cart is clear');
     //items is a databoject set, and will therefore be null when cart is empty.
     //TODO: remove item not in cart - insanity check
 }
 function IncrementLink()
 {
     $varid = $this->item instanceof ProductVariation_OrderItem ? $this->item->ProductVariationID : null;
     return Convert::raw2att(ShoppingCart::add_item_link($this->item->getProductIDForSerialization(), $varid, $this->parameters));
 }
 function addLink()
 {
     return ShoppingCart::add_item_link($this->_productID, $this->_productVariationID);
 }
 function addLink()
 {
     return ShoppingCart::add_item_link($this->_productID, null, $this->linkParameters());
 }
 function testNoMemberOrder()
 {
     //TODO: test configuration that deines non-member orders
     //adjust configuration to allow non member orders
     OrderForm::set_user_membership_optional(true);
     OrderForm::set_force_membership(false);
     $socks = $this->objFromFixture('Product', 'socks');
     $this->get(ShoppingCart::add_item_link($socks->ID));
     //add a different product
     $cart = ShoppingCart::current_order();
     $this->placeOrder('Donald', 'Duck', '*****@*****.**', '4 The Strand', null, 'Melbourne', null, 'AU');
     $order = DataObject::get_by_id('Order', $cart->ID);
     $this->assertNotNull($order, 'Order exists');
     if ($order) {
         $this->assertEquals($order->Status, 'Unpaid', 'status is now "unpaid"');
         $this->assertEquals($order->MemberID, 0, 'No associated member');
         $this->assertEquals($order->Total(), 8, 'grand total');
         $this->assertEquals($order->TotalOutstanding(), 8, 'total outstanding');
         $this->assertEquals($order->TotalPaid(), 0, 'total outstanding');
         $this->assertEquals($order->FirstName, 'Donald', 'order first name');
         $this->assertEquals($order->Surname, 'Duck', 'order surname');
         $this->assertEquals($order->Email, '*****@*****.**', 'order email');
         $this->assertEquals($order->Address, '4 The Strand');
         $this->assertNull($order->AddressLine2, 'order address2');
         $this->assertEquals($order->City, 'Melbourne', 'order city');
         $this->assertNull($order->PostalCode, 'order postcode');
         $this->assertEquals($order->Country, 'AU', 'order country');
     }
     ShoppingCart::clear();
     //cleanup
 }