From 21d99a44a9fb2bd0f52c8bc8b5c75d200ef6d539 Mon Sep 17 00:00:00 2001 From: fPolic Date: Wed, 16 Feb 2022 11:55:21 +0100 Subject: [PATCH] feat: GET customer group endpoint --- .../api/__tests__/admin/customer-groups.js | 37 +++++++++++++++++++ .../__tests__/get-customer-group.ts | 27 ++++++++++++++ .../customer-groups/get-customer-group.ts | 32 ++++++++++++++++ .../api/routes/admin/customer-groups/index.ts | 1 + .../src/services/__mocks__/customer-group.js | 5 +++ .../medusa/src/services/customer-group.ts | 19 ++++++++++ 6 files changed, 121 insertions(+) create mode 100644 packages/medusa/src/api/routes/admin/customer-groups/__tests__/get-customer-group.ts create mode 100644 packages/medusa/src/api/routes/admin/customer-groups/get-customer-group.ts diff --git a/integration-tests/api/__tests__/admin/customer-groups.js b/integration-tests/api/__tests__/admin/customer-groups.js index 0561f8e72d..8087234ac6 100644 --- a/integration-tests/api/__tests__/admin/customer-groups.js +++ b/integration-tests/api/__tests__/admin/customer-groups.js @@ -85,4 +85,41 @@ describe("/admin/customer-groups", () => { }) }) }) + + describe("GET /admin/customer-groups", () => { + beforeEach(async () => { + try { + await adminSeeder(dbConnection) + await customerSeeder(dbConnection) + } catch (err) { + console.log(err) + throw err + } + }) + + afterEach(async () => { + const db = useDb() + await db.teardown() + }) + + it("gets customer group", async () => { + const api = useApi() + + const id = "test-group-4" + + const response = await api.get(`/admin/customer-groups/${id}`, { + headers: { + Authorization: "Bearer test_token", + }, + }) + + expect(response.status).toEqual(200) + expect(response.data.customerGroup).toEqual( + expect.objectContaining({ + id: "test-group-4", + name: "test-group", + }) + ) + }) + }) }) diff --git a/packages/medusa/src/api/routes/admin/customer-groups/__tests__/get-customer-group.ts b/packages/medusa/src/api/routes/admin/customer-groups/__tests__/get-customer-group.ts new file mode 100644 index 0000000000..2e5e13e5ff --- /dev/null +++ b/packages/medusa/src/api/routes/admin/customer-groups/__tests__/get-customer-group.ts @@ -0,0 +1,27 @@ +import { IdMap } from "medusa-test-utils" +import { request } from "../../../../../helpers/test-request" +import { CustomerGroupServiceMock } from "../../../../../services/__mocks__/customer-group" + +describe("GET /customer-groups", () => { + let subject + const id = "123" + + beforeAll(async () => { + subject = await request("GET", `/admin/customer-groups/${id}`, { + adminSession: { + jwt: { + userId: IdMap.getId("admin_user"), + }, + }, + }) + }) + + it("returns 200", () => { + expect(subject.status).toEqual(200) + }) + + it("calls CustomerGroupService get", () => { + expect(CustomerGroupServiceMock.retrieve).toHaveBeenCalledTimes(1) + expect(CustomerGroupServiceMock.retrieve).toHaveBeenCalledWith(id) + }) +}) diff --git a/packages/medusa/src/api/routes/admin/customer-groups/get-customer-group.ts b/packages/medusa/src/api/routes/admin/customer-groups/get-customer-group.ts new file mode 100644 index 0000000000..c0e86e3d50 --- /dev/null +++ b/packages/medusa/src/api/routes/admin/customer-groups/get-customer-group.ts @@ -0,0 +1,32 @@ +import { CustomerGroupService } from "../../../../services" + +/** + * @oas [get] /customer-group/{id} + * operationId: "GetCustomerGroups" + * summary: "Retrieve a CustomerGroup" + * description: "Retrieves a Customer Group." + * x-authenticated: true + * parameters: + * - (path) id=* {string} The id of the Customer Group. + * tags: + * - CustomerGroup + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * customerGroup: + * $ref: "#/components/schemas/customer-group" + */ +export default async (req, res) => { + const { id } = req.params + const customerGroupService: CustomerGroupService = req.scope.resolve( + "customerGroupService" + ) + + const customerGroup = await customerGroupService.retrieve(id) + + res.json({ customerGroup }) +} diff --git a/packages/medusa/src/api/routes/admin/customer-groups/index.ts b/packages/medusa/src/api/routes/admin/customer-groups/index.ts index 91db467403..2facc6ff0f 100644 --- a/packages/medusa/src/api/routes/admin/customer-groups/index.ts +++ b/packages/medusa/src/api/routes/admin/customer-groups/index.ts @@ -8,6 +8,7 @@ const route = Router() export default (app) => { app.use("/customer-groups", route) + route.get("/:id", middlewares.wrap(require("./get-customer-group").default)) route.post("/", middlewares.wrap(require("./create-customer-group").default)) return app } diff --git a/packages/medusa/src/services/__mocks__/customer-group.js b/packages/medusa/src/services/__mocks__/customer-group.js index db92b9a8e5..0a50f82cb8 100644 --- a/packages/medusa/src/services/__mocks__/customer-group.js +++ b/packages/medusa/src/services/__mocks__/customer-group.js @@ -6,6 +6,10 @@ export const CustomerGroupServiceMock = { create: jest.fn().mockImplementation((f) => { return Promise.resolve(f) }), + + retrieve: jest.fn().mockImplementation((f) => { + return Promise.resolve(f) + }), } const mock = jest.fn().mockImplementation(() => { @@ -13,3 +17,4 @@ const mock = jest.fn().mockImplementation(() => { }) export default mock + diff --git a/packages/medusa/src/services/customer-group.ts b/packages/medusa/src/services/customer-group.ts index 80cc6b9b82..f081bada10 100644 --- a/packages/medusa/src/services/customer-group.ts +++ b/packages/medusa/src/services/customer-group.ts @@ -39,6 +39,25 @@ class CustomerGroupService extends BaseService { return cloned } + async retrieve(id: string, config = {}): Promise { + const customerRepo = this.manager_.getCustomRepository( + this.customerGroupRepository_ + ) + + const validatedId = this.validateId_(id) + const query = this.buildQuery_({ id: validatedId }, config) + + const customerGroup = await customerRepo.findOne(query) + if (!customerGroup) { + throw new MedusaError( + MedusaError.Types.NOT_FOUND, + `CustomerGroup with ${id} was not found` + ) + } + + return customerGroup + } + /** * Creates a customer group with the provided data. * @param {DeepPartial} group - the customer group to create