From 1a0b8f15c9b96b612bd90ffaa045c7e01b28454e Mon Sep 17 00:00:00 2001 From: YakovchukIvan <81960402+YakovchukIvan@users.noreply.github.com> Date: Tue, 10 Mar 2026 09:34:03 +0200 Subject: [PATCH 1/3] fix: resolve failing unit tests in app and companies controller - update AppController health check test to match current response shape - add missing mock providers to CompaniesController test module --- src/app.controller.spec.ts | 3 +-- .../__tests__/companies.controller.spec.ts | 25 ++++++++++++++++++- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/app.controller.spec.ts b/src/app.controller.spec.ts index aa87cad..03956b4 100644 --- a/src/app.controller.spec.ts +++ b/src/app.controller.spec.ts @@ -17,8 +17,7 @@ describe('AppController', () => { describe('health check', () => { it('should return health check object', () => { expect(appController.getHealthCheck()).toEqual({ - status_code: 200, - detail: 'ok', + status: 'ok', result: 'working', }); }); diff --git a/src/modules/companies/__tests__/companies.controller.spec.ts b/src/modules/companies/__tests__/companies.controller.spec.ts index 35247c7..9ff8c70 100644 --- a/src/modules/companies/__tests__/companies.controller.spec.ts +++ b/src/modules/companies/__tests__/companies.controller.spec.ts @@ -1,6 +1,10 @@ import { Test, TestingModule } from '@nestjs/testing'; import { CompaniesController } from '../controllers/companies.controller'; import { CompaniesService } from '../services/companies.service'; +import { CompanyMembersService } from '../services/company-members.service'; +import { DataSource } from 'typeorm'; +import { getRepositoryToken } from '@nestjs/typeorm'; +import { Company } from '../entities/company.entity'; describe('CompaniesController', () => { let controller: CompaniesController; @@ -8,7 +12,26 @@ describe('CompaniesController', () => { beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ controllers: [CompaniesController], - providers: [CompaniesService], + providers: [ + CompaniesService, + { + provide: getRepositoryToken(Company), + useValue: { + find: jest.fn(), + findOne: jest.fn(), + save: jest.fn(), + delete: jest.fn(), + }, + }, + { + provide: CompanyMembersService, + useValue: {}, + }, + { + provide: DataSource, + useValue: {}, + }, + ], }).compile(); controller = module.get(CompaniesController); From 93d9759c15ccf1bd007ec1616fa8c95247138826 Mon Sep 17 00:00:00 2001 From: YakovchukIvan <81960402+YakovchukIvan@users.noreply.github.com> Date: Tue, 10 Mar 2026 09:49:52 +0200 Subject: [PATCH 2/3] feat: add CI workflow for feature branches and CI/CD for develop --- .github/workflows/ci.yml | 31 +++++++++++++++++++++++++++++++ .github/workflows/deploy.yml | 4 +--- 2 files changed, 32 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..59bd8c1 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,31 @@ +name: CI — Lint & Test + +on: + push: + branches-ignore: [develop] + pull_request: + branches: ['**'] + +jobs: + ci: + name: Lint & Test + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '22' + cache: 'npm' + + - name: Install dependencies + run: npm ci + + - name: Run linter + run: npm run lint + + - name: Run tests + run: npm run test diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index d5b4465..2406722 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -1,4 +1,4 @@ -name: CI/CD Deploy to EC2 +name: CI/CD — Deploy to EC2 on: push: @@ -56,8 +56,6 @@ jobs: echo "POSTGRES_DB=${{ secrets.POSTGRES_DB }}" >> .env.production echo "POSTGRES_USER=${{ secrets.POSTGRES_USER }}" >> .env.production echo "POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }}" >> .env.production - echo "REDIS_HOST=localhost" >> .env.production - echo "REDIS_PORT=6379" >> .env.production echo "REDIS_URL=${{ secrets.REDIS_URL }}" >> .env.production echo "JWT_SECRET=${{ secrets.JWT_SECRET }}" >> .env.production echo "JWT_EXPIRES_IN=${{ secrets.JWT_EXPIRES_IN }}" >> .env.production From 60c05a7215a1d23369cf65bf2b662734a44b63f6 Mon Sep 17 00:00:00 2001 From: YakovchukIvan <81960402+YakovchukIvan@users.noreply.github.com> Date: Tue, 10 Mar 2026 09:56:09 +0200 Subject: [PATCH 3/3] test(companies): switch controller tests to CompanyRepository mock --- .../__tests__/companies.controller.spec.ts | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/modules/companies/__tests__/companies.controller.spec.ts b/src/modules/companies/__tests__/companies.controller.spec.ts index 9ff8c70..e013e3a 100644 --- a/src/modules/companies/__tests__/companies.controller.spec.ts +++ b/src/modules/companies/__tests__/companies.controller.spec.ts @@ -2,9 +2,8 @@ import { Test, TestingModule } from '@nestjs/testing'; import { CompaniesController } from '../controllers/companies.controller'; import { CompaniesService } from '../services/companies.service'; import { CompanyMembersService } from '../services/company-members.service'; +import { CompanyRepository } from '../repositories/company.repository'; import { DataSource } from 'typeorm'; -import { getRepositoryToken } from '@nestjs/typeorm'; -import { Company } from '../entities/company.entity'; describe('CompaniesController', () => { let controller: CompaniesController; @@ -15,21 +14,28 @@ describe('CompaniesController', () => { providers: [ CompaniesService, { - provide: getRepositoryToken(Company), + provide: CompanyRepository, useValue: { find: jest.fn(), findOne: jest.fn(), save: jest.fn(), - delete: jest.fn(), + remove: jest.fn(), + findBySlugOrFail: jest.fn(), + findBySlugRaw: jest.fn(), + findPaginated: jest.fn(), }, }, { provide: CompanyMembersService, - useValue: {}, + useValue: { + createInitialOwner: jest.fn(), + }, }, { provide: DataSource, - useValue: {}, + useValue: { + transaction: jest.fn(), + }, }, ], }).compile();