Browse Source

fix(core): Correctly update country in customer address

Michael Bromley 6 years ago
parent
commit
75f949275a

+ 17 - 0
packages/core/e2e/customer.e2e-spec.ts

@@ -112,6 +112,19 @@ describe('Customer resolver', () => {
             firstCustomerAddressIds = result.customer!.addresses!.map(a => a.id);
         });
 
+        it('updateCustomerAddress updates the country', async () => {
+            const result = await adminClient.query(UPDATE_ADDRESS, {
+                input: {
+                    id: firstCustomerAddressIds[0],
+                    countryCode: 'AT',
+                },
+            });
+            expect(result.updateCustomerAddress.country).toEqual({
+                    code: 'AT',
+                    name: 'Austria',
+            });
+        });
+
         it('updateCustomerAddress allows only a single default address', async () => {
             // set the first customer's second address to be default
             const result1 = await adminClient.query(UPDATE_ADDRESS, {
@@ -341,6 +354,10 @@ const UPDATE_ADDRESS = gql`
             id
             defaultShippingAddress
             defaultBillingAddress
+            country {
+                code
+                name
+            }
         }
     }
 `;

+ 2 - 0
packages/core/e2e/shop-customer.e2e-spec.ts

@@ -126,10 +126,12 @@ describe('Shop customers', () => {
             const input: UpdateAddressInput = {
                 id: addressId,
                 streetLine1: '5 Test Street',
+                countryCode: 'AT',
             };
             const result = await shopClient.query(UPDATE_ADDRESS, { input });
 
             expect(result.updateCustomerAddress.streetLine1).toEqual('5 Test Street');
+            expect(result.updateCustomerAddress.country.code).toEqual('AT');
         });
 
         it(

+ 5 - 1
packages/core/src/service/services/customer.service.ts

@@ -220,7 +220,11 @@ export class CustomerService {
         const address = await getEntityOrThrow(this.connection, Address, input.id, {
             relations: ['country'],
         });
-        address.country = translateDeep(address.country, ctx.languageCode);
+        if (input.countryCode && input.countryCode !== address.country.code) {
+            address.country = await this.countryService.findOneByCode(ctx, input.countryCode);
+        } else {
+            address.country = translateDeep(address.country, ctx.languageCode);
+        }
         const updatedAddress = patchEntity(address, input);
         await this.connection.getRepository(Address).save(updatedAddress);
         await this.enforceSingleDefaultAddress(input.id, input);