Fix(medusa): Return correct region count (#4514)
* update method for listing regions * add changeset * fix unit tests * fix nit --------- Co-authored-by: Oliver Windall Juhl <59018053+olivermrbl@users.noreply.github.com>
This commit is contained in:
co-authored by
Oliver Windall Juhl
parent
cfd3e396cf
commit
56d1d326d4
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@medusajs/medusa": patch
|
||||
---
|
||||
|
||||
fix(medusa): provide correct count of regions
|
||||
@@ -183,6 +183,20 @@ describe("/admin/regions", () => {
|
||||
expect(response.status).toEqual(200)
|
||||
})
|
||||
|
||||
it("returns count of total regions", async () => {
|
||||
const api = useApi()
|
||||
|
||||
const response = await api.get(`/admin/regions?limit=2`, {
|
||||
headers: {
|
||||
Authorization: "Bearer test_token",
|
||||
},
|
||||
})
|
||||
|
||||
expect(response.data.regions).toHaveLength(2)
|
||||
expect(response.data.count).toEqual(3)
|
||||
expect(response.status).toEqual(200)
|
||||
})
|
||||
|
||||
it("filters correctly on update", async () => {
|
||||
const api = useApi()
|
||||
|
||||
@@ -351,7 +365,7 @@ describe("[MEDUSA_FF_TAX_INCLUSIVE_PRICING] /admin/regions", () => {
|
||||
includes_tax: true,
|
||||
}
|
||||
|
||||
let response = await api
|
||||
const response = await api
|
||||
.post(`/admin/regions`, payload, adminReqConfig)
|
||||
.catch((err) => {
|
||||
console.log(err)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { IdMap } from "medusa-test-utils"
|
||||
import { request } from "../../../../../helpers/test-request"
|
||||
import { RegionServiceMock } from "../../../../../services/__mocks__/region"
|
||||
import { request } from "../../../../../helpers/test-request"
|
||||
|
||||
const defaultFields = [
|
||||
"id",
|
||||
@@ -46,8 +46,8 @@ describe("GET /admin/regions", () => {
|
||||
})
|
||||
|
||||
it("calls service list", () => {
|
||||
expect(RegionServiceMock.list).toHaveBeenCalledTimes(1)
|
||||
expect(RegionServiceMock.list).toHaveBeenCalledWith(
|
||||
expect(RegionServiceMock.listAndCount).toHaveBeenCalledTimes(1)
|
||||
expect(RegionServiceMock.listAndCount).toHaveBeenCalledWith(
|
||||
{},
|
||||
{
|
||||
select: defaultFields,
|
||||
@@ -81,8 +81,8 @@ describe("GET /admin/regions", () => {
|
||||
})
|
||||
|
||||
it("calls service list", () => {
|
||||
expect(RegionServiceMock.list).toHaveBeenCalledTimes(1)
|
||||
expect(RegionServiceMock.list).toHaveBeenCalledWith(
|
||||
expect(RegionServiceMock.listAndCount).toHaveBeenCalledTimes(1)
|
||||
expect(RegionServiceMock.listAndCount).toHaveBeenCalledWith(
|
||||
{},
|
||||
{
|
||||
select: defaultFields,
|
||||
|
||||
@@ -105,14 +105,14 @@ export default async (req, res) => {
|
||||
take: validated.limit,
|
||||
}
|
||||
|
||||
const regions: Region[] = await regionService.list(
|
||||
const [regions, count] = await regionService.listAndCount(
|
||||
_.pickBy(filterableFields, identity),
|
||||
listConfig
|
||||
)
|
||||
|
||||
res.json({
|
||||
regions,
|
||||
count: regions.length,
|
||||
count,
|
||||
offset: validated.offset,
|
||||
limit: validated.limit,
|
||||
})
|
||||
|
||||
@@ -46,7 +46,7 @@ export const RegionServiceMock = {
|
||||
withTransaction: function () {
|
||||
return this
|
||||
},
|
||||
retrieve: jest.fn().mockImplementation(regionId => {
|
||||
retrieve: jest.fn().mockImplementation((regionId) => {
|
||||
if (regionId === IdMap.getId("testRegion")) {
|
||||
return Promise.resolve(regions.testRegion)
|
||||
}
|
||||
@@ -64,30 +64,36 @@ export const RegionServiceMock = {
|
||||
}
|
||||
return Promise.resolve(regions.testRegion)
|
||||
}),
|
||||
delete: jest.fn().mockImplementation(data => Promise.resolve()),
|
||||
delete: jest.fn().mockImplementation((data) => Promise.resolve()),
|
||||
create: jest
|
||||
.fn()
|
||||
.mockImplementation(data => Promise.resolve({ id: "region" })),
|
||||
addCountry: jest.fn().mockImplementation(data => Promise.resolve()),
|
||||
.mockImplementation((data) => Promise.resolve({ id: "region" })),
|
||||
addCountry: jest.fn().mockImplementation((data) => Promise.resolve()),
|
||||
addFulfillmentProvider: jest
|
||||
.fn()
|
||||
.mockImplementation(data => Promise.resolve()),
|
||||
addPaymentProvider: jest.fn().mockImplementation(data => Promise.resolve()),
|
||||
removeCountry: jest.fn().mockImplementation(data => Promise.resolve()),
|
||||
.mockImplementation((data) => Promise.resolve()),
|
||||
addPaymentProvider: jest.fn().mockImplementation((data) => Promise.resolve()),
|
||||
removeCountry: jest.fn().mockImplementation((data) => Promise.resolve()),
|
||||
removeFulfillmentProvider: jest
|
||||
.fn()
|
||||
.mockImplementation(data => Promise.resolve()),
|
||||
.mockImplementation((data) => Promise.resolve()),
|
||||
removePaymentProvider: jest
|
||||
.fn()
|
||||
.mockImplementation(data => Promise.resolve()),
|
||||
update: jest.fn().mockImplementation(data => Promise.resolve()),
|
||||
list: jest.fn().mockImplementation(data => {
|
||||
.mockImplementation((data) => Promise.resolve()),
|
||||
update: jest.fn().mockImplementation((data) => Promise.resolve()),
|
||||
list: jest.fn().mockImplementation((data) => {
|
||||
return Promise.resolve([
|
||||
regions.testRegion,
|
||||
regions.regionFrance,
|
||||
regions.regionUs,
|
||||
])
|
||||
}),
|
||||
listAndCount: jest.fn().mockImplementation((data) => {
|
||||
return Promise.resolve([
|
||||
[regions.testRegion, regions.regionFrance, regions.regionUs],
|
||||
3,
|
||||
])
|
||||
}),
|
||||
}
|
||||
|
||||
const mock = jest.fn().mockImplementation(() => {
|
||||
|
||||
@@ -1,25 +1,24 @@
|
||||
import { DeepPartial, EntityManager } from "typeorm"
|
||||
|
||||
import { isDefined, MedusaError } from "medusa-core-utils"
|
||||
|
||||
import { TransactionBaseService } from "../interfaces"
|
||||
import TaxInclusivePricingFeatureFlag from "../loaders/feature-flags/tax-inclusive-pricing"
|
||||
import { Country, Currency, Region } from "../models"
|
||||
import { CreateRegionInput, UpdateRegionInput } from "../types/region"
|
||||
import { DeepPartial, EntityManager } from "typeorm"
|
||||
import { FindConfig, Selector } from "../types/common"
|
||||
import { MedusaError, isDefined } from "medusa-core-utils"
|
||||
import { buildQuery, setMetadata } from "../utils"
|
||||
|
||||
import { CountryRepository } from "../repositories/country"
|
||||
import { CurrencyRepository } from "../repositories/currency"
|
||||
import { FulfillmentProviderRepository } from "../repositories/fulfillment-provider"
|
||||
import { PaymentProviderRepository } from "../repositories/payment-provider"
|
||||
import { RegionRepository } from "../repositories/region"
|
||||
import { TaxProviderRepository } from "../repositories/tax-provider"
|
||||
import { FindConfig, Selector } from "../types/common"
|
||||
import { CreateRegionInput, UpdateRegionInput } from "../types/region"
|
||||
import { buildQuery, setMetadata } from "../utils"
|
||||
import { countries } from "../utils/countries"
|
||||
import { FlagRouter } from "../utils/flag-router"
|
||||
import EventBusService from "./event-bus"
|
||||
import { FlagRouter } from "../utils/flag-router"
|
||||
import { FulfillmentProviderRepository } from "../repositories/fulfillment-provider"
|
||||
import FulfillmentProviderService from "./fulfillment-provider"
|
||||
import { PaymentProviderRepository } from "../repositories/payment-provider"
|
||||
import { PaymentProviderService } from "./index"
|
||||
import { RegionRepository } from "../repositories/region"
|
||||
import StoreService from "./store"
|
||||
import TaxInclusivePricingFeatureFlag from "../loaders/feature-flags/tax-inclusive-pricing"
|
||||
import { TaxProviderRepository } from "../repositories/tax-provider"
|
||||
import { TransactionBaseService } from "../interfaces"
|
||||
import { countries } from "../utils/countries"
|
||||
|
||||
type InjectedDependencies = {
|
||||
manager: EntityManager
|
||||
@@ -511,12 +510,31 @@ class RegionService extends TransactionBaseService {
|
||||
take: 10,
|
||||
}
|
||||
): Promise<Region[]> {
|
||||
const [regions] = await this.listAndCount(selector, config)
|
||||
return regions
|
||||
}
|
||||
|
||||
/**
|
||||
* Lists all regions based on a query and returns them along with count
|
||||
*
|
||||
* @param {object} selector - query object for find
|
||||
* @param {object} config - configuration settings
|
||||
* @return {Promise} result of the find operation
|
||||
*/
|
||||
async listAndCount(
|
||||
selector: Selector<Region> = {},
|
||||
config: FindConfig<Region> = {
|
||||
relations: [],
|
||||
skip: 0,
|
||||
take: 10,
|
||||
}
|
||||
): Promise<[Region[], number]> {
|
||||
const regionRepo = this.activeManager_.withRepository(
|
||||
this.regionRepository_
|
||||
)
|
||||
|
||||
const query = buildQuery(selector, config)
|
||||
return regionRepo.find(query)
|
||||
return await regionRepo.findAndCount(query)
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user