_baseControllerUrl = 'http://localhost/index.php/backend/customer/index/'; $this->customerRepository = Bootstrap::getObjectManager()->get( \Magento\Customer\Api\CustomerRepositoryInterface::class ); $this->addressRepository = Bootstrap::getObjectManager()->get( \Magento\Customer\Api\AddressRepositoryInterface::class ); $this->accountManagement = Bootstrap::getObjectManager()->get( \Magento\Customer\Api\AccountManagementInterface::class ); $this->formKey = Bootstrap::getObjectManager()->get( \Magento\Framework\Data\Form\FormKey::class ); $this->objectManager = Bootstrap::getObjectManager(); $this->customerViewHelper = $this->objectManager->get( \Magento\Customer\Helper\View::class ); } /** * @inheritDoc */ protected function tearDown() { /** * Unset customer data */ Bootstrap::getObjectManager()->get(\Magento\Backend\Model\Session::class)->setCustomerData(null); /** * Unset messages */ Bootstrap::getObjectManager()->get(\Magento\Backend\Model\Session::class)->getMessages(true); } /** * @magentoDbIsolation enabled */ public function testSaveActionWithEmptyPostData() { $this->getRequest()->setPostValue([])->setMethod(HttpRequest::METHOD_POST); $this->dispatch('backend/customer/index/save'); $this->assertRedirect($this->stringStartsWith($this->_baseControllerUrl)); } /** * @magentoDbIsolation enabled */ public function testSaveActionWithInvalidFormData() { $post = ['account' => ['middlename' => 'test middlename', 'group_id' => 1]]; $this->getRequest()->setPostValue($post)->setMethod(HttpRequest::METHOD_POST); $this->dispatch('backend/customer/index/save'); /** * Check that errors was generated and set to session */ $this->assertSessionMessages( $this->logicalNot($this->isEmpty()), \Magento\Framework\Message\MessageInterface::TYPE_ERROR ); /** @var \Magento\Backend\Model\Session $session */ $session = $this->objectManager->get(\Magento\Backend\Model\Session::class); /** * Check that customer data were set to session */ $this->assertNotEmpty($session->getCustomerFormData()); $this->assertArraySubset($post, $session->getCustomerFormData()); $this->assertRedirect($this->stringStartsWith($this->_baseControllerUrl . 'new')); } /** * @magentoDataFixture Magento/Newsletter/_files/subscribers.php */ public function testSaveActionExistingCustomerUnsubscribeNewsletter() { $customerId = 1; /** @var \Magento\Newsletter\Model\Subscriber $subscriber */ $subscriber = $this->objectManager->get(\Magento\Newsletter\Model\SubscriberFactory::class)->create(); $this->assertEmpty($subscriber->getId()); $subscriber->loadByCustomerId($customerId); $this->assertNotEmpty($subscriber->getId()); $this->assertEquals(1, $subscriber->getStatus()); $post = [ 'customer' => [ 'entity_id' => $customerId, 'email' => 'customer@example.com', 'firstname' => 'test firstname', 'lastname' => 'test lastname', 'sendemail_store_id' => 1 ], 'subscription' => '0' ]; $this->getRequest()->setPostValue($post)->setMethod(HttpRequest::METHOD_POST); $this->getRequest()->setParam('id', 1); $this->dispatch('backend/customer/index/save'); /** @var \Magento\Newsletter\Model\Subscriber $subscriber */ $subscriber = $this->objectManager->get(\Magento\Newsletter\Model\SubscriberFactory::class)->create(); $this->assertEmpty($subscriber->getId()); $subscriber->loadByCustomerId($customerId); $this->assertNotEmpty($subscriber->getId()); $this->assertEquals(3, $subscriber->getStatus()); /** * Check that success message is set */ $this->assertSessionMessages( $this->equalTo(['You saved the customer.']), \Magento\Framework\Message\MessageInterface::TYPE_SUCCESS ); $this->assertRedirect($this->stringStartsWith($this->_baseControllerUrl . 'index/key/')); } /** * Ensure that an email is sent during save action * * @magentoConfigFixture current_store customer/account_information/change_email_template change_email_template * @magentoConfigFixture current_store customer/password/forgot_email_identity support * @magentoDataFixture Magento/Customer/_files/customer_sample.php */ public function testSaveActionExistingCustomerChangeEmail() { $customerId = 1; $newEmail = 'newcustomer@example.com'; $transportBuilderMock = $this->prepareEmailMock( 2, 'change_email_template', [ 'name' => 'CustomerSupport', 'email' => 'support@example.com', ], $customerId, $newEmail ); $this->addEmailMockToClass($transportBuilderMock, EmailNotification::class); $post = [ 'customer' => [ 'entity_id' => $customerId, 'middlename' => 'test middlename', 'group_id' => 1, 'website_id' => 1, 'firstname' => 'test firstname', 'lastname' => 'test lastname', 'email' => $newEmail, 'new_password' => 'auto', 'sendemail_store_id' => '1', 'sendemail' => '1', 'created_at' => '2000-01-01 00:00:00', 'default_shipping' => '_item1', 'default_billing' => 1, ] ]; $this->getRequest()->setPostValue($post)->setMethod(HttpRequest::METHOD_POST); $this->getRequest()->setParam('id', 1); $this->dispatch('backend/customer/index/save'); /** * Check that no errors were generated and set to session */ $this->assertSessionMessages($this->isEmpty(), \Magento\Framework\Message\MessageInterface::TYPE_ERROR); $this->assertRedirect($this->stringStartsWith($this->_baseControllerUrl . 'index/key/')); } /** * Ensure that an email is sent during inlineEdit action * * @magentoConfigFixture current_store customer/account_information/change_email_template change_email_template * @magentoConfigFixture current_store customer/password/forgot_email_identity support * @magentoDataFixture Magento/Customer/_files/customer_sample.php */ public function testInlineEditChangeEmail() { $customerId = 1; $newEmail = 'newcustomer@example.com'; $transportBuilderMock = $this->prepareEmailMock( 2, 'change_email_template', [ 'name' => 'CustomerSupport', 'email' => 'support@example.com', ], $customerId, $newEmail ); $this->addEmailMockToClass($transportBuilderMock, EmailNotification::class); $post = [ 'items' => [ $customerId => [ 'middlename' => 'test middlename', 'group_id' => 1, 'website_id' => 1, 'firstname' => 'test firstname', 'lastname' => 'test lastname', 'email' => $newEmail, 'password' => 'password', ], ] ]; $this->getRequest()->setParam('ajax', true)->setParam('isAjax', true); $this->getRequest()->setPostValue($post)->setMethod(HttpRequest::METHOD_POST); $this->getRequest()->setParam('id', 1); $this->dispatch('backend/customer/index/inlineEdit'); /** * Check that no errors were generated and set to session */ $this->assertSessionMessages($this->isEmpty(), \Magento\Framework\Message\MessageInterface::TYPE_ERROR); } /** * @magentoDataFixture Magento/Customer/_files/customer_sample.php */ public function testSaveActionCoreException() { $post = [ 'customer' => [ 'middlename' => 'test middlename', 'group_id' => 1, 'website_id' => 1, 'firstname' => 'test firstname', 'lastname' => 'test lastname', 'email' => 'customer@example.com', 'password' => 'password', ], ]; $this->getRequest()->setPostValue($post)->setMethod(HttpRequest::METHOD_POST); $this->dispatch('backend/customer/index/save'); /* * Check that error message is set */ $this->assertSessionMessages( $this->equalTo(['A customer with the same email address already exists in an associated website.']), \Magento\Framework\Message\MessageInterface::TYPE_ERROR ); $this->assertArraySubset( $post, Bootstrap::getObjectManager()->get(\Magento\Backend\Model\Session::class)->getCustomerFormData() ); $this->assertRedirect($this->stringStartsWith($this->_baseControllerUrl . 'new/key/')); } /** * @magentoDataFixture Magento/Customer/_files/customer_sample.php */ public function testEditAction() { $this->getRequest()->setParam('id', 1); $this->dispatch('backend/customer/index/edit'); $body = $this->getResponse()->getBody(); // verify $this->assertContains('