Skip to content

Commit

Permalink
feat(tax): migration file (#6523)
Browse files Browse the repository at this point in the history
**What**
- Tax Module Migration file.
- Skeleton for API routes and integrations tests for tax API in v2
  • Loading branch information
srindom authored Feb 28, 2024
1 parent 0d46abf commit adad66e
Show file tree
Hide file tree
Showing 15 changed files with 912 additions and 6 deletions.
77 changes: 77 additions & 0 deletions integration-tests/plugins/__tests__/tax/admin/tax.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
import path from "path"
import { ITaxModuleService } from "@medusajs/types"
import { ModuleRegistrationName } from "@medusajs/modules-sdk"

import { createAdminUser } from "../../../helpers/create-admin-user"
import { initDb, useDb } from "../../../../environment-helpers/use-db"
import { getContainer } from "../../../../environment-helpers/use-container"
import { startBootstrapApp } from "../../../../environment-helpers/bootstrap-app"
import { useApi } from "../../../../environment-helpers/use-api"

jest.setTimeout(50000)

const env = { MEDUSA_FF_MEDUSA_V2: true }
const adminHeaders = {
headers: { "x-medusa-access-token": "test_token" },
}

describe("Taxes - Admin", () => {
let dbConnection
let appContainer
let shutdownServer
let service: ITaxModuleService

beforeAll(async () => {
const cwd = path.resolve(path.join(__dirname, "..", "..", ".."))
dbConnection = await initDb({ cwd, env } as any)
shutdownServer = await startBootstrapApp({ cwd, env })
appContainer = getContainer()
service = appContainer.resolve(ModuleRegistrationName.TAX)
})

beforeEach(async () => {
await createAdminUser(dbConnection, adminHeaders)
})

afterAll(async () => {
const db = useDb()
await db.shutdown()
await shutdownServer()
})

afterEach(async () => {
const db = useDb()
await db.teardown()
})

it("can retrieve a tax rate", async () => {
const region = await service.createTaxRegions({
country_code: "us",
})
const rate = await service.create({
tax_region_id: region.id,
code: "test",
rate: 2.5,
name: "Test Rate",
})

const api = useApi() as any
const response = await api.get(`/admin/tax-rates/${rate.id}`, adminHeaders)

expect(response.status).toEqual(200)
expect(response.data).toEqual({
tax_rate: {
id: rate.id,
code: "test",
rate: 2.5,
name: "Test Rate",
metadata: null,
tax_region_id: region.id,
created_at: expect.any(String),
updated_at: expect.any(String),
deleted_at: null,
created_by: null,
},
})
})
})
5 changes: 5 additions & 0 deletions integration-tests/plugins/medusa-config.js
Original file line number Diff line number Diff line change
Expand Up @@ -123,5 +123,10 @@ module.exports = {
resources: "shared",
resolve: "@medusajs/store",
},
[Modules.TAX]: {
scope: "internal",
resources: "shared",
resolve: "@medusajs/tax",
},
},
}
1 change: 1 addition & 0 deletions integration-tests/plugins/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
"@medusajs/promotion": "workspace:^",
"@medusajs/region": "workspace:^",
"@medusajs/store": "workspace:^",
"@medusajs/tax": "workspace:^",
"@medusajs/user": "workspace:^",
"@medusajs/utils": "workspace:^",
"@medusajs/workflow-engine-inmemory": "workspace:*",
Expand Down
26 changes: 26 additions & 0 deletions packages/medusa/src/api-v2/admin/tax-rates/[id]/route.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import {
AuthenticatedMedusaRequest,
MedusaResponse,
} from "../../../../types/routing"

import { defaultAdminTaxRateFields } from "../query-config"
import { remoteQueryObjectFromString } from "@medusajs/utils"

export const GET = async (
req: AuthenticatedMedusaRequest,
res: MedusaResponse
) => {
const remoteQuery = req.scope.resolve("remoteQuery")

const variables = { id: req.params.id }

const queryObject = remoteQueryObjectFromString({
entryPoint: "tax_rate",
variables,
fields: defaultAdminTaxRateFields,
})

const [taxRate] = await remoteQuery(queryObject)

res.status(200).json({ tax_rate: taxRate })
}
25 changes: 25 additions & 0 deletions packages/medusa/src/api-v2/admin/tax-rates/middlewares.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import * as QueryConfig from "./query-config"

import { AdminGetTaxRatesTaxRateParams } from "./validators"
import { transformQuery } from "../../../api/middlewares"

