From f7386bf4b3c89363ae5ef15bd577a74b54345457 Mon Sep 17 00:00:00 2001 From: Philip Korsholm <88927411+pKorsholm@users.noreply.github.com> Date: Mon, 25 Apr 2022 19:55:33 +0700 Subject: [PATCH] fix: Update `is_giftcard` type when filtering products (#1427) * transform is_giftcard parameter and default to false * add test for non gift_cards * make default optional --- .../api/__tests__/admin/product.js | 44 +++++++++++++++++++ .../routes/admin/products/list-products.ts | 7 +-- packages/medusa/src/types/product.ts | 7 +-- 3 files changed, 52 insertions(+), 6 deletions(-) diff --git a/integration-tests/api/__tests__/admin/product.js b/integration-tests/api/__tests__/admin/product.js index 5a17a5a933..df71a7530f 100644 --- a/integration-tests/api/__tests__/admin/product.js +++ b/integration-tests/api/__tests__/admin/product.js @@ -509,6 +509,50 @@ describe("/admin/products", () => { ]) }) + it("returns a list of products not containing a giftcard in list", async () => { + const api = useApi() + + const payload = { + title: "Test Giftcard", + is_giftcard: true, + description: "test-giftcard-description", + options: [{ title: "Denominations" }], + variants: [ + { + title: "Test variant", + prices: [{ currency_code: "usd", amount: 100 }], + options: [{ value: "100" }], + }, + ], + } + + await api + .post("/admin/products", payload, { + headers: { + Authorization: "Bearer test_token", + }, + }) + .catch((err) => { + console.log(err) + }) + + const response = await api + .get("/admin/products?is_giftcard=false", { + headers: { + Authorization: "Bearer test_token", + }, + }) + .catch((err) => { + console.log(err) + }) + + expect(response.data.products).toEqual( + expect.not.arrayContaining([ + expect.objectContaining({ is_giftcard: true }), + ]) + ) + }) + it("returns a list of products with child entities", async () => { const api = useApi() diff --git a/packages/medusa/src/api/routes/admin/products/list-products.ts b/packages/medusa/src/api/routes/admin/products/list-products.ts index ae1a2be327..c102aae7f9 100644 --- a/packages/medusa/src/api/routes/admin/products/list-products.ts +++ b/packages/medusa/src/api/routes/admin/products/list-products.ts @@ -1,4 +1,4 @@ -import { Type } from "class-transformer" +import { Transform, Type } from "class-transformer" import { IsArray, IsBoolean, @@ -18,6 +18,7 @@ import { } from "." import listAndCount from "../../../../controllers/products/admin-list-products" import { validator } from "../../../../utils/validator" +import { optionalBooleanMapper } from "../../../../utils/validators/is-boolean" /** * @oas [get] /products @@ -162,8 +163,8 @@ export class AdminGetProductsParams extends AdminGetProductsPaginationParams { @IsBoolean() @IsOptional() - @Type(() => Boolean) - is_giftcard?: string + @Transform(({ value }) => optionalBooleanMapper.get(value.toLowerCase())) + is_giftcard?: boolean @IsString() @IsOptional() diff --git a/packages/medusa/src/types/product.ts b/packages/medusa/src/types/product.ts index 49e7876ec7..ac789d2574 100644 --- a/packages/medusa/src/types/product.ts +++ b/packages/medusa/src/types/product.ts @@ -1,4 +1,4 @@ -import { Type } from "class-transformer" +import { Transform, Type } from "class-transformer" import { IsArray, IsBoolean, @@ -7,6 +7,7 @@ import { IsString, ValidateNested, } from "class-validator" +import { optionalBooleanMapper } from "../utils/validators/is-boolean" import { IsType } from "../utils/validators/is-type" import { DateComparisonOperator, StringComparisonOperator } from "./common" @@ -56,8 +57,8 @@ export class FilterableProductProps { @IsBoolean() @IsOptional() - @Type(() => Boolean) - is_giftcard?: string + @Transform(({ value }) => optionalBooleanMapper.get(value.toLowerCase())) + is_giftcard?: boolean @IsString() @IsOptional()