Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Maintenance: dependencies #22

Merged
merged 10 commits into from
Nov 2, 2024
5,352 changes: 3,264 additions & 2,088 deletions package-lock.json

Large diffs are not rendered by default.

51 changes: 26 additions & 25 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,46 +4,47 @@
"description": "Repositório para aprender como desenvolver um projeto de fora a fora",
"main": "index.js",
"scripts": {
"dev": "npm run services:up && npm run wait-for-postgres && npm run migration:up && next dev",
"dev": "npm run services:up && npm run services:wait:database && npm run migrations:up && next dev",
"test": "npm run services:up && concurrently -n next,jest --hide next -k -s command-jest \"next dev\" \"jest --runInBand --verbose\"",
"posttest": "npm run services:stop",
"test:watch": "jest --watchAll --runInBand --verbose",
"services:up": "docker compose -f infra/compose.yaml up -d",
"services:stop": "docker compose -f infra/compose.yaml stop",
"services:down": "docker compose -f infra/compose.yaml down",
"services:wait:database": "node infra/scripts/wait-for-postgres.js",
"migrations:create": "node-pg-migrate -m infra/migrations create",
"migrations:up": "node-pg-migrate -m infra/migrations --envPath .env.development up",
"lint:prettier:check": "prettier --check .",
"lint:prettier:fix": "prettier --write .",
"lint:eslint:check": "next lint --dir .",
"test": "npm run services:up && concurrently -n next,jest --hide next -k -s command-jest \"next dev\" \"jest --runInBand --verbose\"",
"test:watch": "jest --watchAll --runInBand",
"migration:create": "node-pg-migrate -m infra/migrations create",
"migration:up": "node-pg-migrate -m infra/migrations --envPath .env.development up",
"wait-for-postgres": "node infra/scripts/wait-for-postgres.js",
"prepare": "husky",
"commit": "cz"
},
"author": "",
"license": "MIT",
"dependencies": {
"async-retry": "^1.3.3",
"dotenv": "^16.4.4",
"dotenv-expand": "^11.0.6",
"next": "^13.1.6",
"node-pg-migrate": "^6.2.2",
"pg": "^8.11.3",
"react": "^18.2.0",
"react-dom": "^18.2.0"
"async-retry": "1.3.3",
"dotenv": "16.4.5",
"dotenv-expand": "11.0.6",
"next": "14.2.6",
"node-pg-migrate": "7.6.1",
"pg": "8.12.0",
"react": "18.3.1",
"react-dom": "18.3.1"
},
"devDependencies": {
"@commitlint/cli": "^19.3.0",
"@commitlint/config-conventional": "^19.2.2",
"commitizen": "^4.3.0",
"concurrently": "^8.2.2",
"cz-conventional-changelog": "^3.3.0",
"@commitlint/cli": "19.4.0",
"@commitlint/config-conventional": "19.2.2",
"commitizen": "4.3.0",
"concurrently": "8.2.2",
"cz-conventional-changelog": "3.3.0",
"eslint": "8.57.0",
"eslint-config-next": "14.2.4",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-jest": "^28.6.0",
"husky": "^9.1.4",
"jest": "^29.6.2",
"prettier": "^3.1.0"
"eslint-config-next": "14.2.6",
"eslint-config-prettier": "9.1.0",
"eslint-plugin-jest": "28.8.0",
"husky": "9.1.5",
"jest": "29.7.0",
"prettier": "3.3.3"
},
"config": {
"commitizen": {
Expand Down
4 changes: 2 additions & 2 deletions pages/api/v1/migrations/index.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import migrationRunner from "node-pg-migrate";
import { join } from "node:path";
import { resolve } from "node:path";
import database from "infra/database";

export default async function migrations(request, response) {
Expand All @@ -18,7 +18,7 @@ export default async function migrations(request, response) {
const defaultMigrationOptions = {
dbClient: dbClient,
dryRun: true,
dir: join("infra", "migrations"),
dir: resolve("infra", "migrations"),
direction: "up",
verbose: true,
migrationsTable: "pgmigrations",
Expand Down
19 changes: 11 additions & 8 deletions tests/integration/api/v1/migrations/get.test.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,20 @@
import database from "infra/database";
import orchestrator from "tests/orchestrator.js";

beforeAll(async () => {
await orchestrator.waitForAllServices();
await database.query("drop schema public cascade; create schema public;");
await orchestrator.clearDatabase();
});

test("GET to /api/v1/migrations should return 200", async () => {
const response = await fetch("http://localhost:3000/api/v1/migrations");
expect(response.status).toBe(200);
describe("GET /api/v1/migrations", () => {
describe("Anonymous user", () => {
test("Retrieving pending migrations", async () => {
const response = await fetch("http://localhost:3000/api/v1/migrations");
expect(response.status).toBe(200);

const responseBody = await response.json();
const responseBody = await response.json();

expect(Array.isArray(responseBody)).toBe(true);
expect(responseBody.length).toBeGreaterThan(0);
expect(Array.isArray(responseBody)).toBe(true);
expect(responseBody.length).toBeGreaterThan(0);
});
});
});
47 changes: 30 additions & 17 deletions tests/integration/api/v1/migrations/post.test.js
Original file line number Diff line number Diff line change
@@ -1,29 +1,42 @@
import database from "infra/database";
import orchestrator from "tests/orchestrator.js";

beforeAll(async () => {
await orchestrator.waitForAllServices();
await database.query("drop schema public cascade; create schema public;");
await orchestrator.clearDatabase();
});

test("POST to /api/v1/migrations should return 200", async () => {
const response1 = await fetch("http://localhost:3000/api/v1/migrations", {
method: "POST",
});
expect(response1.status).toBe(201);
describe("POST /api/v1/migrations", () => {
describe("Anonymous user", () => {
describe("Running pending migrations", () => {
test("For the first time", async () => {
const response = await fetch(
"http://localhost:3000/api/v1/migrations",
{
method: "POST",
},
);
expect(response.status).toBe(201);

const response1Body = await response1.json();
const responseBody = await response.json();

expect(Array.isArray(response1Body)).toBe(true);
expect(response1Body.length).toBeGreaterThan(0);
expect(Array.isArray(responseBody)).toBe(true);
expect(responseBody.length).toBeGreaterThan(0);
});

const response2 = await fetch("http://localhost:3000/api/v1/migrations", {
method: "POST",
});
expect(response2.status).toBe(200);
test("For the second time", async () => {
const response = await fetch(
"http://localhost:3000/api/v1/migrations",
{
method: "POST",
},
);
expect(response.status).toBe(200);

const response2Body = await response2.json();
const responseBody = await response.json();

expect(Array.isArray(response2Body)).toBe(true);
expect(response2Body.length).toBe(0);
expect(Array.isArray(responseBody)).toBe(true);
expect(responseBody.length).toBe(0);
});
});
});
});
22 changes: 13 additions & 9 deletions tests/integration/api/v1/status/get.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,19 @@ beforeAll(async () => {
await orchestrator.waitForAllServices();
});

test("GET to /api/v1/status should return 200", async () => {
const response = await fetch("http://localhost:3000/api/v1/status");
expect(response.status).toBe(200);
describe("GET /api/v1/status", () => {
describe("Anonymous user", () => {
test("Retrieving current system status", async () => {
const response = await fetch("http://localhost:3000/api/v1/status");
expect(response.status).toBe(200);

const responseBody = await response.json();
const responseBody = await response.json();

const parsedUpdatedAt = new Date(responseBody.updated_at).toISOString();
expect(responseBody.updated_at).toEqual(parsedUpdatedAt);
expect(responseBody.dependencies.database.version).toBe("16.1");
expect(responseBody.dependencies.database.max_connections).toBe(100);
expect(responseBody.dependencies.database.opened_connections).toBe(1);
const parsedUpdatedAt = new Date(responseBody.updated_at).toISOString();
expect(responseBody.updated_at).toEqual(parsedUpdatedAt);
expect(responseBody.dependencies.database.version).toBe("16.1");
expect(responseBody.dependencies.database.max_connections).toBe(100);
expect(responseBody.dependencies.database.opened_connections).toBe(1);
});
});
});
6 changes: 6 additions & 0 deletions tests/orchestrator.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import retry from "async-retry";
import database from "infra/database";

async function waitForAllServices() {
await waitForWebServer();
Expand All @@ -16,8 +17,13 @@ async function waitForAllServices() {
}
}

async function clearDatabase() {
await database.query("drop schema public cascade; create schema public;");
}

const orchestrator = {
waitForAllServices,
clearDatabase,
};

export default orchestrator;