@@ -5,10 +5,12 @@ import phoenix.models.account._
55import phoenix .models .cord .OrderShippingAddresses
66import phoenix .models .location .{Address , Addresses , Country , Region }
77import phoenix .payloads .AddressPayloads .CreateAddressPayload
8- import phoenix .responses .AddressResponse
8+ import phoenix .payloads .CartPayloads .CreateCart
9+ import phoenix .responses .{AddressResponse , TheResponse }
910import phoenix .responses .PublicResponses .CountryWithRegions
11+ import phoenix .responses .cord .CartResponse
1012import testutils ._
11- import testutils .apis .{PhoenixAdminApi , PhoenixPublicApi }
13+ import testutils .apis .{PhoenixAdminApi , PhoenixPublicApi , PhoenixStorefrontApi }
1214import testutils .fixtures .BakedFixtures
1315import testutils .fixtures .api .{randomAddress , ApiFixtureHelpers }
1416
@@ -18,6 +20,7 @@ class AddressesIntegrationTest
1820 with DefaultJwtAdminAuth
1921 with ApiFixtureHelpers
2022 with PhoenixAdminApi
23+ with PhoenixStorefrontApi
2124 with PhoenixPublicApi
2225 with BakedFixtures {
2326
@@ -31,15 +34,10 @@ class AddressesIntegrationTest
3134 }
3235
3336 " POST /v1/customers/:customerId/addresses" - {
34- " creates an address" in new Customer_Seed {
35- val payload = CreateAddressPayload (name = " Home Office" ,
36- regionId = 1 ,
37- address1 = " 3000 Coolio Dr" ,
38- city = " Seattle" ,
39- zip = " 55555" )
37+ " creates an address" in new Customer_Seed with AddressFixture {
4038 val newAddress =
41- customersApi(customer.accountId).addresses.create(payload ).as[AddressResponse ]
42- newAddress.name must === (payload .name)
39+ customersApi(customer.accountId).addresses.create(addressPayload ).as[AddressResponse ]
40+ newAddress.name must === (addressPayload .name)
4341 newAddress.isDefault must === (Some (false ))
4442 }
4543 }
@@ -74,31 +72,23 @@ class AddressesIntegrationTest
7472 }
7573
7674 " PATCH /v1/customers/:customerId/addresses/:addressId" - {
77- " can be edited" in new CustomerAddress_Baked {
78- val payload = CreateAddressPayload (name = " Home Office" ,
79- regionId = 1 ,
80- address1 = " 3000 Coolio Dr" ,
81- city = " Seattle" ,
82- zip = " 55555" )
83- (payload.name, payload.address1) must !== ((address.name, address.address1))
75+ " can be edited" in new CustomerAddress_Baked with AddressFixture {
76+ (addressPayload.name, addressPayload.address1) must !== ((address.name, address.address1))
8477
85- val updated =
86- customersApi(customer.accountId).address(address.id).edit(payload).as[AddressResponse ]
78+ val updated = customersApi(customer.accountId)
79+ .address(address.id)
80+ .edit(addressPayload)
81+ .as[AddressResponse ]
8782
88- (updated.name, updated.address1) must === ((payload .name, payload .address1))
83+ (updated.name, updated.address1) must === ((addressPayload .name, addressPayload .address1))
8984 }
9085 }
9186
9287 " DELETE /v1/customers/:customerId/addresses/:addressId" - {
93- " can be deleted" in new CustomerAddress_Baked {
88+ " can be deleted" in new CustomerAddress_Baked with AddressFixture {
9489
9590 // notice the payload is a default shipping address. Delete should make it not default.
96- val payload = CreateAddressPayload (name = " Delete Me" ,
97- regionId = 1 ,
98- address1 = " 5000 Delete Dr" ,
99- city = " Deattle" ,
100- zip = " 666" ,
101- isDefault = true )
91+ val payload = addressPayload.copy(isDefault = true )
10292
10393 val newAddress : AddressResponse =
10494 customersApi(customer.accountId).addresses.create(payload).as[AddressResponse ]
@@ -144,6 +134,57 @@ class AddressesIntegrationTest
144134 }
145135 }
146136
137+ " Create /v1/my/addresses" - {
138+ " POST shipping addresses into a cart adds it to customer details as well" in new AddressFixture {
139+ withNewCustomerAuth(TestLoginData .random) { implicit auth ⇒
140+ val cart = cartsApi.create(CreateCart (customerId = auth.customerId.some)).as[CartResponse ]
141+
142+ storefrontCartsApi.shippingAddress.create(addressPayload).as[TheResponse [CartResponse ]]
143+
144+ customersApi(auth.customerId).addresses.get
145+ .as[Seq [AddressResponse ]]
146+ .onlyElement
147+ .address1 must === (addressPayload.address1)
148+
149+ cartsApi(cart.referenceNumber)
150+ .get()
151+ .asTheResult[CartResponse ]
152+ .shippingAddress
153+ .value
154+ .address1 must === (addressPayload.address1)
155+ }
156+ }
157+
158+ " PUT for shipping addresses must be idempotent" in new AddressFixture {
159+ pending // PR #2036
160+ withNewCustomerAuth(TestLoginData .random) { implicit auth ⇒
161+ val cart = cartsApi.create(CreateCart (customerId = auth.customerId.some)).as[CartResponse ]
162+
163+ storefrontCartsApi.shippingAddress.createOrUpdate(addressPayload).mustBeOk()
164+ storefrontCartsApi.shippingAddress.createOrUpdate(addressPayload).mustBeOk()
165+ storefrontCartsApi.shippingAddress
166+ .createOrUpdate(addressPayload.copy(address1 = " My New address" ))
167+ .mustBeOk()
168+
169+ val shippingAddress = cartsApi(cart.referenceNumber)
170+ .get()
171+ .asTheResult[CartResponse ]
172+ .shippingAddress
173+ .value match {
174+ case adr ⇒ (adr.address1, adr.city, adr.zip)
175+ }
176+
177+ val customerAddress =
178+ customersApi(auth.customerId).addresses.get.as[Seq [AddressResponse ]].onlyElement match {
179+ case adr ⇒ (adr.address1, adr.city, adr.zip)
180+ }
181+
182+ shippingAddress must === ((" My New address" , addressPayload.city, addressPayload.zip))
183+ customerAddress must === ((" My New address" , addressPayload.city, addressPayload.zip))
184+ }
185+ }
186+ }
187+
147188 " GET /v1/my/addresses" - {
148189 " retrieves a customer's addresses" in {
149190 val (customer, loginData) = api_newCustomerWithLogin()
@@ -207,4 +248,13 @@ class AddressesIntegrationTest
207248 trait NoDefaultAddressFixture extends CustomerAddress_Baked with EmptyCustomerCart_Baked {
208249 val shippingAddress = OrderShippingAddresses .copyFromAddress(address, cart.refNum).gimme
209250 }
251+
252+ trait AddressFixture {
253+ val addressPayload = CreateAddressPayload (name = " Home Office" ,
254+ regionId = 1 ,
255+ address1 = " 3000 Coolio Dr" ,
256+ city = " Seattle" ,
257+ zip = " 55555" )
258+ }
259+
210260}
0 commit comments