feat(tax): add support for updating tax rates (#6516)
**What** - Adds update
This commit is contained in:
@@ -8,6 +8,73 @@ moduleIntegrationTestRunner({
|
|||||||
moduleName: Modules.TAX,
|
moduleName: Modules.TAX,
|
||||||
testSuite: ({ service }: SuiteOptions<ITaxModuleService>) => {
|
testSuite: ({ service }: SuiteOptions<ITaxModuleService>) => {
|
||||||
describe("TaxModuleService", function () {
|
describe("TaxModuleService", function () {
|
||||||
|
it("should create tax rates and update them", async () => {
|
||||||
|
const region = await service.createTaxRegions({
|
||||||
|
country_code: "US",
|
||||||
|
default_tax_rate: {
|
||||||
|
name: "Test Rate",
|
||||||
|
rate: 0.2,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
const rate = await service.create({
|
||||||
|
tax_region_id: region.id,
|
||||||
|
name: "Shipping Rate",
|
||||||
|
code: "test",
|
||||||
|
rate: 8.23,
|
||||||
|
})
|
||||||
|
|
||||||
|
const updatedRate = await service.update(rate.id, {
|
||||||
|
name: "Updated Rate",
|
||||||
|
code: "TEST",
|
||||||
|
rate: 8.25,
|
||||||
|
})
|
||||||
|
|
||||||
|
expect(updatedRate).toEqual(
|
||||||
|
expect.objectContaining({
|
||||||
|
tax_region_id: region.id,
|
||||||
|
rate: 8.25,
|
||||||
|
name: "Updated Rate",
|
||||||
|
code: "TEST",
|
||||||
|
is_default: false,
|
||||||
|
})
|
||||||
|
)
|
||||||
|
|
||||||
|
const updatedDefaultRate = await service.update(
|
||||||
|
{ tax_region_id: region.id, is_default: true },
|
||||||
|
{ rate: 2 }
|
||||||
|
)
|
||||||
|
|
||||||
|
expect(updatedDefaultRate).toEqual([
|
||||||
|
expect.objectContaining({
|
||||||
|
tax_region_id: region.id,
|
||||||
|
rate: 2,
|
||||||
|
name: "Test Rate",
|
||||||
|
code: null,
|
||||||
|
is_default: true,
|
||||||
|
}),
|
||||||
|
])
|
||||||
|
|
||||||
|
const rates = await service.list()
|
||||||
|
expect(rates).toEqual(
|
||||||
|
expect.arrayContaining([
|
||||||
|
expect.objectContaining({
|
||||||
|
tax_region_id: region.id,
|
||||||
|
rate: 2,
|
||||||
|
name: "Test Rate",
|
||||||
|
is_default: true,
|
||||||
|
}),
|
||||||
|
expect.objectContaining({
|
||||||
|
tax_region_id: region.id,
|
||||||
|
rate: 8.25,
|
||||||
|
name: "Updated Rate",
|
||||||
|
code: "TEST",
|
||||||
|
is_default: false,
|
||||||
|
}),
|
||||||
|
])
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
it("should create a tax region", async () => {
|
it("should create a tax region", async () => {
|
||||||
const region = await service.createTaxRegions({
|
const region = await service.createTaxRegions({
|
||||||
country_code: "US",
|
country_code: "US",
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import {
|
|||||||
MedusaError,
|
MedusaError,
|
||||||
ModulesSdkUtils,
|
ModulesSdkUtils,
|
||||||
isDefined,
|
isDefined,
|
||||||
|
isString,
|
||||||
promiseAll,
|
promiseAll,
|
||||||
} from "@medusajs/utils"
|
} from "@medusajs/utils"
|
||||||
import { TaxRate, TaxRegion, TaxRateRule } from "@models"
|
import { TaxRate, TaxRegion, TaxRateRule } from "@models"
|
||||||
@@ -145,6 +146,49 @@ export default class TaxModuleService<
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async update(
|
||||||
|
id: string,
|
||||||
|
data: TaxTypes.UpdateTaxRateDTO,
|
||||||
|
sharedContext?: Context
|
||||||
|
): Promise<TaxTypes.TaxRateDTO>
|
||||||
|
async update(
|
||||||
|
ids: string[],
|
||||||
|
data: TaxTypes.UpdateTaxRateDTO,
|
||||||
|
sharedContext?: Context
|
||||||
|
): Promise<TaxTypes.TaxRateDTO[]>
|
||||||
|
async update(
|
||||||
|
selector: TaxTypes.FilterableTaxRateProps,
|
||||||
|
data: TaxTypes.UpdateTaxRateDTO,
|
||||||
|
sharedContext?: Context
|
||||||
|
): Promise<TaxTypes.TaxRateDTO[]>
|
||||||
|
|
||||||
|
@InjectManager("baseRepository_")
|
||||||
|
async update(
|
||||||
|
selector: string | string[] | TaxTypes.FilterableTaxRateProps,
|
||||||
|
data: TaxTypes.UpdateTaxRateDTO,
|
||||||
|
@MedusaContext() sharedContext: Context = {}
|
||||||
|
): Promise<TaxTypes.TaxRateDTO | TaxTypes.TaxRateDTO[]> {
|
||||||
|
const rates = await this.update_(selector, data, sharedContext)
|
||||||
|
const serialized = await this.baseRepository_.serialize<
|
||||||
|
TaxTypes.TaxRateDTO[]
|
||||||
|
>(rates, { populate: true })
|
||||||
|
return isString(selector) ? serialized[0] : serialized
|
||||||
|
}
|
||||||
|
|
||||||
|
@InjectTransactionManager("baseRepository_")
|
||||||
|
protected async update_(
|
||||||
|
idOrSelector: string | string[] | TaxTypes.FilterableTaxRateProps,
|
||||||
|
data: TaxTypes.UpdateTaxRateDTO,
|
||||||
|
@MedusaContext() sharedContext: Context = {}
|
||||||
|
) {
|
||||||
|
const selector =
|
||||||
|
Array.isArray(idOrSelector) || isString(idOrSelector)
|
||||||
|
? { id: idOrSelector }
|
||||||
|
: idOrSelector
|
||||||
|
|
||||||
|
return await this.taxRateService_.update({ selector, data }, sharedContext)
|
||||||
|
}
|
||||||
|
|
||||||
createTaxRegions(
|
createTaxRegions(
|
||||||
data: TaxTypes.CreateTaxRegionDTO,
|
data: TaxTypes.CreateTaxRegionDTO,
|
||||||
sharedContext?: Context
|
sharedContext?: Context
|
||||||
|
|||||||
@@ -9,6 +9,15 @@ export interface CreateTaxRateDTO {
|
|||||||
metadata?: Record<string, unknown>
|
metadata?: Record<string, unknown>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface UpdateTaxRateDTO {
|
||||||
|
rate?: number | null
|
||||||
|
code?: string | null
|
||||||
|
name?: string
|
||||||
|
is_default?: boolean
|
||||||
|
created_by?: string
|
||||||
|
metadata?: Record<string, unknown>
|
||||||
|
}
|
||||||
|
|
||||||
export interface CreateTaxRegionDTO {
|
export interface CreateTaxRegionDTO {
|
||||||
country_code: string
|
country_code: string
|
||||||
province_code?: string | null
|
province_code?: string | null
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import {
|
|||||||
CreateTaxRateRuleDTO,
|
CreateTaxRateRuleDTO,
|
||||||
CreateTaxRateDTO,
|
CreateTaxRateDTO,
|
||||||
CreateTaxRegionDTO,
|
CreateTaxRegionDTO,
|
||||||
|
UpdateTaxRateDTO,
|
||||||
} from "./mutations"
|
} from "./mutations"
|
||||||
|
|
||||||
export interface ITaxModuleService extends IModuleService {
|
export interface ITaxModuleService extends IModuleService {
|
||||||
@@ -46,6 +47,22 @@ export interface ITaxModuleService extends IModuleService {
|
|||||||
): Promise<TaxRateDTO[]>
|
): Promise<TaxRateDTO[]>
|
||||||
create(data: CreateTaxRateDTO, sharedContext?: Context): Promise<TaxRateDTO>
|
create(data: CreateTaxRateDTO, sharedContext?: Context): Promise<TaxRateDTO>
|
||||||
|
|
||||||
|
update(
|
||||||
|
taxRateId: string,
|
||||||
|
data: UpdateTaxRateDTO,
|
||||||
|
sharedContext?: Context
|
||||||
|
): Promise<TaxRateDTO>
|
||||||
|
update(
|
||||||
|
taxRateIds: string[],
|
||||||
|
data: UpdateTaxRateDTO,
|
||||||
|
sharedContext?: Context
|
||||||
|
): Promise<TaxRateDTO[]>
|
||||||
|
update(
|
||||||
|
selector: FilterableTaxRateProps,
|
||||||
|
data: UpdateTaxRateDTO,
|
||||||
|
sharedContext?: Context
|
||||||
|
): Promise<TaxRateDTO[]>
|
||||||
|
|
||||||
delete(taxRateIds: string[], sharedContext?: Context): Promise<void>
|
delete(taxRateIds: string[], sharedContext?: Context): Promise<void>
|
||||||
delete(taxRateId: string, sharedContext?: Context): Promise<void>
|
delete(taxRateId: string, sharedContext?: Context): Promise<void>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user