From 61982c62754c772ff1a1750852593a1d4013f50f Mon Sep 17 00:00:00 2001 From: BillieFaiqul <2141720051@student.polinema.ac.id> Date: Fri, 23 May 2025 09:19:35 +0700 Subject: [PATCH] fixing --- .../NodeJS/Student/SubmissionController.php | 2 +- app/Jobs/NodeJS/UnzipZipFiles.php | 8 +- .../tests/api/testA01.test.js | 240 ----------- .../tests/api/testA01.test.js:Zone.Identifier | 0 .../tests/api/testA02.test.js | 306 -------------- .../tests/api/testA02.test.js:Zone.Identifier | 0 .../tests/api/testA03.test.js | 243 ----------- .../tests/api/testA03.test.js:Zone.Identifier | 0 .../tests/api/testA04.test.js | 153 ------- .../tests/api/testA04.test.js:Zone.Identifier | 0 .../tests/api/testA05.test.js | 141 ------- .../tests/api/testA05.test.js:Zone.Identifier | 0 .../tests/web/images/create-product-page.png | Bin 33408 -> 0 bytes .../create-product-page.png:Zone.Identifier | 0 .../tests/web/images/error-notFound-page.png | Bin 11910 -> 0 bytes .../error-notFound-page.png:Zone.Identifier | 0 .../tests/web/images/index-page.png | Bin 65382 -> 0 bytes .../web/images/index-page.png:Zone.Identifier | 0 .../web/images/no-products-found-page.png | Bin 36459 -> 0 bytes ...no-products-found-page.png:Zone.Identifier | 0 .../web/images/not-found-product-page.png | Bin 13138 -> 0 bytes ...not-found-product-page.png:Zone.Identifier | 0 .../tests/web/images/product-details-page.png | Bin 37807 -> 0 bytes .../product-details-page.png:Zone.Identifier | 0 .../tests/web/images/products-table-page.png | Bin 119703 -> 0 bytes .../products-table-page.png:Zone.Identifier | 0 .../tests/web/images/update-product-page.png | Bin 31691 -> 0 bytes .../update-product-page.png:Zone.Identifier | 0 .../tests/web/testA01.test.js | 209 --------- .../tests/web/testA01.test.js:Zone.Identifier | 0 .../tests/web/testA02.test.js | 399 ------------------ .../tests/web/testA02.test.js:Zone.Identifier | 0 .../tests/web/testA03.test.js | 246 ----------- .../tests/web/testA03.test.js:Zone.Identifier | 0 .../tests/web/testA04.test.js | 342 --------------- .../tests/web/testA04.test.js:Zone.Identifier | 0 .../tests/web/testA05.test.js | 141 ------- .../tests/web/testA05.test.js:Zone.Identifier | 0 .../files/package.json | 0 .../guides/Guide ASP01.pdf} | Bin .../guides/Guide ASP02.pdf} | Bin .../guides/Guide ASP03.pdf} | Bin .../guides/Guide ASP04.pdf} | Bin .../guides/Guide ASP05.pdf} | Bin .../images/asynchronous-programming.png} | Bin .../supplements/.env.example | 0 .../supplements/.gitignore | 0 .../tests-backup/praktikum1.test.js | 166 ++++++++ .../praktikum2Integration.test.js | 68 +++ .../tests-backup/praktikum2Unit.test.js | 89 ++++ .../praktikum3Integration.test.js | 252 +++++++++++ .../tests-backup/praktikum3Unit.test.js | 307 ++++++++++++++ .../integration/modul1-integration.test.js | 34 ++ .../integration/modul2-integration.test.js | 128 ++++++ .../integration/modul3-integration.test.js | 177 ++++++++ .../integration/modul4-integration.test.js | 165 ++++++++ .../integration/modul5-integration.test.js | 94 +++++ .../tests-backup2/unit/modul1-unit.test.js | 103 +++++ .../tests-backup2/unit/modul2-unit.test.js | 155 +++++++ .../tests-backup2/unit/modul3-unit.test.js | 242 +++++++++++ .../tests-backup2/unit/modul4-unit.test.js | 236 +++++++++++ .../tests-backup2/unit/modul5-unit.test.js | 142 +++++++ .../integration/modul1-integration.test.js | 34 ++ .../integration/modul2-integration.test.js | 130 ++++++ .../integration/modul3-integration.test.js | 180 ++++++++ .../integration/modul4-integration.test.js | 171 ++++++++ .../integration/modul5-integration.test.js | 97 +++++ .../tests/unit/modul1-unit.test.js | 104 +++++ .../tests/unit/modul2-unit.test.js | 156 +++++++ .../tests/unit/modul3-unit.test.js | 256 +++++++++++ .../tests/unit/modul4-unit.test.js | 227 ++++++++++ .../tests/unit/modul5-unit.test.js | 143 +++++++ .../zips/guides.zip | Bin .../zips/supplements.zip | Bin .../views/nodejs/dashboard/index.blade.php | 2 +- .../partials/submissions/form.blade.php | 2 +- .../views/nodejs/projects/show.blade.php | 2 +- .../views/nodejs/rank-teacher/index.blade.php | 2 +- .../views/nodejs/submissions/index.blade.php | 2 +- 79 files changed, 3866 insertions(+), 2430 deletions(-) delete mode 100644 public/assets/nodejs/projects/asycnchronous-programming/tests/api/testA01.test.js delete mode 100644 public/assets/nodejs/projects/asycnchronous-programming/tests/api/testA01.test.js:Zone.Identifier delete mode 100644 public/assets/nodejs/projects/asycnchronous-programming/tests/api/testA02.test.js delete mode 100644 public/assets/nodejs/projects/asycnchronous-programming/tests/api/testA02.test.js:Zone.Identifier delete mode 100644 public/assets/nodejs/projects/asycnchronous-programming/tests/api/testA03.test.js delete mode 100644 public/assets/nodejs/projects/asycnchronous-programming/tests/api/testA03.test.js:Zone.Identifier delete mode 100644 public/assets/nodejs/projects/asycnchronous-programming/tests/api/testA04.test.js delete mode 100644 public/assets/nodejs/projects/asycnchronous-programming/tests/api/testA04.test.js:Zone.Identifier delete mode 100644 public/assets/nodejs/projects/asycnchronous-programming/tests/api/testA05.test.js delete mode 100644 public/assets/nodejs/projects/asycnchronous-programming/tests/api/testA05.test.js:Zone.Identifier delete mode 100644 public/assets/nodejs/projects/asycnchronous-programming/tests/web/images/create-product-page.png delete mode 100644 public/assets/nodejs/projects/asycnchronous-programming/tests/web/images/create-product-page.png:Zone.Identifier delete mode 100644 public/assets/nodejs/projects/asycnchronous-programming/tests/web/images/error-notFound-page.png delete mode 100644 public/assets/nodejs/projects/asycnchronous-programming/tests/web/images/error-notFound-page.png:Zone.Identifier delete mode 100644 public/assets/nodejs/projects/asycnchronous-programming/tests/web/images/index-page.png delete mode 100644 public/assets/nodejs/projects/asycnchronous-programming/tests/web/images/index-page.png:Zone.Identifier delete mode 100644 public/assets/nodejs/projects/asycnchronous-programming/tests/web/images/no-products-found-page.png delete mode 100644 public/assets/nodejs/projects/asycnchronous-programming/tests/web/images/no-products-found-page.png:Zone.Identifier delete mode 100644 public/assets/nodejs/projects/asycnchronous-programming/tests/web/images/not-found-product-page.png delete mode 100644 public/assets/nodejs/projects/asycnchronous-programming/tests/web/images/not-found-product-page.png:Zone.Identifier delete mode 100644 public/assets/nodejs/projects/asycnchronous-programming/tests/web/images/product-details-page.png delete mode 100644 public/assets/nodejs/projects/asycnchronous-programming/tests/web/images/product-details-page.png:Zone.Identifier delete mode 100644 public/assets/nodejs/projects/asycnchronous-programming/tests/web/images/products-table-page.png delete mode 100644 public/assets/nodejs/projects/asycnchronous-programming/tests/web/images/products-table-page.png:Zone.Identifier delete mode 100644 public/assets/nodejs/projects/asycnchronous-programming/tests/web/images/update-product-page.png delete mode 100644 public/assets/nodejs/projects/asycnchronous-programming/tests/web/images/update-product-page.png:Zone.Identifier delete mode 100644 public/assets/nodejs/projects/asycnchronous-programming/tests/web/testA01.test.js delete mode 100644 public/assets/nodejs/projects/asycnchronous-programming/tests/web/testA01.test.js:Zone.Identifier delete mode 100644 public/assets/nodejs/projects/asycnchronous-programming/tests/web/testA02.test.js delete mode 100644 public/assets/nodejs/projects/asycnchronous-programming/tests/web/testA02.test.js:Zone.Identifier delete mode 100644 public/assets/nodejs/projects/asycnchronous-programming/tests/web/testA03.test.js delete mode 100644 public/assets/nodejs/projects/asycnchronous-programming/tests/web/testA03.test.js:Zone.Identifier delete mode 100644 public/assets/nodejs/projects/asycnchronous-programming/tests/web/testA04.test.js delete mode 100644 public/assets/nodejs/projects/asycnchronous-programming/tests/web/testA04.test.js:Zone.Identifier delete mode 100644 public/assets/nodejs/projects/asycnchronous-programming/tests/web/testA05.test.js delete mode 100644 public/assets/nodejs/projects/asycnchronous-programming/tests/web/testA05.test.js:Zone.Identifier rename public/assets/nodejs/projects/{asycnchronous-programming => asynchronous-programming}/files/package.json (100%) rename public/assets/nodejs/projects/{asycnchronous-programming/guides/Guide ASP01.docx.pdf => asynchronous-programming/guides/Guide ASP01.pdf} (100%) rename public/assets/nodejs/projects/{asycnchronous-programming/guides/Guide ASP02.docx.pdf => asynchronous-programming/guides/Guide ASP02.pdf} (100%) rename public/assets/nodejs/projects/{asycnchronous-programming/guides/Guide ASP03.docx.pdf => asynchronous-programming/guides/Guide ASP03.pdf} (100%) rename public/assets/nodejs/projects/{asycnchronous-programming/guides/Guide ASP04.docx.pdf => asynchronous-programming/guides/Guide ASP04.pdf} (100%) rename public/assets/nodejs/projects/{asycnchronous-programming/guides/Guide ASP05.docx.pdf => asynchronous-programming/guides/Guide ASP05.pdf} (100%) rename public/assets/nodejs/projects/{asycnchronous-programming/images/asycnchronous-programming.png => asynchronous-programming/images/asynchronous-programming.png} (100%) rename public/assets/nodejs/projects/{asycnchronous-programming => asynchronous-programming}/supplements/.env.example (100%) rename public/assets/nodejs/projects/{asycnchronous-programming => asynchronous-programming}/supplements/.gitignore (100%) create mode 100644 public/assets/nodejs/projects/asynchronous-programming/tests-backup/praktikum1.test.js create mode 100644 public/assets/nodejs/projects/asynchronous-programming/tests-backup/praktikum2Integration.test.js create mode 100644 public/assets/nodejs/projects/asynchronous-programming/tests-backup/praktikum2Unit.test.js create mode 100644 public/assets/nodejs/projects/asynchronous-programming/tests-backup/praktikum3Integration.test.js create mode 100644 public/assets/nodejs/projects/asynchronous-programming/tests-backup/praktikum3Unit.test.js create mode 100644 public/assets/nodejs/projects/asynchronous-programming/tests-backup2/integration/modul1-integration.test.js create mode 100644 public/assets/nodejs/projects/asynchronous-programming/tests-backup2/integration/modul2-integration.test.js create mode 100644 public/assets/nodejs/projects/asynchronous-programming/tests-backup2/integration/modul3-integration.test.js create mode 100644 public/assets/nodejs/projects/asynchronous-programming/tests-backup2/integration/modul4-integration.test.js create mode 100644 public/assets/nodejs/projects/asynchronous-programming/tests-backup2/integration/modul5-integration.test.js create mode 100644 public/assets/nodejs/projects/asynchronous-programming/tests-backup2/unit/modul1-unit.test.js create mode 100644 public/assets/nodejs/projects/asynchronous-programming/tests-backup2/unit/modul2-unit.test.js create mode 100644 public/assets/nodejs/projects/asynchronous-programming/tests-backup2/unit/modul3-unit.test.js create mode 100644 public/assets/nodejs/projects/asynchronous-programming/tests-backup2/unit/modul4-unit.test.js create mode 100644 public/assets/nodejs/projects/asynchronous-programming/tests-backup2/unit/modul5-unit.test.js create mode 100644 public/assets/nodejs/projects/asynchronous-programming/tests/integration/modul1-integration.test.js create mode 100644 public/assets/nodejs/projects/asynchronous-programming/tests/integration/modul2-integration.test.js create mode 100644 public/assets/nodejs/projects/asynchronous-programming/tests/integration/modul3-integration.test.js create mode 100644 public/assets/nodejs/projects/asynchronous-programming/tests/integration/modul4-integration.test.js create mode 100644 public/assets/nodejs/projects/asynchronous-programming/tests/integration/modul5-integration.test.js create mode 100644 public/assets/nodejs/projects/asynchronous-programming/tests/unit/modul1-unit.test.js create mode 100644 public/assets/nodejs/projects/asynchronous-programming/tests/unit/modul2-unit.test.js create mode 100644 public/assets/nodejs/projects/asynchronous-programming/tests/unit/modul3-unit.test.js create mode 100644 public/assets/nodejs/projects/asynchronous-programming/tests/unit/modul4-unit.test.js create mode 100644 public/assets/nodejs/projects/asynchronous-programming/tests/unit/modul5-unit.test.js rename public/assets/nodejs/projects/{asycnchronous-programming => asynchronous-programming}/zips/guides.zip (100%) rename public/assets/nodejs/projects/{asycnchronous-programming => asynchronous-programming}/zips/supplements.zip (100%) diff --git a/app/Http/Controllers/NodeJS/Student/SubmissionController.php b/app/Http/Controllers/NodeJS/Student/SubmissionController.php index 1231024..9bca274 100644 --- a/app/Http/Controllers/NodeJS/Student/SubmissionController.php +++ b/app/Http/Controllers/NodeJS/Student/SubmissionController.php @@ -169,7 +169,7 @@ public function submit(Request $request) if ($temporary_file) { $path = storage_path('app/' . $request->folder_path . '/' . $temporary_file->file_name); - $submission->addMedia($path)->toMediaCollection('submissions', 'public_submissions_files'); + $submission->addMedia($path)->toMediaCollection('submissions', 'nodejs_public_submissions_files'); if ($this->is_dir_empty(storage_path('app/' . $request->folder_path))) { rmdir(storage_path('app/' . $request->folder_path)); } diff --git a/app/Jobs/NodeJS/UnzipZipFiles.php b/app/Jobs/NodeJS/UnzipZipFiles.php index 71d8e56..72e247b 100644 --- a/app/Jobs/NodeJS/UnzipZipFiles.php +++ b/app/Jobs/NodeJS/UnzipZipFiles.php @@ -1,15 +1,15 @@ { - await connectDB().then( - async () => { - console.log("Database connected successfully"); - }, - (err) => { - console.log("There is problem while connecting database " + err); - } - ); -}); - -describe("Testing application configuration", () => { - // Testing the package.json file for the necessary development packages - // the packages are cross-env, jest, nodemon, supertest, jest-image-snapshot, jest-expect-message, puppeteer - it("Should have the necessary development packages", (done) => { - expect( - packages.devDependencies, - ).toHaveProperty("cross-env"); - expect( - packages.devDependencies, - ).toHaveProperty("jest"); - expect( - packages.devDependencies, - ).toHaveProperty("nodemon"); - expect( - packages.devDependencies, - ).toHaveProperty("supertest"); - // expect( - // packages.devDependencies, - // ).toHaveProperty("jest-image-snapshot"); - // expect( - // packages.devDependencies, - // ).toHaveProperty("jest-expect-message"); - // expect( - // packages.devDependencies, - // ).toHaveProperty("puppeteer"); - done(); - }); - // Testing the package.json file for the necessary production packages - // the packages are dotenv, ejs, express, express-ejs-layouts, mongoose, mongoose-slug-generator - it("should have the necessary production packages", (done) => { - expect( - packages.dependencies, - `The package "dotenv" was not found in the dependencies object. Install the package by running this command "npm i dotenv --save"`, - options - ).toHaveProperty("dotenv"); - expect( - packages.dependencies, - `The package "ejs" was not found in the dependencies object. Install the package by running this command "npm i ejs --save"`, - options - ).toHaveProperty("ejs"); - expect( - packages.dependencies, - `The package "express" was not found in the dependencies object. Install the package by running this command "npm i express --save"`, - options - ).toHaveProperty("express"); - expect( - packages.dependencies, - `The package "express-ejs-layouts" was not found in the dependencies object. Install the package by running this command "npm i express-ejs-layouts --save"`, - options - ).toHaveProperty("express-ejs-layouts"); - expect( - packages.dependencies, - `The package "mongoose" was not found in the dependencies object. Install the package by running this command "npm i mongoose --save"`, - options - ).toHaveProperty("mongoose"); - expect( - packages.dependencies, - `The package "mongoose-slug-generator" was not found in the dependencies object. Install the package by running this command "npm i mongoose-slug-generator --save"`, - options - ).toHaveProperty("mongoose-slug-generator"); - done(); - }); - // Testing the application name - // the application name should be "api-experiment" - it("should have the right name and packages", (done) => { - expect( - packages.name, - `The name provided "${packages.name}" is wrong. The application name should be "api-experiment", check the package.json file`, - options - ).toBe("api-experiment"); - done(); - }); - // Testing the application environment variables - // the application should have the following environment variables - // MONGODB_URI, MONGODB_URI_TEST, PORT - it("should have the right environment variables", (done) => { - expect( - process.env, - `The environment variable "MONGODB_URI" was not found. Check the .env file`, - options - ).toHaveProperty("MONGODB_URI"); - expect( - process.env, - `The environment variable "MONGODB_URI_TEST" was not found. Check the .env.test file`, - options - ).toHaveProperty("MONGODB_URI_TEST"); - expect( - process.env.MONGODB_URI !== process.env.MONGODB_URI_TEST, - `The environment variable "MONGODB_URI" and "MONGODB_URI_TEST" should not be the same. Check the .env`, - options - ).toBeTruthy(); - expect( - process.env, - `The environment variable "PORT" was not found. Check the .env file`, - options - ).toHaveProperty("PORT"); - expect( - process.env.NODE_ENV, - `The environment variable "NODE_ENV" was not found. Check the test script in the package.json file` - ).toBe("test"); - done(); - }); - // Testing the application connection to the database using the test environment - it("should have the right database connection", (done) => { - expect( - mongoose.connection.readyState, - `The application is not connected to the database. Check the correctness of the MONGODB_URI_TEST variable in the .env file or the connection to the internet`, - options - ).toBe(1); - done(); - }); - // Testing the application configuration - it("should be using json format and express framework", (done) => { - let application_stack = []; - app._router.stack.forEach((element) => { - application_stack.push(element.name); - }); - expect( - application_stack, - `The application is not using the json format. Check the app.js file`, - options - ).toContain("query"); - expect( - application_stack, - `The application is not using the express framework. Check the app.js file`, - options - ).toContain("expressInit"); - expect( - application_stack, - `The application is not using the json format. Check the app.js file`, - options - ).toContain("jsonParser"); - expect( - application_stack, - `The application is not using the urlencoded format. Check the app.js file`, - options - ).toContain("urlencodedParser"); - done(); - }); -}); -// Testing the application testing route -describe("Testing GET /api/v1/test", () => { - // Testing the application testing route without request - it("should return alive", async () => { - const res = await request(app).get("/api/v1/test"); - expect( - res.statusCode, - `The status code should be 200, but it is "${res.statusCode}", change the status code in the function that handles the GET /api/v1/test route`, - options - ).toBe(200); - expect( - res.body, - `The response should contain the property "alive", but it does not, change the response in the function that handles the GET /api/v1/test route to return {alive: 'True'}`, - options - ).toHaveProperty("alive"); - expect( - res.body.alive, - `The response should be {alive: 'True'}, but it is "${res.body.alive}", change the response in the function that handles the GET /api/v1/test route to return {alive: 'True'}`, - options - ).toBe("True"); - expect( - res.req.method, - `The request method should be GET, but it is "${res.req.method}", change the request method in the function that handles the GET /api/v1/test route`, - options - ).toBe("GET"); - expect( - res.type, - `The response type should be application/json, but it is "${res.type}", change the response type in the function that handles the GET /api/v1/test route` - ).toBe("application/json"); - }); - // Testing the application testing route with request - it("should return the same message", async () => { - const res = await request(app) - .get("/api/v1/test") - .send({ message: "Hello" }); - expect( - res.statusCode, - `The status code should be 200, but it is "${res.statusCode}", change the status code in the function that handles the GET /api/v1/test route`, - options - ).toBe(200); - expect( - res.body, - `The response should contain the property "message", but it does not, change the response in the function that handles the GET /api/v1/test route to return {message: req.body.message}`, - options - ).toHaveProperty("message"); - expect( - res.body.message, - `The response should be {message: 'Hello'}, but it is "${res.body.message}", change the response in the function that handles the GET /api/v1/test route to return {message: req.body.message}`, - options - ).toBe("Hello"); - const res2 = await request(app) - .get("/api/v1/test") - .send({ message: "Hello World" }); - expect( - res2.body.message, - `The response should be {message: 'Hello World'}, but it is "${res2.body.message}", change the response in the function that handles the GET /api/v1/test route to return {message: req.body.message}`, - options - ).toBe("Hello World"); - }); -}); - -afterAll(async () => { - await disconnectDB(); -}); - -async function connectDB() { - return mongoose.connect(process.env.MONGODB_URI_TEST, { - useNewUrlParser: true, - useUnifiedTopology: true, - }); -} - -async function disconnectDB() { - await mongoose.connection.close(); -} diff --git a/public/assets/nodejs/projects/asycnchronous-programming/tests/api/testA01.test.js:Zone.Identifier b/public/assets/nodejs/projects/asycnchronous-programming/tests/api/testA01.test.js:Zone.Identifier deleted file mode 100644 index e69de29..0000000 diff --git a/public/assets/nodejs/projects/asycnchronous-programming/tests/api/testA02.test.js b/public/assets/nodejs/projects/asycnchronous-programming/tests/api/testA02.test.js deleted file mode 100644 index 4c0ea1e..0000000 --- a/public/assets/nodejs/projects/asycnchronous-programming/tests/api/testA02.test.js +++ /dev/null @@ -1,306 +0,0 @@ -const mongoose = require("mongoose"); -const request = require("supertest"); -const app = require("../../app"); -const Product = require("../../models/product.model"); - -require("dotenv").config(); -mongoose.set("strictQuery", true); - -const options = { - showPrefix: false, - showMatcherMessage: true, - showStack: true, -}; - -beforeAll(async () => { - await connectDB(process.env.MONGODB_URI_TEST).then( - async () => { - console.log("Database connected successfully"); - await createProducts(); - }, - (err) => { - console.log("There is problem while connecting database " + err); - } - ); -}); - -describe("GET /api/v1/products", () => { - it("should return all products", async () => { - const res = await request(app).get("/api/v1/products"); - expect( - res.statusCode, - `When calling GET /api/v1/products, the status code should be "200", but it was "${res.statusCode}", update your code to return 200`, - options - ).toBe(200); - expect( - res.body.message, - `When calling GET /api/v1/products, the message should be "Products found", but it was "${res.body.message}", update your code to return "Products found"`, - options - ).toBe("Products found"); - expect( - res.body.products.length, - `When calling GET /api/v1/products, the products array should return more than 0 products, but it was "${res.body.products.length}", update your code to return more than 0 products`, - options - ).toBeGreaterThan(0); - expect( - res.body.products[0].name === "Product 1" || - res.body.products[0].name === "Product 2", - `The data received from GET /api/v1/products was not correct, update your code to return the correct data`, - options - ).toBeTruthy(); - expect( - res.req.method, - `When calling GET /api/v1/products, the method should be "GET", but it was "${res.req.method}", update the method to be "GET"`, - options - ).toBe("GET"); - expect( - res.type, - `When calling GET /api/v1/products, the content type should be "application/json", but it was "${res.type}", update the content type to be "application/json"`, - options - ).toBe("application/json"); - }); - - it("should check items in database", async () => { - await disconnectDB().then(async () => { - await connectDB(process.env.MONGODB_URI).then(async () => { - const products = await Product.find(); - expect( - products.length, - `The database should contain all the "10 products" from the initial_data.json file, but it was "${products.length}", use the initial_data.json file to add more products to the api-experiment database`, - options - ).toEqual(10); - await disconnectDB().then(async () => { - await connectDB(process.env.MONGODB_URI_TEST); - }); - }); - }); - }); - - it("should return no products", async () => { - await Product.deleteMany(); - const res = await request(app).get("/api/v1/products"); - expect( - res.statusCode, - `The status code should be "404" because there are no products, but it was "${res.statusCode}", update the status code to be 404 when there are no products`, - options - ).toBe(404); - expect( - res.body.message, - `The message should be "No products found" because there are no products, but it was "${res.body.message}", update the message to be "No products found" when there are no products`, - options - ).toBe("No products found"); - await createProducts(); - }); - - it("should return error 500 if the database disconnected", async () => { - await disconnectDB().then(async () => { - const res = await request(app).get("/api/v1/products"); - expect( - res.statusCode, - `The application should return 500 for the status code if the database is disconnected`, - options - ).toBe(500); - await connectDB(process.env.MONGODB_URI_TEST); - }); - }); -}); - -describe("GET /api/v1/product/:slug", () => { - it("should return one product", async () => { - const res = await request(app).get("/api/v1/product/product-2"); - expect( - res.statusCode, - `When calling GET /api/v1/product/:slug, the status code should be "200", but it was "${res.statusCode}", update your code to return 200` - ).toBe(200); - expect( - res.body.product.name, - `The expected product was not correct, update your code to return the correct product`, - options - ).toBe("Product 2"); - expect( - res.req.method, - `When calling GET /api/v1/product/:slug, the method should be "GET", but it was "${res.req.method}", update the method to be "GET"`, - options - ).toBe("GET"); - expect( - res.type, - `When calling GET /api/v1/product/:slug, the content type should be "application/json", but it was "${res.type}", update the content type to be "application/json"`, - options - ).toBe("application/json"); - }); - - it("should return no product", async () => { - const res = await request(app).get("/api/v1/product/product-3"); - expect( - res.statusCode, - `The status code should be "404" because there is no product, but it was "${res.statusCode}", update the status code to be 404 when there is no product found`, - options - ).toBe(404); - expect( - res.body.message, - `The message should be "No product found" because there is no product, but it was "${res.body.message}", update the message to be "No product found" when there is no product found`, - options - ).toBe("No product found"); - }); - - it("should return error 500 if the database disconnected", async () => { - await disconnectDB().then(async () => { - const res = await request(app).get("/api/v1/product/product-2"); - expect( - res.statusCode, - `The application should return 500 for the status code if the database is disconnected`, - options - ).toBe(500); - await connectDB(process.env.MONGODB_URI_TEST); - }); - }); -}); - -describe("GET /api/v1/products with filters", () => { - it("should not return any products", async () => { - const formData = { - search: "John Doe", - }; - const res = await request(app).get("/api/v1/products").query(formData); - expect( - res.statusCode, - `When applying search filters, if there are no products matching the search query, the status code should be "404". but it was "${res.statusCode}", update your code to return "404" when there are no products matching the search query`, - options - ).toBe(404); - expect( - res.body.message, - `When applying search filters, if there are no products matching the search query, the message should be "No products found". but it was "${res.body.message}", update your code to return "No products found" when there are no products matching the search query`, - options - ).toBe("No products found"); - }); - - it("should return one products that fits the minimum price", async () => { - const formData = { - price: { - minPrice: 200, - }, - }; - const res = await request(app).get("/api/v1/products").query(formData); - expect( - res.statusCode, - `When applying price filters, if there are products matching the price query, the status code should be "200". but it was "${res.statusCode}", update your code to return "200" when there are products matching the price query`, - options - ).toBe(200); - expect( - res.body.message, - `When applying price filters, if there are products matching the price query, the message should be "Products found". but it was "${res.body.message}", update your code to return "Products found" when there are products matching the price query`, - options - ).toBe("Products found"); - expect( - res.body.products.length, - `When applying price filters, if there are products matching the price query, the length of the products should the same with the products that match the price query, update your code to return the correct amount of products`, - options - ).toBe(1); - expect( - res.body.products[0].price, - `When applying price filters, if there are products matching the price query, the price of the products should be greater than or equal to the minimum price, update your code to return the correct price of the products`, - options - ).toBeGreaterThanOrEqual(200); - }); - - it("should return two products that fits the maximum price", async () => { - const formData = { - price: { - maxPrice: 1000, - }, - }; - const res = await request(app).get("/api/v1/products").query(formData); - expect( - res.statusCode, - `When applying price filters, if there are products matching the price query, the status code should be "200". but it was "${res.statusCode}", update your code to return "200" when there are products matching the price query`, - options - ).toBe(200); - expect( - res.body.message, - `When applying price filters, if there are products matching the price query, the message should be "Products found". but it was "${res.body.message}", update your code to return "Products found" when there are products matching the price query`, - options - ).toBe("Products found"); - expect( - res.body.products.length, - `When applying price filters, if there are products matching the price query, the length of the products should the same with the products that match the price query, update your code to return the correct amount of products`, - options - ).toBe(2); - expect( - res.body.products[0].price, - `When applying price filters, if there are products matching the price query, the price of the products should be less than or equal to the maximum price, update your code to return the correct price of the products`, - options - ).toBeLessThanOrEqual(1000); - }); - - it("should return products", async () => { - const formData = { - search: "Product", - price: { - minPrice: 200, - maxPrice: 1000, - }, - }; - const res = await request(app).get("/api/v1/products").query(formData); - expect( - res.statusCode, - `When applying search and price filters, if there are products matching the search and price query, the status code should be "200". but it was "${res.statusCode}", update your code to return "200" when there are products matching the search and price query`, - options - ).toBe(200); - expect( - res.body.message, - `When applying search and price filters, if there are products matching the search and price query, the message should be "Products found". but it was "${res.body.message}", update your code to return "Products found" when there are products matching the search and price query`, - options - ).toBe("Products found"); - expect( - res.body.products.length, - `When applying search and price filters, if there are products matching the search and price query, the length of the products should the same with the products that match the search and price query, update your code to return the correct amount of products`, - options - ).toBe(1); - res.body.products.forEach((product) => { - expect( - product.price, - `When applying search and price filters, if there are products matching the search and price query, the price of the products should be greater than or equal to the minimum price and less than or equal to the maximum price, update your code to return the correct price of the products`, - options - ).toBeGreaterThanOrEqual(200); - expect( - product.price, - `When applying search and price filters, if there are products matching the search and price query, the price of the products should be greater than or equal to the minimum price and less than or equal to the maximum price, update your code to return the correct price of the products`, - options - ).toBeLessThanOrEqual(1000); - }); - }); -}); - -afterAll(async () => { - const collections = await mongoose.connection.db.collections(); - for (let collection of collections) { - await collection.drop(); - } - await disconnectDB(); -}); - -async function createProducts() { - await Product.create( - { - name: "Product 1", - price: 100, - description: "Description 1", - }, - { - name: "Product 2", - price: 200, - description: "Description 2", - } - ); -} - -async function connectDB(url) { - return mongoose.connect(url, { - useNewUrlParser: true, - useUnifiedTopology: true, - }); -} - -async function disconnectDB() { - await mongoose.connection.close(); -} diff --git a/public/assets/nodejs/projects/asycnchronous-programming/tests/api/testA02.test.js:Zone.Identifier b/public/assets/nodejs/projects/asycnchronous-programming/tests/api/testA02.test.js:Zone.Identifier deleted file mode 100644 index e69de29..0000000 diff --git a/public/assets/nodejs/projects/asycnchronous-programming/tests/api/testA03.test.js b/public/assets/nodejs/projects/asycnchronous-programming/tests/api/testA03.test.js deleted file mode 100644 index 42ba37d..0000000 --- a/public/assets/nodejs/projects/asycnchronous-programming/tests/api/testA03.test.js +++ /dev/null @@ -1,243 +0,0 @@ -const mongoose = require("mongoose"); -const request = require("supertest"); -const app = require("../../app"); -const Product = require("../../models/product.model"); - -require("dotenv").config(); -mongoose.set("strictQuery", true); - -const options = { - showPrefix: false, - showMatcherMessage: true, - showStack: true, -}; - -beforeAll(async () => { - await connectDB(process.env.MONGODB_URI_TEST).then( - async () => { - console.log("Database connected successfully"); - await createProducts(); - }, - (err) => { - console.log("There is problem while connecting database " + err); - } - ); -}); - -describe("POST /api/v1/product", () => { - it("should create a product", async () => { - const res = await request(app).post("/api/v1/product").send({ - name: "Product 3", - price: 1009, - description: "Description 3", - }); - expect( - res.statusCode, - `Expected status code "201", but got "${res.statusCode}", the "201" is the status code for "Created" and it is the status code that we are expecting to get back from the server when we create a new product.`, - options - ).toBe(201); - expect( - res.body, - `Expected the response body to have a property called "message" and the value of that property should be "Product created"`, - options - ).toHaveProperty("message"); - expect( - res.body.message, - `Expected the value of the "message" property to be "Product created"`, - options - ).toBe("Product created"); - - expect( - res.body, - `Expected the response body to have a property called "product" and the value of that property should be an object`, - options - ).toHaveProperty("product"); - expect( - res.body.product.name, - `The value of the object returned doesn't match the value of the "name" property that we sent to the server.`, - options - ).toBe("Product 3"); - - expect( - res.req.method, - `Expected the request method to be "POST"`, - options - ).toBe("POST"); - expect( - res.type, - `Expected the response type to be "application/json"`, - options - ).toBe("application/json"); - }); - - it("should not create a product because it already exists", async () => { - const res = await request(app).post("/api/v1/product").send({ - name: "Product 3", - price: 1009, - description: "Description 3", - }); - expect( - res.statusCode, - `Expected status code "409", but got "${res.statusCode}", the "409" is the status code for "Conflict" and it is the status code that we are expecting to get back from the server when we try to create a product that already exists.`, - options - ).toBe(409); - expect( - res.body, - `Expected the response body to have a property called "message" and the value of that property should be "Product already exists"`, - options - ).toHaveProperty("message"); - expect( - res.body.message, - `Expected the value of the "message" property to be "Product already exists"`, - options - ).toBe("Product already exists"); - expect( - res.body, - `Expected the response body to have a property called "product" for the existed product and the value of that property should be an object`, - options - ).toHaveProperty("product"); - expect( - res.body.product.name, - `The value of the object returned doesn't match the value of the "name" property that we sent to the server.`, - options - ).toBe("Product 3"); - }); - - it("should not create a product because of the name is not provided", async () => { - const res = await request(app).post("/api/v1/product").send({ - name: "", - price: 1009, - description: "Description 3", - }); - expect( - res.statusCode, - `Expected status code "500", but got "${res.statusCode}", the "500" is the status code for "Internal Server Error" and it is the status code that we are expecting to get back from the server when we try to create a product without providing the name.`, - options - ).toBe(500); - expect( - res.body.errors.name.message, - `Expected the value of the "message" property to be "Name is required", but got "${res.body.errors.name.message}" instead. Change the validation property of the "name" property in the "product.model.js" file to "required: true" and then run the test again.`, - options - ).toBe("Name is required"); - expect( - res.body.message, - `Expected the value of the "message" property to be "Product validation failed: name: Name is required", but got "${res.body.message}" instead. Change the validation property of the "name" property in the "product.model.js" file to "required: true" and then run the test again.`, - options - ).toContain("Name is required"); - }); - - it("should not create a product because of the price is not provided", async () => { - const res = await request(app).post("/api/v1/product").send({ - name: "Product 4", - price: "", - description: "Description 4", - }); - expect( - res.statusCode, - `Expected status code "500", but got "${res.statusCode}", the "500" is the status code for "Internal Server Error" and it is the status code that we are expecting to get back from the server when we try to create a product without providing the price.`, - options - ).toBe(500); - expect( - res.body.message, - `Expected the value of the "message" property to be "Cast to Number failed" for value "" at path "price" for model "Product", but got "${res.body.message}" instead. Change the validation property of the "price" property in the "product.model.js" file to "required: true" and then run the test again.`, - options - ).toContain("Cast to Number failed"); - }); - - it("should not create a product because of the description is not provided", async () => { - const res = await request(app).post("/api/v1/product").send({ - name: "Product 4", - price: 1009, - description: "", - }); - expect( - res.statusCode, - `Expected status code "500", but got "${res.statusCode}", the "500" is the status code for "Internal Server Error" and it is the status code that we are expecting to get back from the server when we try to create a product without providing the description.`, - options - ).toBe(500); - expect( - res.body.errors.description.message, - `Expected the value of the "message" property to be "Description is required", but got "${res.body.errors.description.message}" instead. Change the validation property of the "description" property in the "product.model.js" file to "required: true" and then run the test again.`, - options - ).toBe("Description is required"); - expect( - res.body.message, - `Expected the value of the "message" property to be "Product validation failed: description: Description is required", but got "${res.body.message}" instead. Change the validation property of the "description" property in the "product.model.js" file to "required: true" and then run the test again.`, - options - ).toContain("Description is required"); - }); - - it("should not create a product because of the price is less than 0", async () => { - const res = await request(app).post("/api/v1/product").send({ - name: "Product 4", - price: -1009, - description: "Description 4", - }); - expect( - res.statusCode, - `Expected status code "500", but got "${res.statusCode}", the "500" is the status code for "Internal Server Error" and it is the status code that we are expecting to get back from the server when we try to create a product with a price less than 0. - `, - options - ).toBe(500); - expect( - res.body.errors.price.message, - `Expected the value of the "message" property to be "Price must be greater than 0", but got "${res.body.errors.price.message}" instead. Change the validation property of the "price" property in the "product.model.js" file to "min: 0" and then run the test again.`, - options - ).toBe("Price must be greater than 0"); - expect( - res.body.message, - `Expected the value of the "message" property to be "Price must be greater than 0", but got "${res.body.message}" instead. Change the validation property of the "price" property in the "product.model.js" file to "min: 0" and then run the test again.`, - options - ).toContain("Price must be greater than 0"); - }); - - it("should return error 500", async () => { - await disconnectDB().then(async () => { - const res = await request(app).post("/api/v1/product").send({ - name: "Product 4", - price: 1009, - description: "Description 4", - }); - expect( - res.statusCode, - `Expected status code "500", but got "${res.statusCode}", the "500" is the status code for "Internal Server Error" and it is the status code that we are expecting to get back from the server when we try to create a product without database connection.`, - options - ).toBe(500); - await connectDB(); - }); - }); -}); - -afterAll(async () => { - const collections = await mongoose.connection.db.collections(); - for (let collection of collections) { - await collection.drop(); - } - await disconnectDB(); -}); - -async function createProducts() { - await Product.create( - { - name: "Product 1", - price: 100, - description: "Description 1", - }, - { - name: "Product 2", - price: 200, - description: "Description 2", - } - ); -} - -async function connectDB() { - return mongoose.connect(process.env.MONGODB_URI_TEST, { - useNewUrlParser: true, - useUnifiedTopology: true, - }); -} - -async function disconnectDB() { - await mongoose.connection.close(); -} diff --git a/public/assets/nodejs/projects/asycnchronous-programming/tests/api/testA03.test.js:Zone.Identifier b/public/assets/nodejs/projects/asycnchronous-programming/tests/api/testA03.test.js:Zone.Identifier deleted file mode 100644 index e69de29..0000000 diff --git a/public/assets/nodejs/projects/asycnchronous-programming/tests/api/testA04.test.js b/public/assets/nodejs/projects/asycnchronous-programming/tests/api/testA04.test.js deleted file mode 100644 index 6c45c5d..0000000 --- a/public/assets/nodejs/projects/asycnchronous-programming/tests/api/testA04.test.js +++ /dev/null @@ -1,153 +0,0 @@ -const mongoose = require("mongoose"); -const request = require("supertest"); -const app = require("../../app"); -const Product = require("../../models/product.model"); - -require("dotenv").config(); -mongoose.set("strictQuery", true); - -const options = { - showPrefix: false, - showMatcherMessage: true, - showStack: true, -}; - -beforeAll(async () => { - await connectDB(process.env.MONGODB_URI_TEST).then( - async () => { - console.log("Database connected successfully"); - await createProducts(); - }, - (err) => { - console.log("There is problem while connecting database " + err); - } - ); -}); - -describe("PATCH /api/v1/product/:slug", () => { - it("should update a product", async () => { - const FindProduct = await Product.findOne({ slug: "product-3" }) - .lean() - .exec(); - const res = await request(app).patch("/api/v1/product/product-3").send({ - name: "Product 3 updated", - price: 109, - description: "Description 3 updated", - }); - expect( - res.statusCode, - `Expected status code 200, but got "${res.statusCode}", the status 200 means that the request has succeeded. Change it in the file "controllers/api/product.controller.js"` - ).toBe(200); - expect( - res.body, - `Expected the response body to have a property called "message" and the value of that property should be "Product updated"`, - options - ).toHaveProperty("message"); - expect( - res.body.message, - `Expected the value of the "message" property to be "Product updated"`, - options - ).toBe("Product updated"); - expect( - res.body, - `Expected the response body to have a property called "product" and the value of that property should be an object`, - options - ).toHaveProperty("product"); - - expect( - res.body.product, - `Expected the value of the product sent to the server to be updated but it is not. Make sure that you are using the "findByIdAndUpdate" method and that you are passing the correct parameters to it.` - ).not.toEqual(FindProduct); - - expect( - res.req.method, - `Expected the request method to be "PATCH"`, - options - ).toBe("PATCH"); - expect( - res.type, - `Expected the response content type to be "application/json"`, - options - ).toBe("application/json"); - }); - - it("should not update a product because it does not exist", async () => { - const res = await request(app).patch("/api/v1/product/product_4").send({ - name: "Product 3 updated", - price: 109, - description: "Description 3", - }); - expect( - res.statusCode, - `Expected status code 404, but got "${res.statusCode}", the status 404 means that the server can not find the requested resource. Change it in the file "controllers/api/product.controller.js"`, - options - ).toBe(404); - - expect( - res.body, - `Expected the response body to have a property called "message" and the value of that property should be "No product found"`, - options - ).toHaveProperty("message"); - - expect( - res.body.message, - `Expected the value of the "message" property to be "No product found"`, - options - ).toBe("No product found"); - }); - - it("should return error 500", async () => { - await disconnectDB().then(async () => { - const res = await request(app).patch("/api/v1/product/product_4").send({ - name: "Product 3 updated", - price: 109, - description: "Description 3", - }); - expect( - res.statusCode, - `Expected status code "500", but got "${res.statusCode}", the "500" is the status code for "Internal Server Error" and it is the status code that we are expecting to get back from the server when we try to update a product without database connection.`, - options - ).toBe(500); - await connectDB(); - }); - }); -}); - -afterAll(async () => { - const collections = await mongoose.connection.db.collections(); - for (let collection of collections) { - await collection.drop(); - } - await disconnectDB(); -}); - -async function createProducts() { - await Product.create( - { - name: "Product 1", - price: 100, - description: "Description 1", - }, - { - name: "Product 2", - price: 200, - description: "Description 2", - }, - { - name: "Product 3", - price: 1009, - description: "Description 3", - } - ); -} - -async function connectDB() { - return mongoose.connect(process.env.MONGODB_URI_TEST, { - useNewUrlParser: true, - useUnifiedTopology: true, - }); -} - -async function disconnectDB() { - await mongoose.connection.close(); -} diff --git a/public/assets/nodejs/projects/asycnchronous-programming/tests/api/testA04.test.js:Zone.Identifier b/public/assets/nodejs/projects/asycnchronous-programming/tests/api/testA04.test.js:Zone.Identifier deleted file mode 100644 index e69de29..0000000 diff --git a/public/assets/nodejs/projects/asycnchronous-programming/tests/api/testA05.test.js b/public/assets/nodejs/projects/asycnchronous-programming/tests/api/testA05.test.js deleted file mode 100644 index 6b40831..0000000 --- a/public/assets/nodejs/projects/asycnchronous-programming/tests/api/testA05.test.js +++ /dev/null @@ -1,141 +0,0 @@ -const mongoose = require("mongoose"); -const request = require("supertest"); -const app = require("../../app"); -const Product = require("../../models/product.model"); - -require("dotenv").config(); -mongoose.set("strictQuery", true); - -const options = { - showPrefix: false, - showMatcherMessage: true, - showStack: true, -}; - -beforeAll(async () => { - await connectDB(process.env.MONGODB_URI_TEST).then( - async () => { - console.log("Database connected successfully"); - await createProducts(); - }, - (err) => { - console.log("There is problem while connecting database " + err); - } - ); -}); - -describe("DELETE /api/v1/products/:slug", () => { - it("should delete a product", async () => { - const product = await Product.findOne({ slug: "product-3" }).lean().exec(); - const res = await request(app).delete("/api/v1/product/product-3"); - expect( - res.statusCode, - `Expected status code 200 when requesting to delete a product, but got "${res.statusCode}", the status 200 means that the request has succeeded. Change it in the file "controllers/api/product.controller.js"` - ).toBe(200); - expect( - res.body, - `Expected the response body to have a property called "message" and the value of that property should be "Product deleted"`, - options - ).toHaveProperty("message"); - expect( - res.body.message, - `Expected the value of the "message" property to be "Product deleted"`, - options - ).toBe("Product deleted"); - expect( - res.body, - `Expected the response body to have a property called "product" for the deleted product and the value of that property should be an object`, - options - ).toHaveProperty("product"); - expect( - res.body.product.name, - `Expected the product deleted to be the same as the product sent to the server but it is not. Make sure that you are using the "findByIdAndDelete" method and that you are passing the correct parameters to it.`, - options - ).toBe("Product 3"); - const checkProduct = await Product.findById(product._id).lean().exec(); - expect( - checkProduct, - `Expected the product to be deleted from the database but it is not. Make sure that you are using the "findByIdAndDelete" method and that you are passing the correct parameters to it.`, - options - ).toBeNull(); - expect( - res.req.method, - `Expected the request method to be "DELETE" but it is not`, - options - ).toBe("DELETE"); - expect( - res.type, - `Expected the response type to be "application/json" but it is not`, - options - ).toBe("application/json"); - }); - - it("should not delete a product because it does not exist", async () => { - const res = await request(app).delete("/api/v1/product/product-3"); - expect( - res.statusCode, - `Expected status code "404" when requesting to delete a product that does not exist, but got "${res.statusCode}", the status 404 means that the server can not find the requested resource. Change it in the file "controllers/api/product.controller.js"` - ).toBe(404); - expect( - res.body, - `Expected the response body to have a property called "message" and the value of that property should be "No product found"`, - options - ).toHaveProperty("message"); - expect( - res.body.message, - `Expected the value of the "message" property to be "No product found"`, - options - ).toBe("No product found"); - }); - - it("should return error 500", async () => { - await disconnectDB().then(async () => { - const res = await request(app).delete("/api/v1/product/product_4"); - expect( - res.statusCode, - `Expected status code "500", but got "${res.statusCode}", the "500" is the status code for "Internal Server Error" and it is the status code that we are expecting to get back from the server when we try to delete a product without database connection.`, - options - ).toBe(500); - await connectDB(); - }); - }); -}); - -afterAll(async () => { - const collections = await mongoose.connection.db.collections(); - for (let collection of collections) { - await collection.drop(); - } - await disconnectDB(); -}); - -async function createProducts() { - await Product.create( - { - name: "Product 1", - price: 100, - description: "Description 1", - }, - { - name: "Product 2", - price: 200, - description: "Description 2", - }, - { - name: "Product 3", - price: 1009, - description: "Description 3", - } - ); -} - -async function connectDB() { - return mongoose.connect(process.env.MONGODB_URI_TEST, { - useNewUrlParser: true, - useUnifiedTopology: true, - }); -} - -async function disconnectDB() { - await mongoose.connection.close(); -} diff --git a/public/assets/nodejs/projects/asycnchronous-programming/tests/api/testA05.test.js:Zone.Identifier b/public/assets/nodejs/projects/asycnchronous-programming/tests/api/testA05.test.js:Zone.Identifier deleted file mode 100644 index e69de29..0000000 diff --git a/public/assets/nodejs/projects/asycnchronous-programming/tests/web/images/create-product-page.png b/public/assets/nodejs/projects/asycnchronous-programming/tests/web/images/create-product-page.png deleted file mode 100644 index 6ca3ad5d15aa4e523db8f88f7998732455eb0248..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33408 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 FzX6-oXcYhe diff --git a/public/assets/nodejs/projects/asycnchronous-programming/tests/web/images/create-product-page.png:Zone.Identifier b/public/assets/nodejs/projects/asycnchronous-programming/tests/web/images/create-product-page.png:Zone.Identifier deleted file mode 100644 index e69de29..0000000 diff --git a/public/assets/nodejs/projects/asycnchronous-programming/tests/web/images/error-notFound-page.png b/public/assets/nodejs/projects/asycnchronous-programming/tests/web/images/error-notFound-page.png deleted file mode 100644 index 2167bff76f9ee7ca5e6fbd15ad83eea058c74c37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11910 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 *t9wU;_^cDYpc5M#gz1{wU>JG9|= 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 diff --git a/public/assets/nodejs/projects/asycnchronous-programming/tests/web/images/index-page.png:Zone.Identifier b/public/assets/nodejs/projects/asycnchronous-programming/tests/web/images/index-page.png:Zone.Identifier deleted file mode 100644 index e69de29..0000000 diff --git a/public/assets/nodejs/projects/asycnchronous-programming/tests/web/images/no-products-found-page.png b/public/assets/nodejs/projects/asycnchronous-programming/tests/web/images/no-products-found-page.png deleted file mode 100644 index 46c7c638ecb9732d0658db6dc97e0cbffe519508..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36459 zcmeEtX*gTk+jlx~s>L})2Z|16MT<~#RZ;Uy4T-jDig~VCIi+Y(Q);duLSmkRNVIj- z7-J&l)J&ArTp{wt`9JUVet18t?bY&7*YZNKi=+>@&nKOTmSO)?!RZi zm$QHTr&0qr`=83asQ;V+mu~&1^8cYr6lF8~THKP-RyO!#|KnySzhxLTq1~bjOx3cV zHCo-8W#2y=qIojrpx7`c-06kI)BZ_AR`S#2O7*(<)@)W+sG}T8VyEK&(3y+_+$t+z z1*cMS(5*p`viVVz6zlq8-$jsHuvNhZ?YY!vRDkR6k|YnB&z76u$-|Mr)S^Kw(S zC)g%lDSf83)8=v|53$2D{JEw}y#K1{^_ABbe%z={Z7$_M{=rQB${z7KX!a;?xjon# z8^p9b#jm=N`md(J=a256{TvZzD}|st3oj{!J(c5XtlNHOKYR4_E|F4+5&Bh3`tIL@ zDhk!0S2-RnJI@3FKSw&#;rEw;y2tF38M3DuFMUur4qDV1dz?aCwHwA=AVk&_So zPikzW_Sc<-!xfKHEB!0FF3!+go)9T2Xej~Z_jL94umi5n&8D@+G__P!Xao;hfYhtP zDwtGuut-{i#mVDOJYDrQCH6#hLY5d0`7+4)Fz{)dyBKjIdN)T+ z)IM#He$t?Y_*vgvSEPN3-*uIyw)P@82TZ!H6Njg+s39#ziU;XnxVC;T?O`FB7*QpB zfAwDt+*^rf2E>t0jOqS8a1HU~^mkILQk@!#%R8dK25KVc3HHO?Rt%=r%c$w1Lv7$&b3dl*<-=^t$F=MMU{sCg@Cog7}ba<_IM7EZEnQBj^)E{Jwqgcj`s#m-C znF91R!&`o3m7w(0nkq#e9J5moCq?2W*LS)wm5NTbCi9a@Awjf6w=>a}WGP420(-Z8 zOv)_j7d~Q-oAz_#Hs)yJ9r$9CnD@{2-BsEFaRu=D$bz?)Yi~&#zPqDVvH42_cl?v< za5mMy_+S^6*M z?L#nu9p)?qc(}MuD4~Y%XS?*(FFV?D6Df-8umB{8& zp21(omrup})fQ6c2MDV#DoR=ljWbYHIyOC=*`CMVB+vCGlyKqLXNNFeIBac^_K|N1 zZEHi`2Sbm@OS^)%D^1gi?&)4 z{pNFow70%gb;aPq=@S9t{6>K{zNo3<@9I=jsf~@|)Q*UPq_Q&YOOcaM4Z&spH7Ug+ zt7!4oAj)iPq*Qrh(4%u0ueFSDg%LAzzwi?ic7B}@V43|PDr`7Xr