import { MiddlewareRoute } from "../../../loaders/helpers/routing/types"
import { authenticate } from "../../../utils/authenticate-middleware"

export const adminTaxRateRoutesMiddlewares: MiddlewareRoute[] = [
{
method: ["ALL"],
matcher: "/admin/tax-rates*",
middlewares: [authenticate("admin", ["bearer", "session", "api-key"])],
},
{
method: ["GET"],
matcher: "/admin/tax-rates/:id",
middlewares: [
transformQuery(
AdminGetTaxRatesTaxRateParams,
QueryConfig.retrieveTransformQueryConfig
),
],
},
]
26 changes: 26 additions & 0 deletions packages/medusa/src/api-v2/admin/tax-rates/query-config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
export const defaultAdminTaxRateRelations = []
export const allowedAdminTaxRateRelations = []
export const defaultAdminTaxRateFields = [
"id",
"name",
"code",
"rate",
"tax_region_id",
"created_by",
"created_at",
"updated_at",
"deleted_at",
"metadata",
]

export const retrieveTransformQueryConfig = {
defaultFields: defaultAdminTaxRateFields,
defaultRelations: defaultAdminTaxRateRelations,
allowedRelations: allowedAdminTaxRateRelations,
isList: false,
}

export const listTransformQueryConfig = {
defaultLimit: 20,
isList: true,
}
3 changes: 3 additions & 0 deletions packages/medusa/src/api-v2/admin/tax-rates/validators.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { FindParams } from "../../../types/common"

export class AdminGetTaxRatesTaxRateParams extends FindParams {}
2 changes: 2 additions & 0 deletions packages/medusa/src/api-v2/middlewares.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import { adminInviteRoutesMiddlewares } from "./admin/invites/middlewares"
import { adminPromotionRoutesMiddlewares } from "./admin/promotions/middlewares"
import { adminRegionRoutesMiddlewares } from "./admin/regions/middlewares"
import { adminStoreRoutesMiddlewares } from "./admin/stores/middlewares"
import { adminTaxRateRoutesMiddlewares } from "./admin/tax-rates/middlewares"
import { adminUserRoutesMiddlewares } from "./admin/users/middlewares"
import { adminWorkflowsExecutionsMiddlewares } from "./admin/workflows-executions/middlewares"
import { authRoutesMiddlewares } from "./auth/middlewares"
Expand All @@ -30,6 +31,7 @@ export const config: MiddlewaresConfig = {
...adminRegionRoutesMiddlewares,
...adminUserRoutesMiddlewares,
...adminInviteRoutesMiddlewares,
...adminTaxRateRoutesMiddlewares,
...adminApiKeyRoutesMiddlewares,
...hooksRoutesMiddlewares,
...adminStoreRoutesMiddlewares,
Expand Down
36 changes: 34 additions & 2 deletions packages/tax/src/joiner-config.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
import { Modules } from "@medusajs/modules-sdk"
import { ModuleJoinerConfig } from "@medusajs/types"
import { MapToConfig } from "@medusajs/utils"
import { TaxRate, TaxRegion, TaxRateRule, TaxProvider } from "@models"

export const LinkableKeys: Record<string, string> = {
tax_rate_id: "TaxRate",
tax_rate_id: TaxRate.name,
tax_region_id: TaxRegion.name,
tax_rate_rule_id: TaxRateRule.name,
tax_provider_id: TaxProvider.name,
}

const entityLinkableKeysMap: MapToConfig = {}
Expand All @@ -21,5 +25,33 @@ export const joinerConfig: ModuleJoinerConfig = {
serviceName: Modules.TAX,
primaryKeys: ["id"],
linkableKeys: LinkableKeys,
alias: [],
alias: [
{
name: ["tax_rate", "tax_rates"],
args: {
entity: TaxRate.name,
},
},
{
name: ["tax_region", "tax_regions"],
args: {
entity: TaxRegion.name,
methodSuffix: "TaxRegions",
},
},
{
name: ["tax_rate_rule", "tax_rate_rules"],
args: {
entity: TaxRateRule.name,
methodSuffix: "TaxRateRules",
},
},
{
name: ["tax_provider", "tax_providers"],
args: {
entity: TaxProvider.name,
methodSuffix: "TaxProviders",
},
},
],
} as ModuleJoinerConfig
Loading

0 comments on commit adad66e

Please sign in to comment.