Created
January 18, 2012 12:09
-
-
Save schmengler/1632726 to your computer and use it in GitHub Desktop.
Magento Checkout Integration Test
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
scope: | |
website: | |
- website_id: 1 | |
code: default | |
name: Default Website | |
default_group_id: 1 | |
is_default: 1 | |
group: | |
- group_id: 1 | |
website_id: 1 | |
name: Default Store Group | |
default_store_id: 1 | |
root_category_id: 2 #default | |
store: | |
- store_id: 1 | |
website_id: 1 | |
group_id: 1 | |
code: default | |
name: Default Store | |
is_active: 1 | |
config: | |
stores/default/checkout/options/enable_agreements: 0 | |
default/general/country/allow: DE,GB | |
stores/default/dev/log/active: 1 | |
stores/default/dev/log/file: tests-system.log | |
stores/default/dev/log/exception_file: tests-exception.log | |
eav: | |
catalog_product: | |
- | |
entity_id: 1 | |
stock: | |
qty: 100 | |
is_in_stock: 1 | |
website_ids: | |
- default | |
sku: test | |
name: Test | |
status: 1 # enabled | |
type_id: simple | |
price: 1.00 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Integration test for OnePageCheckout | |
* | |
* @author Fabian Schmengler <fschmengler@sgh-it.eu> | |
* @copyright SGH informationstechnologie UGmbH 2012 | |
* @package SGH\Common | |
* @subpackage Test | |
* | |
*/ | |
class SGH_Common_Test_Controller_Checkout_OnepageController | |
extends EcomDev_PHPUnit_Test_Case_Controller | |
{ | |
protected function setUp() | |
{ | |
parent::setUp(); | |
/* | |
* uncomment if test system has no mail capability | |
*/ | |
//$this->_replaceMailerModels(); | |
} | |
protected function _replaceMailerModels() | |
{ | |
$this->replaceByMock( | |
'model', 'core/email_template', | |
$this->_mockMailer('core/email_template') | |
); | |
$this->replaceByMock( | |
'model', 'core/email', $this->_mockMailer('core/email') | |
); | |
} | |
/** | |
* Returns mock for given mailer model | |
* | |
* @param string $model class alias | |
* @return PHPUnit_Framework_MockObject_MockObject | |
*/ | |
protected function _mockMailer($model) | |
{ | |
return $this->getModelMock( | |
$model, array('send', 'sendTransactional') | |
); | |
} | |
protected function tearDown() | |
{ | |
$this->_deleteOrders(); | |
parent::tearDown(); | |
} | |
/** | |
* Deletes any created order | |
* | |
* @return void | |
*/ | |
protected function _deleteOrders() | |
{ | |
Mage::register('isSecureArea', true); | |
/* @var $orders Mage_Sales_Model_Mysql4_Order_Collection */ | |
$orders = Mage::getModel('sales/order')->getCollection()->load(); | |
$orders->walk('delete'); | |
} | |
/** | |
* @author Alistair Stead | |
* @author Fabian Schmengler (rewritten for EcomDev PHPUnit) | |
* @test | |
* @loadFixture | |
*/ | |
public function magentoCheckoutIntegrationTest() | |
{ | |
$this->setCurrentStore('default'); | |
// Add the product to the basket | |
$this->getRequest()->setMethod('POST') | |
->setPost( | |
array( | |
'product' => '1', | |
'related_product' => '', | |
'qty' => '1' | |
) | |
); | |
// Set an initial cookie so that the Magento cookie validation passes | |
$this->getRequest()->setCookie('mage-test', true); | |
$this->dispatch('checkout/cart/add'); | |
$this->assertResponseHttpCode('302', '/checkout/cart/add/ has not redirected to the cart'); | |
$this->assertRedirectToUrlRegExp("/^.*checkout.*$/", 'We are not directed to the checkout as expected'); | |
$this->reset(); | |
$this->_fixCheckout(); | |
$this->_debugCheckout(); | |
// Set the checkout as guest | |
$this->getRequest()->setMethod('POST') | |
->setPost( | |
array( | |
'method' => 'guest' | |
) | |
); | |
$this->dispatch('checkout/onepage/saveMethod'); | |
$this->assertResponseHttpCode('200', '/checkout/onepage/saveMethod/ has not responded as expected'); | |
$this->reset(); | |
// Save billing address | |
$this->getRequest()->setMethod('POST') | |
->setPost( | |
array( | |
'billing' => array( | |
'address_id' => '', | |
'firstname' => 'Authorize', | |
'lastname' => 'Capture', | |
'company' => '', | |
'email' => 'user@mage-test.co.uk', | |
'street' => array('Flat 14b', 'Baker Street'), | |
'city' => 'London', | |
'region_id' => '', | |
'postcode' => 'W1B OW3', | |
'country_id' => 'GB', | |
'telephone' => '+44 1234 123456', | |
'fax' => '+44 1234 123456', | |
'customer_password' => '', | |
'confirm_password' => '', | |
'save_in_address_book' => '1', | |
'use_for_shipping' => '1' | |
) | |
) | |
); | |
$this->dispatch('checkout/onepage/saveBilling'); | |
$this->assertResponseHttpCode('200', '/checkout/onepage/saveBilling/ has not responded as expected'); | |
$this->reset(); | |
// Set shipping method | |
$this->getRequest()->setMethod('POST') | |
->setPost( | |
array( | |
'shipping_method' => 'flatrate_flatrate' | |
) | |
); | |
$this->dispatch('checkout/onepage/saveShippingMethod'); | |
$this->assertResponseHttpCode('200', '/checkout/onepage/saveShippingMethod/ has not responded as expected'); | |
$this->reset(); | |
// Save payment | |
$this->getRequest()->setMethod('POST') | |
->setPost( | |
array( | |
'payment' => array( | |
'method' => 'checkmo' | |
) | |
) | |
); | |
$this->dispatch('checkout/onepage/savePayment'); | |
$this->assertResponseHttpCode('200', '/checkout/onepage/savePayment/ has not responded as expected'); | |
$this->reset(); | |
// Save order | |
$this->getRequest()->setMethod('POST') | |
->setPost( | |
array( | |
'payment' => array( | |
'method' => 'checkmo' | |
) | |
) | |
); | |
$this->dispatch('checkout/onepage/saveOrder'); | |
$this->assertResponseHttpCode('200', '/checkout/onepage/saveOrder/ has not responded as expected'); | |
// Decode the JSON response so that we can evaluate the success | |
$data = json_decode($this->getResponse()->getOutputBody(), true); | |
$this->assertTrue( | |
$data['success'], | |
'Unexpected status expected result: ' . | |
array_key_exists('error_messages', $data) | |
? $data['error_messages'] : ' - ' | |
); | |
} | |
/* | |
* 403 Session Expired: Root Cause Analysis | |
*/ | |
protected function _debugCheckout() | |
{ | |
/* @var $opc Mage_Checkout_Model_Type_Onepage */ | |
$opc = Mage::getSingleton('checkout/type_onepage'); | |
$this->assertTrue( | |
$opc->getQuote()->hasItems(), | |
'DEBUG: hasItems()' | |
); | |
$this->assertEquals( | |
false, $opc->getQuote()->getHasError(), | |
'DEBUG: hasError' | |
); | |
$this->assertEquals( | |
false, $opc->getQuote()->getIsMultiShipping(), | |
'DEBUG: isMultiShipping' | |
); | |
$this->assertEquals( | |
false, Mage::getSingleton('checkout/session')->getCartWasUpdated(), | |
'DEBUG: cartWasUpdated' | |
); | |
/* | |
* payment method | |
*/ | |
$check = (string) $this->app()->getConfig()->getNode( | |
'payment/checkmo/active', 'store', 'default' | |
); | |
$this->assertEquals('1', $check, 'DEBUG: Check / Money Order is active'); | |
} | |
/* | |
* solved :-) | |
*/ | |
protected function _fixCheckout() | |
{ | |
Mage::getSingleton('checkout/session')->setCartWasUpdated(false); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment