From c043b579883a4fb0418f0e787e574d4637c3b6f2 Mon Sep 17 00:00:00 2001 From: LucasEmanoel0 Date: Thu, 15 Aug 2024 17:15:30 -0300 Subject: [PATCH 01/23] chore: add postgres_db --- docker-compose.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/docker-compose.yml b/docker-compose.yml index b08dfbb..42f5e49 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -11,6 +11,7 @@ services: environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres + POSTGRES_DB: postgres networks: - projeto-final From bedada211eba6ae26c1c8b24244bff41a7d50cb1 Mon Sep 17 00:00:00 2001 From: LucasEmanoel0 Date: Thu, 15 Aug 2024 17:16:27 -0300 Subject: [PATCH 02/23] chore: add biblioteca supertest --- package-lock.json | 250 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 246 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index ef1eb3d..c77207e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,8 @@ "cors": "^2.8.5", "express": "^4.19.2", "helmet": "^7.1.0", - "pg": "^8.12.0" + "pg": "^8.12.0", + "supertest": "^7.0.0" }, "devDependencies": { "@commitlint/config-angular": "^19.3.0", @@ -23,6 +24,7 @@ "@semantic-release/release-notes-generator": "^14.0.1", "@types/cors": "^2.8.17", "@types/express": "^4.17.21", + "@types/pg": "^8.11.6", "commitlint": "^19.3.0", "husky": "^9.1.4", "jest": "^29.7.0", @@ -2873,6 +2875,74 @@ "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", "dev": true }, + "node_modules/@types/pg": { + "version": "8.11.6", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.11.6.tgz", + "integrity": "sha512-/2WmmBXHLsfRqzfHW7BNZ8SbYzE8OSk7i3WjFYvfgRHj7S1xj+16Je5fUKv3lVdVzk/zn9TXOqf+avFCFIE0yQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "pg-protocol": "*", + "pg-types": "^4.0.1" + } + }, + "node_modules/@types/pg/node_modules/pg-types": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-4.0.2.tgz", + "integrity": "sha512-cRL3JpS3lKMGsKaWndugWQoLOCoP+Cic8oseVcbr0qhPzYD5DWXK+RZ9LY9wxRf7RQia4SCwQlXk0q6FCPrVng==", + "dev": true, + "dependencies": { + "pg-int8": "1.0.1", + "pg-numeric": "1.0.2", + "postgres-array": "~3.0.1", + "postgres-bytea": "~3.0.0", + "postgres-date": "~2.1.0", + "postgres-interval": "^3.0.0", + "postgres-range": "^1.1.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@types/pg/node_modules/postgres-array": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-3.0.2.tgz", + "integrity": "sha512-6faShkdFugNQCLwucjPcY5ARoW1SlbnrZjmGl0IrrqewpvxvhSLHimCVzqeuULCbG0fQv7Dtk1yDbG3xv7Veog==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@types/pg/node_modules/postgres-bytea": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-3.0.0.tgz", + "integrity": "sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw==", + "dev": true, + "dependencies": { + "obuf": "~1.1.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/pg/node_modules/postgres-date": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-2.1.0.tgz", + "integrity": "sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@types/pg/node_modules/postgres-interval": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-3.0.0.tgz", + "integrity": "sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/@types/qs": { "version": "6.9.15", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", @@ -3090,6 +3160,16 @@ "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", "dev": true }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, "node_modules/babel-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", @@ -3594,6 +3674,17 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/commitlint": { "version": "19.3.0", "resolved": "https://registry.npmjs.org/commitlint/-/commitlint-19.3.0.tgz", @@ -3620,6 +3711,14 @@ "dot-prop": "^5.1.0" } }, + "node_modules/component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -3759,6 +3858,11 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, + "node_modules/cookiejar": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==" + }, "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", @@ -3966,6 +4070,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -3992,6 +4104,15 @@ "node": ">=8" } }, + "node_modules/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, "node_modules/diff-sequences": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", @@ -4446,6 +4567,11 @@ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + }, "node_modules/fast-uri": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", @@ -4559,6 +4685,32 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/formidable": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.1.tgz", + "integrity": "sha512-WJWKelbRHN41m5dumb0/k8TeAx7Id/y3a+Z7QfhxP/htI9Js5zYaEDtG8uMgG0vM0lOlqnmjE99/kfpOYi/0Og==", + "dependencies": { + "dezalgo": "^1.0.4", + "hexoid": "^1.0.0", + "once": "^1.4.0" + }, + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -4936,6 +5088,14 @@ "node": ">=16.0.0" } }, + "node_modules/hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", + "engines": { + "node": ">=8" + } + }, "node_modules/highlight.js": { "version": "10.7.3", "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", @@ -9620,6 +9780,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -9635,7 +9801,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "dependencies": { "wrappy": "1" } @@ -9914,6 +10079,15 @@ "node": ">=4.0.0" } }, + "node_modules/pg-numeric": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pg-numeric/-/pg-numeric-1.0.2.tgz", + "integrity": "sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/pg-pool": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.2.tgz", @@ -10174,6 +10348,12 @@ "node": ">=0.10.0" } }, + "node_modules/postgres-range": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/postgres-range/-/postgres-range-1.1.4.tgz", + "integrity": "sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w==", + "dev": true + }, "node_modules/pretty-format": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", @@ -11310,6 +11490,69 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/superagent": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-9.0.2.tgz", + "integrity": "sha512-xuW7dzkUpcJq7QnhOsnNUgtYp3xRwpt2F7abdRYIpCsAt0hhUqia0EdxyXZQQpNmGtsCzYHryaKSV3q3GJnq7w==", + "dependencies": { + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.4", + "debug": "^4.3.4", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.0", + "formidable": "^3.5.1", + "methods": "^1.1.2", + "mime": "2.6.0", + "qs": "^6.11.0" + }, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/superagent/node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/superagent/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/superagent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/supertest": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-7.0.0.tgz", + "integrity": "sha512-qlsr7fIC0lSddmA3tzojvzubYxvlGtzumcdHgPwbFWMISQwL22MhM2Y3LNt+6w9Yyx7559VW5ab70dgphm8qQA==", + "dependencies": { + "methods": "^1.1.2", + "superagent": "^9.0.1" + }, + "engines": { + "node": ">=14.18.0" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -11782,8 +12025,7 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/write-file-atomic": { "version": "4.0.2", From 635fad3cf94a82da419a2b3032cc7c0b99d0f4e6 Mon Sep 17 00:00:00 2001 From: LucasEmanoel0 Date: Thu, 15 Aug 2024 17:17:13 -0300 Subject: [PATCH 03/23] chore: add post controller --- src/controllers/post.controller.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 src/controllers/post.controller.js diff --git a/src/controllers/post.controller.js b/src/controllers/post.controller.js new file mode 100644 index 0000000..271b271 --- /dev/null +++ b/src/controllers/post.controller.js @@ -0,0 +1,20 @@ +import pool from '../database/conection.js' + +export default { + // @ts-ignore + createPost:async(req,res)=>{ + // @ts-ignore + let {title,body,date} = req.body + try { + let post = await pool.query('INSERT INTO posts (title,body,created_at) VALUES($1,$2,$3)',[title,body,date]) + res.status(201).json({message:"201 : post criado com sucesso"}) + } catch (error) { + console.error(error) + res.status(500).json({message:"500" + error}) + + } + + + + } +} \ No newline at end of file From 807e872164872bde4c5726958cd6a61f04d27084 Mon Sep 17 00:00:00 2001 From: LucasEmanoel0 Date: Thu, 15 Aug 2024 17:17:40 -0300 Subject: [PATCH 04/23] chore: add conexao com bd --- src/database/conection.js | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/database/conection.js diff --git a/src/database/conection.js b/src/database/conection.js new file mode 100644 index 0000000..4363a57 --- /dev/null +++ b/src/database/conection.js @@ -0,0 +1,11 @@ +import pg from 'pg' +const {Pool} = pg + +let pool = new Pool({ + database: 'postgres', + user: 'postgres', + password: 'postgres', + port: 5432, +}) + +export default pool \ No newline at end of file From 0fb94eedc3b9216ea96b8a94622999daa48c798e Mon Sep 17 00:00:00 2001 From: LucasEmanoel0 Date: Thu, 15 Aug 2024 17:17:57 -0300 Subject: [PATCH 05/23] chore: add routa post --- src/routes/routes.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/routes/routes.js b/src/routes/routes.js index a9ffe6c..632b082 100644 --- a/src/routes/routes.js +++ b/src/routes/routes.js @@ -1,7 +1,10 @@ import { Router } from "express"; +import postController from '../controllers/post.controller.js'; const router = Router() +router.post('/createpost', postController.createPost) + export default router \ No newline at end of file From 6750323d21d1cf69b367ba597aaf709838c2455c Mon Sep 17 00:00:00 2001 From: LucasEmanoel0 Date: Thu, 15 Aug 2024 17:18:22 -0300 Subject: [PATCH 06/23] chore: add test rota POST createpost --- src/test/post.test.js | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 src/test/post.test.js diff --git a/src/test/post.test.js b/src/test/post.test.js new file mode 100644 index 0000000..5bd26de --- /dev/null +++ b/src/test/post.test.js @@ -0,0 +1,27 @@ +import supertest from "supertest"; +import app from "../index.js"; + + +describe("POST /post", () => { + it("criando dados no bd", async () => { + let post = { + title: "davi", + body: "lucasemanoel", + date:"2024-08-15 13:45:00" + }; + await supertest(app) + .post("/createpost") + .send(post) + .expect(201) + .expect((res) => { + try { + let { message } = res.body; + expect(message).toBe("post criado com sucesso"); + } catch (error) { + throw new Error(`error ${res} + ${error}`); + } + }); + }); + + }); \ No newline at end of file From e415521dfd41cede8df5007aee7a3b55bbd4eefc Mon Sep 17 00:00:00 2001 From: LucasEmanoel0 Date: Thu, 15 Aug 2024 17:18:48 -0300 Subject: [PATCH 07/23] chore: add biblioteca supertest --- package.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 7c8327b..8004e39 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,8 @@ "cors": "^2.8.5", "express": "^4.19.2", "helmet": "^7.1.0", - "pg": "^8.12.0" + "pg": "^8.12.0", + "supertest": "^7.0.0" }, "devDependencies": { "@commitlint/config-angular": "^19.3.0", @@ -34,6 +35,7 @@ "@semantic-release/release-notes-generator": "^14.0.1", "@types/cors": "^2.8.17", "@types/express": "^4.17.21", + "@types/pg": "^8.11.6", "commitlint": "^19.3.0", "husky": "^9.1.4", "jest": "^29.7.0", From d14295d119b1250befc7e393e1c5749229cb4174 Mon Sep 17 00:00:00 2001 From: LucasEmanoel0 Date: Sat, 17 Aug 2024 20:06:52 -0300 Subject: [PATCH 08/23] chore: add test criando dados e faltando dados --- src/test/post.test.js | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/src/test/post.test.js b/src/test/post.test.js index 5bd26de..166ebae 100644 --- a/src/test/post.test.js +++ b/src/test/post.test.js @@ -1,10 +1,14 @@ +// @ts-ignore import supertest from "supertest"; import app from "../index.js"; +// @ts-ignore describe("POST /post", () => { - it("criando dados no bd", async () => { + // @ts-ignore + it("201:post criado com sucesso", async () => { let post = { + user_id:2, title: "davi", body: "lucasemanoel", date:"2024-08-15 13:45:00" @@ -13,15 +17,41 @@ describe("POST /post", () => { .post("/createpost") .send(post) .expect(201) + // @ts-ignore .expect((res) => { try { let { message } = res.body; - expect(message).toBe("post criado com sucesso"); + // @ts-ignore + expect(message).toBe("201 : post criado com sucesso"); } catch (error) { throw new Error(`error ${res} ${error}`); } }); }); + + // @ts-ignore + it("400:faltando dados",async ()=>{ + let post = { + user_id:2, + title: "", + body: "lucasemanoel", + date:"2024-08-15 13:45:00" + }; + await supertest(app) + .post("/createpost") + .send(post) + .expect(400) + // @ts-ignore + .expect((res) => { + let { message } = res.body; + // @ts-ignore + expect(message).toBe("Preencha todos os dados"); + }); + + + }) + + }); \ No newline at end of file From 6ee3a7673e5f98b206f3cd3824a2ad358058da8f Mon Sep 17 00:00:00 2001 From: LucasEmanoel0 Date: Sat, 17 Aug 2024 20:07:21 -0300 Subject: [PATCH 09/23] chore: add user_id --- src/controllers/post.controller.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/controllers/post.controller.js b/src/controllers/post.controller.js index 271b271..50c764b 100644 --- a/src/controllers/post.controller.js +++ b/src/controllers/post.controller.js @@ -4,9 +4,12 @@ export default { // @ts-ignore createPost:async(req,res)=>{ // @ts-ignore - let {title,body,date} = req.body + let {user_id,title,body,date} = req.body + if(!user_id||!title||!body){ + res.status(400).json({message:"400 : preencha todos os dados"}) + } try { - let post = await pool.query('INSERT INTO posts (title,body,created_at) VALUES($1,$2,$3)',[title,body,date]) + let post = await pool.query('INSERT INTO posts (title,body,user_id,created_at) VALUES($1,$2,$3,$4)',[title,body,user_id,date]) res.status(201).json({message:"201 : post criado com sucesso"}) } catch (error) { console.error(error) From 6e5f2df64ffcb5f53e323da8af731be701c6cf03 Mon Sep 17 00:00:00 2001 From: Pablo Eduardo <79818595+heyitsmepablo@users.noreply.github.com> Date: Sun, 18 Aug 2024 14:45:01 -0300 Subject: [PATCH 10/23] ci: implementando o novo workflow para testes unitarios --- .github/workflows/ci.yml | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6e84c5a..e2d6234 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,6 +1,14 @@ name: Testes Unitarios on: [push, pull_request] +env: + POSTGRES_USER: ${{vars.POSTGRES_USER}} + POSTGRES_PASSWORD: ${{vars.POSTGRES_PASSWORD}} + POSTGRES_HOST: ${{vars.POSTGRES_HOST}} + POSTGRES_PORT: ${{vars.POSTGRES_PORT}} + POSTGRES_DATABASE: ${{vars.POSTGRES_DATABASE}} + JWT_SECRET: ${{secrets.JWT_SECRET}} + jobs: CI: @@ -8,12 +16,27 @@ jobs: steps: - name: Verificação do Repositorio uses: actions/checkout@v4.1.7 + + - name: Iniciando Docker Compose + uses: hoverkraft-tech/compose-action@v2.0.1 + with: + services: database + compose-file: ./docker-compose.yml + - name: Configurando Node.Js uses: actions/setup-node@v4.0.3 with: node-version: '20' + - name: Instalando Dependencias run: npm clean-install + - name: Executando Testes run: npm run test - + env: + POSTGRES_HOST: ${{env.POSTGRES_HOST}} + POSTGRES_PORT: ${{env.POSTGRES_PORT}} + POSTGRES_USER: ${{env.POSTGRES_USER}} + POSTGRES_PASSWORD: ${{env.POSTGRES_PASSWORD}} + POSTGRES_DATABASE: ${{env.POSTGRES_DATABASE}} + JWT_SECRET: ${{env.JWT_SECRET}} From b3d16a9214e7df41e23630dd31124ee7236d00ce Mon Sep 17 00:00:00 2001 From: LucasEmanoel0 Date: Sun, 18 Aug 2024 15:07:56 -0300 Subject: [PATCH 11/23] chore: add return --- src/controllers/post.controller.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/post.controller.js b/src/controllers/post.controller.js index 50c764b..01658df 100644 --- a/src/controllers/post.controller.js +++ b/src/controllers/post.controller.js @@ -6,7 +6,7 @@ export default { // @ts-ignore let {user_id,title,body,date} = req.body if(!user_id||!title||!body){ - res.status(400).json({message:"400 : preencha todos os dados"}) + return res.status(400).json({message:"400 : preencha todos os dados"}) } try { let post = await pool.query('INSERT INTO posts (title,body,user_id,created_at) VALUES($1,$2,$3,$4)',[title,body,user_id,date]) From 764f4ba5081de1fe5d546bc7547c8978edea83d4 Mon Sep 17 00:00:00 2001 From: LucasEmanoel0 Date: Sun, 18 Aug 2024 15:08:18 -0300 Subject: [PATCH 12/23] chore: add 400 --- src/test/post.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/post.test.js b/src/test/post.test.js index 166ebae..2d72fe9 100644 --- a/src/test/post.test.js +++ b/src/test/post.test.js @@ -46,7 +46,7 @@ describe("POST /post", () => { .expect((res) => { let { message } = res.body; // @ts-ignore - expect(message).toBe("Preencha todos os dados"); + expect(message).toBe("400 : preencha todos os dados"); }); From 90daf10f0ccd0a3e8cf6f8790c42af4862ee05d9 Mon Sep 17 00:00:00 2001 From: LucasEmanoel0 Date: Sun, 18 Aug 2024 15:17:47 -0300 Subject: [PATCH 13/23] chore: add id serial --- docker/postgres/projeto-final-ddl.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/postgres/projeto-final-ddl.sql b/docker/postgres/projeto-final-ddl.sql index 19ac2a6..3a2523b 100644 --- a/docker/postgres/projeto-final-ddl.sql +++ b/docker/postgres/projeto-final-ddl.sql @@ -5,7 +5,7 @@ CREATE TABLE "follows" ( ); CREATE TABLE "users" ( - "id" integer PRIMARY KEY, + "id" serial PRIMARY KEY , "username" varchar NOT NULL, "password" varchar NOT NULL, "created_at" timestamp NOT NULL DEFAULT 'NOW()' From b27188e30b98532ccf59fad969412b8171d7c830 Mon Sep 17 00:00:00 2001 From: LucasEmanoel0 Date: Sun, 18 Aug 2024 15:20:44 -0300 Subject: [PATCH 14/23] chore: add id serial posts --- docker/postgres/projeto-final-ddl.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/postgres/projeto-final-ddl.sql b/docker/postgres/projeto-final-ddl.sql index 3a2523b..f8c8b21 100644 --- a/docker/postgres/projeto-final-ddl.sql +++ b/docker/postgres/projeto-final-ddl.sql @@ -12,7 +12,7 @@ CREATE TABLE "users" ( ); CREATE TABLE "posts" ( - "id" integer PRIMARY KEY NOT NULL, + "id" serial PRIMARY KEY NOT NULL, "title" varchar NOT NULL, "body" text NOT NULL, "user_id" integer NOT NULL, From 735bf177af73d96db62e25db990aca694d2e567b Mon Sep 17 00:00:00 2001 From: LucasEmanoel0 Date: Sun, 18 Aug 2024 15:29:46 -0300 Subject: [PATCH 15/23] chore: add user na tabela users --- src/test/post.test.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/test/post.test.js b/src/test/post.test.js index 2d72fe9..0b80bb6 100644 --- a/src/test/post.test.js +++ b/src/test/post.test.js @@ -1,14 +1,17 @@ // @ts-ignore import supertest from "supertest"; import app from "../index.js"; +import pool from "../database/conection.js"; // @ts-ignore describe("POST /post", () => { + // @ts-ignore it("201:post criado com sucesso", async () => { + let user = await pool.query('INSERT INTO users(username,password,created_at) VALUES (lucas,lucas,NOW())') let post = { - user_id:2, + user_id:user.rows[0].id, title: "davi", body: "lucasemanoel", date:"2024-08-15 13:45:00" @@ -32,6 +35,7 @@ describe("POST /post", () => { // @ts-ignore it("400:faltando dados",async ()=>{ + let post = { user_id:2, title: "", From 3df879ad972cf270e1d6a407a0caa7a3d229a30f Mon Sep 17 00:00:00 2001 From: LucasEmanoel0 Date: Sun, 18 Aug 2024 15:35:06 -0300 Subject: [PATCH 16/23] chore: correcoes de bug --- src/test/post.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/post.test.js b/src/test/post.test.js index 0b80bb6..2c720d1 100644 --- a/src/test/post.test.js +++ b/src/test/post.test.js @@ -9,7 +9,7 @@ describe("POST /post", () => { // @ts-ignore it("201:post criado com sucesso", async () => { - let user = await pool.query('INSERT INTO users(username,password,created_at) VALUES (lucas,lucas,NOW())') + let user = await pool.query('INSERT INTO users (username,password,created_at) VALUES (\'lucas\',\'lucas\',NOW())') let post = { user_id:user.rows[0].id, title: "davi", From 598ce643099809893888701debbc80ddb0d45a97 Mon Sep 17 00:00:00 2001 From: LucasEmanoel0 Date: Sun, 18 Aug 2024 15:37:08 -0300 Subject: [PATCH 17/23] feat: criacao de post --- src/test/post.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/post.test.js b/src/test/post.test.js index 2c720d1..7e2e2f1 100644 --- a/src/test/post.test.js +++ b/src/test/post.test.js @@ -9,7 +9,7 @@ describe("POST /post", () => { // @ts-ignore it("201:post criado com sucesso", async () => { - let user = await pool.query('INSERT INTO users (username,password,created_at) VALUES (\'lucas\',\'lucas\',NOW())') + let user = await pool.query('INSERT INTO users (username,password,created_at) VALUES (\'lucas\',\'lucas\',NOW()) RETURNING *') let post = { user_id:user.rows[0].id, title: "davi", From 4ecc20e3947b39d5fbd6959831b0dde6d4e46878 Mon Sep 17 00:00:00 2001 From: LucasEmanoel0 Date: Fri, 23 Aug 2024 20:25:20 -0300 Subject: [PATCH 18/23] chore: add condicao user_id ser invalido --- src/controllers/post.controller.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/controllers/post.controller.js b/src/controllers/post.controller.js index 01658df..6d50532 100644 --- a/src/controllers/post.controller.js +++ b/src/controllers/post.controller.js @@ -8,12 +8,16 @@ export default { if(!user_id||!title||!body){ return res.status(400).json({message:"400 : preencha todos os dados"}) } + if(user_id<=0){ + return res.status(400).json({message:"400 : id invalido"}) + } + try { - let post = await pool.query('INSERT INTO posts (title,body,user_id,created_at) VALUES($1,$2,$3,$4)',[title,body,user_id,date]) + await pool.query('INSERT INTO posts (title,body,user_id,created_at) VALUES($1,$2,$3,NOW())',[title,body,user_id]) res.status(201).json({message:"201 : post criado com sucesso"}) } catch (error) { console.error(error) - res.status(500).json({message:"500" + error}) + res.status(500).json({message:"500:post nao criado"}) } From 53684c6d5682e725d8c87dd428a5f23f743c14be Mon Sep 17 00:00:00 2001 From: LucasEmanoel0 Date: Fri, 23 Aug 2024 20:27:18 -0300 Subject: [PATCH 19/23] chore: rota mudada --- src/routes/routes.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/routes.js b/src/routes/routes.js index 632b082..0617d23 100644 --- a/src/routes/routes.js +++ b/src/routes/routes.js @@ -3,7 +3,7 @@ import postController from '../controllers/post.controller.js'; const router = Router() -router.post('/createpost', postController.createPost) +router.post('/post', postController.createPost) From 5f09cbaa1d9c05f14e524c6151ebff1e9111f1e8 Mon Sep 17 00:00:00 2001 From: LucasEmanoel0 Date: Fri, 23 Aug 2024 20:27:31 -0300 Subject: [PATCH 20/23] chore: add tests --- src/test/post.test.js | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/src/test/post.test.js b/src/test/post.test.js index 7e2e2f1..ddfac9d 100644 --- a/src/test/post.test.js +++ b/src/test/post.test.js @@ -6,7 +6,6 @@ import pool from "../database/conection.js"; // @ts-ignore describe("POST /post", () => { - // @ts-ignore it("201:post criado com sucesso", async () => { let user = await pool.query('INSERT INTO users (username,password,created_at) VALUES (\'lucas\',\'lucas\',NOW()) RETURNING *') @@ -14,10 +13,10 @@ describe("POST /post", () => { user_id:user.rows[0].id, title: "davi", body: "lucasemanoel", - date:"2024-08-15 13:45:00" }; + console.log(post) await supertest(app) - .post("/createpost") + .post("/post") .send(post) .expect(201) // @ts-ignore @@ -35,7 +34,6 @@ describe("POST /post", () => { // @ts-ignore it("400:faltando dados",async ()=>{ - let post = { user_id:2, title: "", @@ -43,7 +41,7 @@ describe("POST /post", () => { date:"2024-08-15 13:45:00" }; await supertest(app) - .post("/createpost") + .post("/post") .send(post) .expect(400) // @ts-ignore @@ -56,6 +54,26 @@ describe("POST /post", () => { }) + it("400:id invalido",async ()=>{ + let post = { + user_id:-1, + title: "ola", + body: "lucasemanoel", + }; + await supertest(app) + .post("/post") + .send(post) + .expect(400) + // @ts-ignore + .expect((res) => { + let { message } = res.body; + // @ts-ignore + expect(message).toBe("400 : id invalido"); + }); + + + }) + }); \ No newline at end of file From 5342b2ed5bc8adddb99f2c91e66515a5a2343f57 Mon Sep 17 00:00:00 2001 From: LucasEmanoel0 Date: Fri, 23 Aug 2024 20:32:39 -0300 Subject: [PATCH 21/23] chore: mudado de post para posts --- src/routes/routes.js | 2 +- src/test/post.test.js | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/routes/routes.js b/src/routes/routes.js index 0617d23..0d9bd47 100644 --- a/src/routes/routes.js +++ b/src/routes/routes.js @@ -3,7 +3,7 @@ import postController from '../controllers/post.controller.js'; const router = Router() -router.post('/post', postController.createPost) +router.post('/posts', postController.createPost) diff --git a/src/test/post.test.js b/src/test/post.test.js index ddfac9d..872b02c 100644 --- a/src/test/post.test.js +++ b/src/test/post.test.js @@ -16,7 +16,7 @@ describe("POST /post", () => { }; console.log(post) await supertest(app) - .post("/post") + .post("/posts") .send(post) .expect(201) // @ts-ignore @@ -41,7 +41,7 @@ describe("POST /post", () => { date:"2024-08-15 13:45:00" }; await supertest(app) - .post("/post") + .post("/posts") .send(post) .expect(400) // @ts-ignore @@ -61,7 +61,7 @@ describe("POST /post", () => { body: "lucasemanoel", }; await supertest(app) - .post("/post") + .post("/posts") .send(post) .expect(400) // @ts-ignore From 99cf123b51e49564e586536eb429bb7ac06d3a4e Mon Sep 17 00:00:00 2001 From: LucasEmanoel0 Date: Fri, 23 Aug 2024 20:33:22 -0300 Subject: [PATCH 22/23] chore: tirado o date --- src/controllers/post.controller.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/post.controller.js b/src/controllers/post.controller.js index 6d50532..4410783 100644 --- a/src/controllers/post.controller.js +++ b/src/controllers/post.controller.js @@ -4,7 +4,7 @@ export default { // @ts-ignore createPost:async(req,res)=>{ // @ts-ignore - let {user_id,title,body,date} = req.body + let {user_id,title,body} = req.body if(!user_id||!title||!body){ return res.status(400).json({message:"400 : preencha todos os dados"}) } From 7ef98ce15bc6e511be52b2053d371fa029846cc5 Mon Sep 17 00:00:00 2001 From: Eduardo Henrique Freire Machado <62185704+ed-henrique@users.noreply.github.com> Date: Sun, 25 Aug 2024 14:10:39 -0400 Subject: [PATCH 23/23] Update post.test.js --- src/test/post.test.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/post.test.js b/src/test/post.test.js index 872b02c..be09d91 100644 --- a/src/test/post.test.js +++ b/src/test/post.test.js @@ -5,7 +5,7 @@ import pool from "../database/conection.js"; // @ts-ignore -describe("POST /post", () => { +describe("POST /posts", () => { // @ts-ignore it("201:post criado com sucesso", async () => { let user = await pool.query('INSERT INTO users (username,password,created_at) VALUES (\'lucas\',\'lucas\',NOW()) RETURNING *') @@ -76,4 +76,4 @@ describe("POST /post", () => { - }); \ No newline at end of file + });