From 0339031f175a28eef39e853493193a46e6b87a46 Mon Sep 17 00:00:00 2001 From: Raphael Rivas Date: Thu, 25 Jan 2024 16:07:56 -0300 Subject: [PATCH] test: update tests to matching samples - chore: ignore .vscode/ folder - doc: remove unecssary launch.json example - test: remove unecessary test --- .gitignore | 6 +- README.md | 35 ++-- .../bank-statements.e2e-spec.ts | 150 ++++++++++++------ .../ticket-revenues.e2e-spec.ts | 47 ------ test/utils/constants.ts | 21 +++ 5 files changed, 141 insertions(+), 118 deletions(-) delete mode 100644 test/ticket-revenues/ticket-revenues.e2e-spec.ts diff --git a/.gitignore b/.gitignore index b324834c..76f147cc 100644 --- a/.gitignore +++ b/.gitignore @@ -28,11 +28,7 @@ lerna-debug.log* *.sublime-workspace # IDE - VSCode -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json +.vscode/ .data /files diff --git a/README.md b/README.md index 55485bda..191bd501 100644 --- a/README.md +++ b/README.md @@ -139,6 +139,21 @@ npm run test npm run test:e2e ``` +### Testando scripts localmente + +Para testar scripts que fazem uso das mesmas boblioitecas e componentes deste projeto basta criar a seguinte pasta: +```bash +api-cct +📂 src + 📂 local_dev # não sincornizado + seus-scripts.ts +``` + +Para executar basta rodar: +```bash +ts-node "diretório do script" +``` + ### Depurando testes **Exemplo de configuração no VSCode:** @@ -226,26 +241,6 @@ Requisitos "console": "integratedTerminal", "internalConsoleOptions": "neverOpen", "attachSimplePort": 9229 - }, - { - "name": "Debug seed:run", - "type": "node", - "request": "launch", - "runtimeArgs": [ - "-r", - "tsconfig-paths/register" - ], - "args": [ - "${workspaceFolder}/src/database/seeds/run-seed.ts" - ], - "cwd": "${workspaceFolder}", - "env": { - "NODE_ENV": "development" - }, - "sourceMaps": true, - "outFiles": [ - "${workspaceFolder}/dist/**/*.js" - ] } ], } diff --git a/test/bank-statements/bank-statements.e2e-spec.ts b/test/bank-statements/bank-statements.e2e-spec.ts index e80e40f2..17f6f516 100644 --- a/test/bank-statements/bank-statements.e2e-spec.ts +++ b/test/bank-statements/bank-statements.e2e-spec.ts @@ -1,8 +1,11 @@ -import { isFriday, isSameMonth, nextFriday, previousFriday } from 'date-fns'; +import { BigQuery } from '@google-cloud/bigquery'; +import { isFriday, previousFriday } from 'date-fns'; import * as request from 'supertest'; import { getDateYMDString } from '../../src/utils/date-utils'; import { APP_URL, + BQ_JSON_CREDENTIALS, + // BQ_JSON_CREDENTIALS, LICENSEE_PASSWORD, LICENSEE_PERMIT_CODE, } from '../utils/constants'; @@ -10,6 +13,14 @@ import { describe('Bank statements (e2e)', () => { const app = APP_URL; let apiToken: any; + let bq: BigQuery; + let licenseeCpfCnpj: string; + + /** + * Sample date found at 2024/01/25: + * max: 2023-10-30, min: 2023-10-19 + */ + let licenseeMaxDate: Date; beforeAll(async () => { await request(app) @@ -18,35 +29,45 @@ describe('Bank statements (e2e)', () => { .expect(200) .then(({ body }) => { apiToken = body.token; + licenseeCpfCnpj = body.user.cpfCnpj; }); - }); - describe('Setup tests', () => { - test('timezone should be UTC', () => { - expect(new Date().getTimezoneOffset()).toBe(0); - }); + bq = new BigQuery({ credentials: BQ_JSON_CREDENTIALS() }); + await bq + .query( + ` + SELECT + CAST(t.data AS STRING) AS partitionDate, + FROM \`rj-smtr.br_rj_riodejaneiro_bilhetagem.transacao\` t + LEFT JOIN \`rj-smtr.cadastro.operadoras\` o ON o.id_operadora = t.id_operadora + WHERE o.documento = '${licenseeCpfCnpj}' ORDER BY data DESC, hora DESC LIMIT 1 + `, + ) + .then((value) => { + licenseeMaxDate = new Date(value[0][0]?.['partitionDate']); + }); + expect(Number(licenseeMaxDate)).not.toBeNaN(); }); it('should match todaySum in /bank-statements with /ticket-revenues/me', async () => { // Arrange - let friday = new Date(); + let friday = new Date(licenseeMaxDate); if (!isFriday(friday)) { - friday = nextFriday(friday); + friday = previousFriday(friday); } - friday.setDate(friday.getDate() - 7); const fridayStr = getDateYMDString(friday); // Act - const requestArgs = { - timeInterval: 'lastMonth', - }; let bankStatements: any; await request(app) .get('/api/v1/bank-statements/me') .auth(apiToken, { type: 'bearer', }) - .query(requestArgs) + .query({ + endDate: getDateYMDString(friday), + timeInterval: 'lastMonth', + }) .expect(200) .then(({ body }) => { bankStatements = body; @@ -67,6 +88,8 @@ describe('Bank statements (e2e)', () => { }); // Assert + expect(bankStatements.data.length).toBeGreaterThan(0); + expect(ticketRevenuesMe.data.length).toBeGreaterThan(0); expect(bankStatements.todaySum).toEqual(ticketRevenuesMe.todaySum); }, 60000); @@ -75,9 +98,9 @@ describe('Bank statements (e2e)', () => { * - 2023/11/10 {@link https://github.com/RJ-SMTR/api-cct/issues/80#issuecomment-1806153475 #80, item 8 - GitHub} */ async () => { // Arrange - let friday = new Date(); + let friday = new Date(licenseeMaxDate); if (!isFriday(friday)) { - friday = nextFriday(friday); + friday = previousFriday(friday); } // Act @@ -87,7 +110,10 @@ describe('Bank statements (e2e)', () => { .auth(apiToken, { type: 'bearer', }) - .query({ timeInterval: 'lastMonth' }) + .query({ + endDate: getDateYMDString(friday), + timeInterval: 'lastMonth', + }) .expect(200) .then(({ body }) => { bankStatements = body; @@ -117,6 +143,10 @@ describe('Bank statements (e2e)', () => { // Assert friday.setDate(friday.getDate()); + expect(bankStatements.data.length).toBeGreaterThan(0); + expect(ticketRevenuesMe.data.length).toBeGreaterThan(0); + expect(bankStatements.amountSum).toBeGreaterThan(0); + expect(ticketRevenuesMe.amountSum).toBeGreaterThan(0); expect(bankStatements.amountSum).toEqual(ticketRevenuesMe.amountSum); }, 60000); @@ -125,25 +155,23 @@ describe('Bank statements (e2e)', () => { * - 2023/11/10 {@link https://github.com/RJ-SMTR/api-cct/issues/80#issuecomment-1806153475 #80, item 7 - GitHub} */ async () => { // Arrange - let friday = new Date(); - if (isSameMonth(friday, nextFriday(friday))) { - friday = nextFriday(friday); - } else { + let friday = new Date(licenseeMaxDate); + if (!isFriday(friday)) { friday = previousFriday(friday); } const fridayStr = getDateYMDString(friday); // Act - const requestArgs = { - timeInterval: 'lastMonth', - }; let bankStatements; await request(app) .get('/api/v1/bank-statements/me') .auth(apiToken, { type: 'bearer', }) - .query(requestArgs) + .query({ + endDate: fridayStr, + timeInterval: 'lastMonth', + }) .expect(200) .then(({ body }) => { bankStatements = body; @@ -167,7 +195,10 @@ describe('Bank statements (e2e)', () => { const bankStatementsFriday = bankStatements.data.filter( (i: any) => i.date === fridayStr, )?.[0]; - expect(bankStatements.data[0].date).toEqual(fridayStr); + expect(bankStatementsFriday).toBeDefined(); + expect(ticketRevenuesMe.data.length).toBeGreaterThan(0); + expect(bankStatementsFriday.amount).toBeGreaterThan(0); + expect(ticketRevenuesMe.amountSum).toBeGreaterThan(0); expect(bankStatementsFriday.amount).toEqual(ticketRevenuesMe.amountSum); }, 60000); @@ -176,9 +207,10 @@ describe('Bank statements (e2e)', () => { * - 2023/11/10 {@link https://github.com/RJ-SMTR/api-cct/issues/80#issuecomment-1806153475 #80, item 9 - GitHub} */ async () => { // Arrange - const requestArgs = { - timeInterval: 'lastWeek', - }; + let friday = new Date(licenseeMaxDate); + if (!isFriday(friday)) { + friday = previousFriday(friday); + } // Act let revenuesMe: any; @@ -187,7 +219,10 @@ describe('Bank statements (e2e)', () => { .auth(apiToken, { type: 'bearer', }) - .query(requestArgs) + .query({ + endDate: getDateYMDString(friday), + timeInterval: 'lastWeek', + }) .expect(200) .then(({ body }) => { revenuesMe = body; @@ -199,7 +234,10 @@ describe('Bank statements (e2e)', () => { .auth(apiToken, { type: 'bearer', }) - .query(requestArgs) + .query({ + endDate: getDateYMDString(friday), + timeInterval: 'lastWeek', + }) .expect(200) .then(({ body }) => { revenuesMeGrouped = body; @@ -210,8 +248,7 @@ describe('Bank statements (e2e)', () => { (revenuesMe.data as []) .reduce( (sum, i: any) => - sum + i?.transactionTypeCounts?.['Integração']?.transactionValue || - 0, + sum + i?.transactionTypeCounts?.['Débito']?.transactionValue || 0, 0, ) .toFixed(2), @@ -220,7 +257,7 @@ describe('Bank statements (e2e)', () => { (revenuesMe.data as []) .reduce( (sum, i: any) => - sum + i?.transportTypeCounts?.['1']?.transactionValue || 0, + sum + i?.transportTypeCounts?.['Van']?.transactionValue || 0, 0, ) .toFixed(2), @@ -236,11 +273,14 @@ describe('Bank statements (e2e)', () => { .toFixed(2), ); expect( - revenuesMeGrouped.transactionTypeCounts?.['Integração'] - ?.transactionValue || 0, + transactionTypeSum || transportTypeSum || transportIntegrationSum, + ).toBeGreaterThan(0); + expect( + revenuesMeGrouped.transactionTypeCounts?.['Débito']?.transactionValue || + 0, ).toEqual(transactionTypeSum); expect( - revenuesMeGrouped.transportTypeCounts?.['1']?.transactionValue || 0, + revenuesMeGrouped.transportTypeCounts?.['Van']?.transactionValue || 0, ).toEqual(transportTypeSum); expect( revenuesMeGrouped.transportIntegrationTypeCounts?.['BRT'] @@ -253,9 +293,10 @@ describe('Bank statements (e2e)', () => { * - 2023/11/10 {@link https://github.com/RJ-SMTR/api-cct/issues/80#issuecomment-1806153475 #80, item 10 - GitHub} */ async () => { // Arrange - const requestArgs = { - timeInterval: 'lastMonth', - }; + let friday = new Date(licenseeMaxDate); + if (!isFriday(friday)) { + friday = previousFriday(friday); + } // Act let bankStatements; @@ -264,7 +305,10 @@ describe('Bank statements (e2e)', () => { .auth(apiToken, { type: 'bearer', }) - .query(requestArgs) + .query({ + endDate: getDateYMDString(friday), + timeInterval: 'lastMonth', + }) .expect(200) .then(({ body }) => { bankStatements = body; @@ -276,13 +320,18 @@ describe('Bank statements (e2e)', () => { .auth(apiToken, { type: 'bearer', }) - .query(requestArgs) + .query({ + endDate: getDateYMDString(friday), + timeInterval: 'lastMonth', + }) .expect(200) .then(({ body }) => { revenuesMeGrouped = body; }); // Assert + expect(bankStatements.amountSum).toBeGreaterThan(0); + expect(revenuesMeGrouped.transactionValueSum).toBeGreaterThan(0); expect(bankStatements.amountSum).toEqual( revenuesMeGrouped.transactionValueSum, ); @@ -293,9 +342,10 @@ describe('Bank statements (e2e)', () => { * - 2023/11/10 {@link https://github.com/RJ-SMTR/api-cct/issues/80#issuecomment-1806153475 #80, item ?? - GitHub} */ async () => { // Arrange - const requestArgs = { - timeInterval: 'lastMonth', - }; + let friday = new Date(licenseeMaxDate); + if (!isFriday(friday)) { + friday = previousFriday(friday); + } // Act let bankStatements: any; @@ -304,7 +354,10 @@ describe('Bank statements (e2e)', () => { .auth(apiToken, { type: 'bearer', }) - .query(requestArgs) + .query({ + endDate: getDateYMDString(friday), + timeInterval: 'lastMonth', + }) .expect(200) .then(({ body }) => { bankStatements = body; @@ -316,13 +369,18 @@ describe('Bank statements (e2e)', () => { .auth(apiToken, { type: 'bearer', }) - .query(requestArgs) + .query({ + endDate: getDateYMDString(friday), + timeInterval: 'lastMonth', + }) .expect(200) .then(({ body }) => { revenuesMeGrouped = body; }); // Assert + expect(bankStatements.ticketCount).toBeGreaterThan(0); + expect(revenuesMeGrouped.count).toBeGreaterThan(0); expect(bankStatements.ticketCount).toEqual(revenuesMeGrouped.count); }, 60000); }); diff --git a/test/ticket-revenues/ticket-revenues.e2e-spec.ts b/test/ticket-revenues/ticket-revenues.e2e-spec.ts deleted file mode 100644 index 9a3111bb..00000000 --- a/test/ticket-revenues/ticket-revenues.e2e-spec.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { subDays } from 'date-fns'; -import * as request from 'supertest'; -import { getDateYMDString } from '../../src/utils/date-utils'; -import { - APP_URL, - LICENSEE_PASSWORD, - LICENSEE_PERMIT_CODE, -} from '../utils/constants'; - -describe('Ticket revenues (e2e)', () => { - const app = APP_URL; - let apiToken: any; - - beforeAll(async () => { - await request(app) - .post('/api/v1/auth/licensee/login') - .send({ permitCode: LICENSEE_PERMIT_CODE, password: LICENSEE_PASSWORD }) - .expect(200) - .then(({ body }) => { - apiToken = body.token; - }); - }); - - it('should return some user result in /ticket-revenues/me', async () => { - // Arrange - const startDate = subDays(new Date(), 366); - - // Act - let ticketRevenuesMe: any; - await request(app) - .get('/api/v1/ticket-revenues/me') - .auth(apiToken, { - type: 'bearer', - }) - .query({ - startDate: getDateYMDString(startDate), - endDate: getDateYMDString(new Date()), - }) - .expect(200) - .then(({ body }) => { - ticketRevenuesMe = body; - }); - - // Assert - expect(ticketRevenuesMe.data.length).toBeGreaterThan(0); - }, 60000); -}); diff --git a/test/utils/constants.ts b/test/utils/constants.ts index 1913e67f..68bf5933 100644 --- a/test/utils/constants.ts +++ b/test/utils/constants.ts @@ -20,3 +20,24 @@ export const LICENSEE_2_PASSWORD = 'secret'; export const MAIL_HOST = process.env.MAIL_HOST; export const MAIL_PORT = process.env.MAIL_CLIENT_PORT; + +export const BQ_JSON_CREDENTIALS = () => { + const credentials = { + type: process.env.GOOGLE_CLIENT_API_TYPE, + project_id: process.env.GOOGLE_CLIENT_API_PROJECT_ID, + private_key_id: process.env.GOOGLE_CLIENT_API_PRIVATE_KEY_ID, + private_key: process.env.GOOGLE_CLIENT_API_PRIVATE_KEY, + client_email: process.env.GOOGLE_CLIENT_API_CLIENT_EMAIL, + client_id: process.env.GOOGLE_CLIENT_API_CLIENT_ID, + auth_uri: process.env.GOOGLE_CLIENT_API_AUTH_URI, + token_uri: process.env.GOOGLE_CLIENT_API_TOKEN_URI, + auth_provider_x509_cert_url: + process.env.GOOGLE_CLIENT_API_AUTH_PROVIDER_X509_CERT_URL, + client_x509_cert_url: process.env.GOOGLE_CLIENT_API_CLIENT_X509_CERT_URL, + universe_domain: process.env.GOOGLE_CLIENT_API_UNIVERSE_DOMAIN, + }; + for (const [k, v] of Object.entries(credentials)) { + credentials[k] = String(v).replace(/\\n/g, '\n'); + } + return credentials; +};