Skip to content

Commit fbf3388

Browse files
authored
feat: Search by billing_address and shipping_address on Order model (#12814)
* feat: Search by billing_address and shipping_address on Order model **What** Added `.searchable()` method to the `shipping_address` and `billing_address` relationships in the `Order` model, enabling search functionality. **Why** Previously searching via `shipping_address` and `billing_address` was not supported, limiting the ability to find orders based on shipping or billing address information. Resolves SUP-1838 * Update integration tests to include billing_address and non-existing addresses.
1 parent ba1e659 commit fbf3388

2 files changed

Lines changed: 65 additions & 0 deletions

File tree

integration-tests/http/__tests__/order/admin/order.spec.ts

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,69 @@ medusaIntegrationTestRunner({
6666
expect(response.data.orders).toHaveLength(0)
6767
expect(response.data.orders).toEqual([])
6868
})
69+
70+
it("should search orders by shipping address", async () => {
71+
let response = await api.get(`/admin/orders?fields=+shipping_address.address_1,+shipping_address.address_2`, adminHeaders)
72+
73+
expect(response.data.orders).toHaveLength(1)
74+
expect(response.data.orders).toEqual([
75+
expect.objectContaining({
76+
id: order.id,
77+
}),
78+
])
79+
80+
response = await api.get(`/admin/orders?fields=+shipping_address.address_1,+shipping_address.address_2&q=${order.shipping_address.address_1}`, adminHeaders)
81+
82+
expect(response.data.orders).toHaveLength(1)
83+
expect(response.data.orders).toEqual([
84+
expect.objectContaining({
85+
id: order.id,
86+
}),
87+
])
88+
89+
response = await api.get(`/admin/orders?q=${order.shipping_address.address_2}`, adminHeaders)
90+
91+
expect(response.data.orders).toHaveLength(1)
92+
expect(response.data.orders).toEqual([
93+
expect.objectContaining({
94+
id: order.id,
95+
}),
96+
])
97+
98+
response = await api.get(`/admin/orders?q=does-not-exist`, adminHeaders)
99+
100+
expect(response.data.orders).toHaveLength(0)
101+
expect(response.data.orders).toEqual([])
102+
})
103+
104+
it("should search orders by billing address", async () => {
105+
let response = await api.get(`/admin/orders?fields=+billing_address.address_1,+billing_address.address_2`, adminHeaders)
106+
107+
expect(response.data.orders).toHaveLength(1)
108+
expect(response.data.orders).toEqual([
109+
expect.objectContaining({
110+
id: order.id,
111+
}),
112+
])
113+
114+
response = await api.get(`/admin/orders?fields=+billing_address.address_1,+billing_address.address_2&q=${order.billing_address.address_1}`, adminHeaders)
115+
116+
expect(response.data.orders).toHaveLength(1)
117+
expect(response.data.orders).toEqual([
118+
expect.objectContaining({
119+
id: order.id,
120+
}),
121+
])
122+
123+
response = await api.get(`/admin/orders?q=${order.billing_address.address_2}`, adminHeaders)
124+
125+
expect(response.data.orders).toHaveLength(1)
126+
expect(response.data.orders).toEqual([
127+
expect.objectContaining({
128+
id: order.id,
129+
}),
130+
])
131+
})
69132
})
70133

71134
describe("POST /orders/:id", () => {

packages/modules/order/src/models/order.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,14 @@ const _Order = model
2727
mappedBy: undefined,
2828
foreignKey: true,
2929
})
30+
.searchable()
3031
.nullable(),
3132
billing_address: model
3233
.hasOne<any>(() => OrderAddress, {
3334
mappedBy: undefined,
3435
foreignKey: true,
3536
})
37+
.searchable()
3638
.nullable(),
3739
summary: model.hasMany<any>(() => OrderSummary, {
3840
mappedBy: "order",

0 commit comments

Comments
 (0)