diff --git a/integration-tests/api/__tests__/store/cart.js b/integration-tests/api/__tests__/store/cart.js index 73051e2ce6..b5232bb196 100644 --- a/integration-tests/api/__tests__/store/cart.js +++ b/integration-tests/api/__tests__/store/cart.js @@ -13,6 +13,7 @@ const { useApi } = require("../../../helpers/use-api") const { initDb, useDb } = require("../../../helpers/use-db") const cartSeeder = require("../../helpers/cart-seeder") +const productSeeder = require("../../helpers/product-seeder") const swapSeeder = require("../../helpers/swap-seeder") jest.setTimeout(30000) @@ -88,6 +89,39 @@ describe("/store/carts", () => { } }) + it("creates a cart with items", async () => { + await productSeeder(dbConnection) + const api = useApi() + + const response = await api.post("/store/carts", { + items: [ + { + variant_id: "test-variant_1", + quantity: 1, + }, + { + variant_id: "test-variant_2", + quantity: 2, + }, + ], + }) + + expect(response.status).toEqual(200) + expect(response.data.cart.items).toEqual([ + expect.objectContaining({ + variant_id: "test-variant_1", + quantity: 1, + }), + expect.objectContaining({ + variant_id: "test-variant_2", + quantity: 2, + }), + ]) + + const getRes = await api.post(`/store/carts/${response.data.cart.id}`) + expect(getRes.status).toEqual(200) + }) + it("creates a cart with country", async () => { const api = useApi() diff --git a/integration-tests/api/package.json b/integration-tests/api/package.json index 728db7981a..b05a4a963c 100644 --- a/integration-tests/api/package.json +++ b/integration-tests/api/package.json @@ -8,15 +8,15 @@ "build": "babel src -d dist --extensions \".ts,.js\"" }, "dependencies": { - "@medusajs/medusa": "1.1.51", - "medusa-interfaces": "1.1.27", + "@medusajs/medusa": "1.1.57-dev-1638295280349", + "medusa-interfaces": "1.1.31-dev-1638295280349", "typeorm": "^0.2.31" }, "devDependencies": { "@babel/cli": "^7.12.10", "@babel/core": "^7.12.10", "@babel/node": "^7.12.10", - "babel-preset-medusa-package": "1.1.17", + "babel-preset-medusa-package": "1.1.18-dev-1638295280349", "jest": "^26.6.3" } -} \ No newline at end of file +} diff --git a/integration-tests/api/yarn.lock b/integration-tests/api/yarn.lock index 7305f342ff..775f3f6419 100644 --- a/integration-tests/api/yarn.lock +++ b/integration-tests/api/yarn.lock @@ -556,6 +556,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-syntax-typescript@^7.16.0": + version "7.16.0" + resolved "http://localhost:4873/@babel%2fplugin-syntax-typescript/-/plugin-syntax-typescript-7.16.0.tgz#2feeb13d9334cc582ea9111d3506f773174179bb" + integrity sha512-Xv6mEXqVdaqCBfJFyeab0fH2DnUoMsDmhamxsSi4j8nLd4Vtw213WMJr55xxqipC/YVWyPY3K0blJncPYji+dQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-arrow-functions@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.0.tgz#951706f8b449c834ed07bd474c0924c944b95a8e" @@ -808,6 +815,15 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-typescript@^7.16.0": + version "7.16.1" + resolved "http://localhost:4873/@babel%2fplugin-transform-typescript/-/plugin-transform-typescript-7.16.1.tgz#cc0670b2822b0338355bc1b3d2246a42b8166409" + integrity sha512-NO4XoryBng06jjw/qWEU2LhcLJr1tWkhpMam/H4eas/CDKMX/b2/Ylb6EI256Y7+FVPCawwSM1rrJNOpDiz+Lg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-typescript" "^7.16.0" + "@babel/plugin-transform-unicode-escapes@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.0.tgz#1a354064b4c45663a32334f46fa0cf6100b5b1f3" @@ -922,6 +938,15 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" +"@babel/preset-typescript@^7.16.0": + version "7.16.0" + resolved "http://localhost:4873/@babel%2fpreset-typescript/-/preset-typescript-7.16.0.tgz#b0b4f105b855fb3d631ec036cdc9d1ffd1fa5eac" + integrity sha512-txegdrZYgO9DlPbv+9QOVpMnKbOtezsLHWsnsRF4AjbSIsVaujrq1qg8HK0mxQpWv0jnejt0yEoW1uWpvbrDTg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-validator-option" "^7.14.5" + "@babel/plugin-transform-typescript" "^7.16.0" + "@babel/register@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.16.0.tgz#f5d2aa14df37cf7146b9759f7c53818360f24ec6" @@ -1231,10 +1256,10 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" -"@medusajs/medusa-cli@^1.1.22": - version "1.1.23" - resolved "https://registry.yarnpkg.com/@medusajs/medusa-cli/-/medusa-cli-1.1.23.tgz#d7272a21c02f9fa3cbe1dc8f9e2840cdd0e1d2f9" - integrity sha512-rqjDFd8hM9Q3rvuxwetv28jp3xHzH5Nt5J129JPCk9Sd8Rj6x2lVbKPbULNwgQ6hk8OsXjOQF2hPEyRt+vJL3A== +"@medusajs/medusa-cli@1.1.23-dev-1638295280349": + version "1.1.23-dev-1638295280349" + resolved "http://localhost:4873/@medusajs%2fmedusa-cli/-/medusa-cli-1.1.23-dev-1638295280349.tgz#65fb12a6d63a0132f93547373344f2352d184a13" + integrity sha512-EcnaL44hGs7vlC7vujPeebzx0HK3nj4ADikoAsrXeaulzGOcAaqrHSgMC8g/pz3f8vDFdimm1tqemWL+Zr1ijQ== dependencies: "@babel/polyfill" "^7.8.7" "@babel/runtime" "^7.9.6" @@ -1252,8 +1277,8 @@ is-valid-path "^0.1.1" joi-objectid "^3.0.1" meant "^1.0.1" - medusa-core-utils "^0.1.27" - medusa-telemetry "^0.0.10" + medusa-core-utils "1.1.30-dev-1638295280349" + medusa-telemetry "0.0.10-dev-1638295280349" netrc-parser "^3.1.6" open "^8.0.6" ora "^5.4.1" @@ -1267,18 +1292,20 @@ winston "^3.3.3" yargs "^15.3.1" -"@medusajs/medusa@1.1.51": - version "1.1.51" - resolved "https://registry.yarnpkg.com/@medusajs/medusa/-/medusa-1.1.51.tgz#8c905be75dfe8bdea0851f7dbb8679fd335829a6" - integrity sha512-+42U6EuTLMUNs2xRy3GoOiwRV6smYVkc8SN9zM9inMxycJn9FQDPQreZftBrOO0q5mTMLC8gG4wld/64qN2U6Q== +"@medusajs/medusa@1.1.57-dev-1638295280349": + version "1.1.57-dev-1638295280349" + resolved "http://localhost:4873/@medusajs%2fmedusa/-/medusa-1.1.57-dev-1638295280349.tgz#ea276c471ca79db87ab44e761c22f6c68068e39a" + integrity sha512-xAY1NO/7i6hinYkUWXtyH7ievW6oY0WJ3ZPN6q3vQBs8wsaysmsev1CHpjq7pZZJ6JUNGL39m4wTwUnCMQ+stw== dependencies: "@hapi/joi" "^16.1.8" - "@medusajs/medusa-cli" "^1.1.22" + "@medusajs/medusa-cli" "1.1.23-dev-1638295280349" "@types/lodash" "^4.14.168" awilix "^4.2.3" body-parser "^1.19.0" bull "^3.12.1" chokidar "^3.4.2" + class-transformer "^0.5.1" + class-validator "^0.13.1" connect-redis "^5.0.0" cookie-parser "^1.4.4" core-js "^3.6.5" @@ -1295,8 +1322,8 @@ joi "^17.3.0" joi-objectid "^3.0.1" jsonwebtoken "^8.5.1" - medusa-core-utils "^1.1.26" - medusa-test-utils "^1.1.29" + medusa-core-utils "1.1.30-dev-1638295280349" + medusa-test-utils "1.1.33-dev-1638295280349" morgan "^1.9.1" multer "^1.4.2" passport "^0.4.0" @@ -1920,10 +1947,10 @@ babel-preset-jest@^26.6.2: babel-plugin-jest-hoist "^26.6.2" babel-preset-current-node-syntax "^1.0.0" -babel-preset-medusa-package@1.1.17: - version "1.1.17" - resolved "https://registry.yarnpkg.com/babel-preset-medusa-package/-/babel-preset-medusa-package-1.1.17.tgz#1c2d11c8891fb97693c3cb40f110faa80f6466be" - integrity sha512-cYkHr4Q5ZkOlz5lIqQEr6omw5l/KszL7vjicWGmJ0pj+2eAEi7gMtrDmoMEKhx2XbVSaT1zBxN/IzllVVP268w== +babel-preset-medusa-package@1.1.18-dev-1638295280349: + version "1.1.18-dev-1638295280349" + resolved "http://localhost:4873/babel-preset-medusa-package/-/babel-preset-medusa-package-1.1.18-dev-1638295280349.tgz#fa9b9b75642d40b0235f1fbc06f8bea1a166c600" + integrity sha512-hfj+GRAzaG8GY3tBbq7y+Hpcf4CkCp3/GsdbxWjJYdWirBOLgRKxaOip8A9mEtxPk8DEFQfsgMyyJnraRpVSZw== dependencies: "@babel/plugin-proposal-class-properties" "^7.12.1" "@babel/plugin-proposal-decorators" "^7.12.1" @@ -1932,6 +1959,7 @@ babel-preset-medusa-package@1.1.17: "@babel/plugin-transform-instanceof" "^7.12.1" "@babel/plugin-transform-runtime" "^7.12.1" "@babel/preset-env" "^7.12.7" + "@babel/preset-typescript" "^7.16.0" babel-plugin-transform-typescript-metadata "^0.3.1" core-js "^3.7.0" @@ -2281,6 +2309,11 @@ cjs-module-lexer@^0.6.0: resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" integrity sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw== +class-transformer@^0.5.1: + version "0.5.1" + resolved "http://localhost:4873/class-transformer/-/class-transformer-0.5.1.tgz#24147d5dffd2a6cea930a3250a677addf96ab336" + integrity sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw== + class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" @@ -2291,6 +2324,14 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" +class-validator@^0.13.1: + version "0.13.2" + resolved "http://localhost:4873/class-validator/-/class-validator-0.13.2.tgz#64b031e9f3f81a1e1dcd04a5d604734608b24143" + integrity sha512-yBUcQy07FPlGzUjoLuUfIOXzgynnQPPruyK1Ge2B74k9ROwnle1E+NxLWnUv5OLU8hA/qL5leAE9XnXq3byaBw== + dependencies: + libphonenumber-js "^1.9.43" + validator "^13.7.0" + clean-stack@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-3.0.1.tgz#155bf0b2221bf5f4fba89528d24c5953f17fe3a8" @@ -4927,6 +4968,11 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +libphonenumber-js@^1.9.43: + version "1.9.43" + resolved "http://localhost:4873/libphonenumber-js/-/libphonenumber-js-1.9.43.tgz#2371e4383e6780990381d5b900b8c22666221cbb" + integrity sha512-tNB87ZutAiAkl3DE/Bo0Mxqn/XZbNxhPg4v9bYBwQQW4dlhBGqXl1vtmPxeDWbrijzwOA9vRjOOFm5V9SK/W3w== + lines-and-columns@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" @@ -5089,33 +5135,25 @@ media-typer@0.3.0: resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= -medusa-core-utils@^0.1.27: - version "0.1.39" - resolved "https://registry.yarnpkg.com/medusa-core-utils/-/medusa-core-utils-0.1.39.tgz#d57816c9bd43f9a92883650c1e66add1665291df" - integrity sha512-R8+U1ile7if+nR6Cjh5exunx0ETV0OfkWUUBUpz1KmHSDv0V0CcvQqU9lcZesPFDEbu3Y2iEjsCqidVA4nG2nQ== - dependencies: - "@hapi/joi" "^16.1.8" - joi-objectid "^3.0.1" - -medusa-core-utils@^1.1.26: - version "1.1.26" - resolved "https://registry.yarnpkg.com/medusa-core-utils/-/medusa-core-utils-1.1.26.tgz#fa1f54402c76e6a3991b9d22ae1e9d7609c86e8f" - integrity sha512-9bwy5aIdKPNxzlJAGrUEt7I1ExQjFS7zcWEDg3D5xjUzcpvP0OeVvV3joP9gUNHFjfEp983jzsmVlt1/bz31UA== +medusa-core-utils@1.1.30-dev-1638295280349: + version "1.1.30-dev-1638295280349" + resolved "http://localhost:4873/medusa-core-utils/-/medusa-core-utils-1.1.30-dev-1638295280349.tgz#bead12ee83fa00a03dd208329260b73eaea2a019" + integrity sha512-i4SXOB5VARyYgDMAydfZXK8DHrHZUjad0ABsxOD4m1XYBGMLJfcBQFfOzAiipQDuX38cVAQUoVnPbM3fm1WLKQ== dependencies: joi "^17.3.0" joi-objectid "^3.0.1" -medusa-interfaces@1.1.27: - version "1.1.27" - resolved "https://registry.yarnpkg.com/medusa-interfaces/-/medusa-interfaces-1.1.27.tgz#fd5f5220dd752bcfd174e6eb5d072d731bd80966" - integrity sha512-dsQnsCdP2TQITOrHIZzyYyf4Lu3rW3AgeOzl6NmRWjf5A1KKP5cJcyIg4Te9xOtLUKeP70BvF+fAk7LechtE+Q== +medusa-interfaces@1.1.31-dev-1638295280349: + version "1.1.31-dev-1638295280349" + resolved "http://localhost:4873/medusa-interfaces/-/medusa-interfaces-1.1.31-dev-1638295280349.tgz#978e0215a8b232e375a6ec512dc1e3e65a1d6de7" + integrity sha512-Qs9qYTtYfGTJfDrjRFvQiSTNsQNjpAfdMlNXxeH/HAXZxk3/bYHdf51c8FNhpoMX/zHA150B4yPDksHf0B1Eeg== dependencies: - medusa-core-utils "^1.1.26" + medusa-core-utils "1.1.30-dev-1638295280349" -medusa-telemetry@^0.0.10: - version "0.0.10" - resolved "https://registry.yarnpkg.com/medusa-telemetry/-/medusa-telemetry-0.0.10.tgz#86fb85048b9e41d0d91f156d590dd519a872077d" - integrity sha512-kskCT4YjCvv8C38qF+zJY9C/fARtHH5cpl2WlxHblBAQY3KXCGBSXLlsgPRT28VIkuDQOZGDjHLg3o+w2XqNPw== +medusa-telemetry@0.0.10-dev-1638295280349: + version "0.0.10-dev-1638295280349" + resolved "http://localhost:4873/medusa-telemetry/-/medusa-telemetry-0.0.10-dev-1638295280349.tgz#00c397861ec79453733865a20ca4fc5e37b4152f" + integrity sha512-qRdXd5DcGv0eFZJ70Ns79sJL13xKOXd8trVQEkUjPAWTcaxtmb1tCw8vXQAoWXycq+9kb7KS3zcTdBnI+ML2Bw== dependencies: axios "^0.21.1" axios-retry "^3.1.9" @@ -5127,13 +5165,13 @@ medusa-telemetry@^0.0.10: remove-trailing-slash "^0.1.1" uuid "^8.3.2" -medusa-test-utils@^1.1.29: - version "1.1.29" - resolved "https://registry.yarnpkg.com/medusa-test-utils/-/medusa-test-utils-1.1.29.tgz#554ff0c770922be44c2bbc69929881dca371ce80" - integrity sha512-+cNjH6d8sBJjsCohWl/rTPzan8vaDCjyaiNXwbBkrObXdsW511bLcLx5vBj2KgQq7gcdJfVp3ybzB6t1AHGm7g== +medusa-test-utils@1.1.33-dev-1638295280349: + version "1.1.33-dev-1638295280349" + resolved "http://localhost:4873/medusa-test-utils/-/medusa-test-utils-1.1.33-dev-1638295280349.tgz#61dc97815f02a3a0756ce5ac4f8cdaace7cd8a92" + integrity sha512-CqKubpbybtCt/SVjdbwM44KA2b9jFH8NMfmjTy/FJnuWqus5GWi6nBYhBMJM609uuSbGXCv8HmhI4B5fg4Cy8A== dependencies: "@babel/plugin-transform-classes" "^7.9.5" - medusa-core-utils "^1.1.26" + medusa-core-utils "1.1.30-dev-1638295280349" randomatic "^3.1.1" merge-descriptors@1.0.1: @@ -7439,6 +7477,11 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" +validator@^13.7.0: + version "13.7.0" + resolved "http://localhost:4873/validator/-/validator-13.7.0.tgz#4f9658ba13ba8f3d82ee881d3516489ea85c0857" + integrity sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw== + vary@^1, vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" diff --git a/packages/medusa/src/api/routes/store/carts/__tests__/create-cart.js b/packages/medusa/src/api/routes/store/carts/__tests__/create-cart.js index 65a0b2f39c..0fa4ddc619 100644 --- a/packages/medusa/src/api/routes/store/carts/__tests__/create-cart.js +++ b/packages/medusa/src/api/routes/store/carts/__tests__/create-cart.js @@ -98,19 +98,17 @@ describe("POST /store/carts", () => { }) it("calls line item generate", () => { - expect(LineItemServiceMock.create).toHaveBeenCalledTimes(2) - expect(LineItemServiceMock.create).toHaveBeenCalledWith({ - variant_id: IdMap.getId("testVariant"), - quantity: 3, - region_id: IdMap.getId("testRegion"), - cart_id: IdMap.getId("regionCart"), - }) - expect(LineItemServiceMock.create).toHaveBeenCalledWith({ - variant_id: IdMap.getId("testVariant1"), - quantity: 1, - region_id: IdMap.getId("testRegion"), - cart_id: IdMap.getId("regionCart"), - }) + expect(LineItemServiceMock.generate).toHaveBeenCalledWith( + IdMap.getId("testVariant"), + IdMap.getId("testRegion"), + 3 + ) + expect(LineItemServiceMock.generate).toHaveBeenCalledWith( + IdMap.getId("testVariant1"), + IdMap.getId("testRegion"), + 1 + ) + expect(CartServiceMock.addLineItem).toHaveBeenCalledTimes(2) }) it("returns cart", () => { diff --git a/packages/medusa/src/api/routes/store/carts/create-cart.ts b/packages/medusa/src/api/routes/store/carts/create-cart.ts index edd8905a37..cb0c614365 100644 --- a/packages/medusa/src/api/routes/store/carts/create-cart.ts +++ b/packages/medusa/src/api/routes/store/carts/create-cart.ts @@ -117,17 +117,17 @@ export default async (req, res) => { country_code: validated.country_code.toLowerCase(), } } - + let cart = await cartService.withTransaction(manager).create(toCreate) if (validated.items) { await Promise.all( - validated.items.map(async (i) => { - await lineItemService.withTransaction(manager).create({ - cart_id: cart.id, - variant_id: i.variant_id, - quantity: i.quantity, - region_id: validated.region_id, - }) + validated.items.map(async i => { + const lineItem = await lineItemService + .withTransaction(manager) + .generate(i.variant_id, regionId, i.quantity) + await cartService + .withTransaction(manager) + .addLineItem(cart.id, lineItem) }) ) }