fix: Investigate geo zones with address checks (#8066)
* fix: Investigate geo zones with address checks * rm debug * fix constraint building checks * add more explanation
This commit is contained in:
+40
@@ -226,6 +226,10 @@ moduleIntegrationTestRunner<IFulfillmentModuleService>({
|
||||
{
|
||||
name: "test",
|
||||
geo_zones: [
|
||||
{
|
||||
type: GeoZoneType.COUNTRY,
|
||||
country_code: "fr",
|
||||
},
|
||||
{
|
||||
type: GeoZoneType.ZIP,
|
||||
country_code: "fr",
|
||||
@@ -304,6 +308,42 @@ moduleIntegrationTestRunner<IFulfillmentModuleService>({
|
||||
country_code: "fr",
|
||||
province_code: "rhone",
|
||||
city: "paris",
|
||||
},
|
||||
})
|
||||
|
||||
expect(shippingOptions).toHaveLength(3)
|
||||
|
||||
shippingOptions = await service.listShippingOptionsForContext({
|
||||
address: {
|
||||
country_code: "fr",
|
||||
province_code: "rhone",
|
||||
},
|
||||
})
|
||||
|
||||
expect(shippingOptions).toHaveLength(3)
|
||||
|
||||
shippingOptions = await service.listShippingOptionsForContext({
|
||||
address: {
|
||||
country_code: "fr",
|
||||
},
|
||||
})
|
||||
|
||||
expect(shippingOptions).toHaveLength(3)
|
||||
|
||||
shippingOptions = await service.listShippingOptionsForContext({
|
||||
address: {
|
||||
country_code: "fr",
|
||||
postal_expression: "75006",
|
||||
},
|
||||
})
|
||||
|
||||
expect(shippingOptions).toHaveLength(3)
|
||||
|
||||
shippingOptions = await service.listShippingOptionsForContext({
|
||||
address: {
|
||||
country_code: "us",
|
||||
province_code: "rhone",
|
||||
city: "paris",
|
||||
postal_expression: "75001",
|
||||
},
|
||||
})
|
||||
|
||||
@@ -2189,37 +2189,18 @@ export default class FulfillmentModuleService
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate that the address has the required properties for the geo zones
|
||||
* constraints to build after. We are going from the narrowest to the broadest
|
||||
* The following changes assume that the lowest level check (e.g postal expression) can't exist multiple times in the higher level (e.g country)
|
||||
* In case we encounter situations where it is possible to have multiple postal expressions for the same country we need to change the logic back
|
||||
* to this pr https://github.com/medusajs/medusa/pull/8066
|
||||
*/
|
||||
Object.entries(geoZoneRequirePropertyHierarchy).forEach(
|
||||
([prop, requiredProps]) => {
|
||||
if (address![prop]) {
|
||||
for (const requiredProp of requiredProps) {
|
||||
if (!address![requiredProp]) {
|
||||
throw new MedusaError(
|
||||
MedusaError.Types.INVALID_DATA,
|
||||
`Missing required property ${requiredProp} for address when property ${prop} is set`
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
const geoZoneConstraints = Object.entries(geoZoneRequirePropertyHierarchy)
|
||||
.map(([prop, requiredProps]) => {
|
||||
if (address![prop]) {
|
||||
return requiredProps.reduce((geoZoneConstraint, prop) => {
|
||||
geoZoneConstraint.type =
|
||||
prop === "postal_expression"
|
||||
? "zip"
|
||||
: prop === "city"
|
||||
? "city"
|
||||
: prop === "province_code"
|
||||
? "province"
|
||||
: "country"
|
||||
geoZoneConstraint[prop] = address![prop]
|
||||
if (isPresent(address![prop])) {
|
||||
geoZoneConstraint[prop] = address![prop]
|
||||
}
|
||||
return geoZoneConstraint
|
||||
}, {} as Record<string, string | undefined>)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user