objectManager = Bootstrap::getObjectManager(); $this->addressRegistry = $this->objectManager->get(AddressRegistry::class); $this->addressResource = $this->objectManager->get(Address::class); $this->customerRegistry = $this->objectManager->get(CustomerRegistry::class); $this->addressRepository = $this->objectManager->get(AddressRepositoryInterface::class); $this->customerRepository = $this->objectManager->get(CustomerRepositoryInterface::class); parent::setUp(); } /** * @inheritdoc */ protected function tearDown(): void { foreach ($this->processedAddressesIds as $createdAddressesId) { $this->addressRegistry->remove($createdAddressesId); } parent::tearDown(); } /** * Assert that default addresses properly updated for customer. * * @magentoDataFixture Magento/Customer/_files/customer.php * @magentoDataFixture Magento/Customer/_files/customer_address.php * * @dataProvider updateAddressIsDefaultDataProvider * * @param bool $isShippingDefault * @param bool $isBillingDefault * @param int|null $expectedShipping * @param int|null $expectedBilling * @return void */ public function testUpdateAddressIsDefault( bool $isShippingDefault, bool $isBillingDefault, ?int $expectedShipping, ?int $expectedBilling ): void { $customer = $this->customerRepository->get('customer@example.com'); $this->assertEquals(1, $customer->getDefaultShipping()); $this->assertEquals(1, $customer->getDefaultBilling()); $this->processedAddressesIds[] = 1; $address = $this->addressRepository->getById(1); $address->setIsDefaultShipping($isShippingDefault); $address->setIsDefaultBilling($isBillingDefault); $this->addressRepository->save($address); $this->customerRegistry->remove(1); $customer = $this->customerRepository->get('customer@example.com'); $this->assertEquals($customer->getDefaultShipping(), $expectedShipping); $this->assertEquals($customer->getDefaultBilling(), $expectedBilling); } /** * Data provider for update address as default billing or default shipping. * * @return array */ public function updateAddressIsDefaultDataProvider(): array { return [ 'update_shipping_address_default' => [true, false, 1, null], 'update_billing_address_default' => [false, true, null, 1], ]; } /** * Assert that address updated successfully. * * @magentoDataFixture Magento/Customer/_files/customer.php * @magentoDataFixture Magento/Customer/_files/customer_address.php * * @dataProvider updateAddressesDataProvider * * @param array $updateData * @param array $expectedData * @return void */ public function testUpdateAddress(array $updateData, array $expectedData): void { $this->processedAddressesIds[] = 1; $address = $this->addressRepository->getById(1); foreach ($updateData as $setFieldName => $setValue) { $address->setData($setFieldName, $setValue); } $updatedAddressData = $this->addressRepository->save($address)->__toArray(); foreach ($expectedData as $getFieldName => $getValue) { $this->assertTrue(isset($updatedAddressData[$getFieldName]), "Field $getFieldName wasn't found."); $this->assertEquals($getValue, $updatedAddressData[$getFieldName]); } } /** * Data provider for update address with proper data. * * @return array */ public function updateAddressesDataProvider(): array { return [ 'required_field_telephone' => [ [AddressInterface::TELEPHONE => 251512979595], [AddressInterface::TELEPHONE => 251512979595], ], 'required_field_postcode' => [ [AddressInterface::POSTCODE => 55425], [AddressInterface::POSTCODE => 55425], ], 'required_field_empty_postcode_for_uk' => [ [AddressInterface::COUNTRY_ID => 'GB', AddressInterface::POSTCODE => ''], [AddressInterface::COUNTRY_ID => 'GB', AddressInterface::POSTCODE => null], ], 'required_field_empty_region_id_for_ua' => [ [AddressInterface::COUNTRY_ID => 'UA', AddressInterface::REGION_ID => ''], [ AddressInterface::COUNTRY_ID => 'UA', AddressInterface::REGION_ID => 0, ], ], 'required_field_firstname' => [ [AddressInterface::FIRSTNAME => 'Test firstname'], [AddressInterface::FIRSTNAME => 'Test firstname'], ], 'required_field_lastname' => [ [AddressInterface::LASTNAME => 'Test lastname'], [AddressInterface::LASTNAME => 'Test lastname'], ], 'required_field_street_as_array' => [ [AddressInterface::STREET => ['', 'Test str, 55']], [AddressInterface::STREET => ['Test str, 55']], ], 'required_field_city' => [ [AddressInterface::CITY => 'Test city'], [AddressInterface::CITY => 'Test city'], ], 'field_name_prefix' => [ [AddressInterface::PREFIX => 'My prefix'], [AddressInterface::PREFIX => 'My prefix'], ], 'field_middle_name_initial' => [ [AddressInterface::MIDDLENAME => 'My middle name'], [AddressInterface::MIDDLENAME => 'My middle name'], ], 'field_name_suffix' => [ [AddressInterface::SUFFIX => 'My suffix'], [AddressInterface::SUFFIX => 'My suffix'], ], 'field_company_name' => [ [AddressInterface::COMPANY => 'My company'], [AddressInterface::COMPANY => 'My company'], ], 'field_vat_number' => [ [AddressInterface::VAT_ID => 'My VAT number'], [AddressInterface::VAT_ID => 'My VAT number'], ], ]; } /** * Assert that error message has thrown during process address update. * * @magentoDataFixture Magento/Customer/_files/customer.php * @magentoDataFixture Magento/Customer/_files/customer_address.php * * @dataProvider updateWrongAddressesDataProvider * * @param array $updateData * @param \Exception $expectException * @return void */ public function testExceptionThrownDuringUpdateAddress(array $updateData, \Exception $expectException): void { $this->processedAddressesIds[] = 1; $address = $this->addressRepository->getById(1); foreach ($updateData as $setFieldName => $setValue) { $address->setData($setFieldName, $setValue); } $this->expectExceptionObject($expectException); $this->addressRepository->save($address); } /** * Data provider for update address with proper data or with error. * * @return array */ public function updateWrongAddressesDataProvider(): array { return [ 'required_field_empty_telephone' => [ [AddressInterface::TELEPHONE => ''], InputException::requiredField('telephone'), ], 'required_field_empty_postcode_for_us' => [ [AddressInterface::POSTCODE => ''], InputException::requiredField('postcode'), ], // TODO: Uncomment this variation after fix issue https://jira.corp.magento.com/browse/MC-31031 // 'required_field_empty_region_id_for_us' => [ // [AddressInterface::REGION_ID => ''], // InputException::requiredField('regionId'), // ], 'required_field_empty_firstname' => [ [AddressInterface::FIRSTNAME => ''], InputException::requiredField('firstname'), ], 'required_field_empty_lastname' => [ [AddressInterface::LASTNAME => ''], InputException::requiredField('lastname'), ], 'required_field_empty_street_as_array' => [ [AddressInterface::STREET => []], InputException::requiredField('street'), ], 'required_field_empty_city' => [ [AddressInterface::CITY => ''], InputException::requiredField('city'), ], // TODO: Uncomment this variation after fix issue https://jira.corp.magento.com/browse/MC-31031 // 'field_invalid_vat_number' => [ // [AddressInterface::VAT_ID => '/>.<*'], // null// It need to create some error but currently magento doesn't has validation for this field., // ], ]; } }