From b0ab15495bb4964acf34020c1ddb154487b56042 Mon Sep 17 00:00:00 2001 From: olha-dev-fullstack Date: Thu, 27 Feb 2025 10:43:36 +0200 Subject: [PATCH 1/6] add test step --- .github/workflows/dev.yml | 7 ++++++- .github/workflows/production.yml | 24 ++++++++++++++---------- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index cafd600..393ce7f 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -36,8 +36,13 @@ jobs: echo "AUTH_SECRET=${{ secrets.AUTH_SECRET }}" >> dev.env echo "JWT_EXPIRES_IN=${{ secrets.JWT_EXPIRES_IN }}" >> dev.env echo "PORT=${{ secrets.PORT }}" >> dev.env + test: + runs-on: [self-hosted, dev] + steps: + - name: Run tests + run: npm run test build: - needs: create_env + needs: [create_env, test] runs-on: [self-hosted, dev] steps: - name: Build website diff --git a/.github/workflows/production.yml b/.github/workflows/production.yml index 3531aea..82d58bc 100644 --- a/.github/workflows/production.yml +++ b/.github/workflows/production.yml @@ -24,17 +24,21 @@ jobs: steps: - name: Create .env file run: | - echo "DB_HOST=${{ secrets.DB_HOST }}" >> dev.env - echo "DB_PORT=${{ secrets.DB_PORT }}" >> dev.env - echo "DB_USER=${{ secrets.DB_USER }}" >> dev.env - echo "DB_PASSWORD=${{ secrets.DB_PASSWORD }}" >> dev.env - echo "DB_NAME=${{ secrets.DB_NAME }}" >> dev.env - echo "DB_DROP_SCHEMA=${{ secrets.DB_DROP_SCHEMA }}" >> dev.env - echo "AUTH_SECRET=${{ secrets.AUTH_SECRET }}" >> dev.env - echo "JWT_EXPIRES_IN=${{ secrets.JWT_EXPIRES_IN }}" >> dev.env - echo "PORT=${{ secrets.PORT }}" >> dev.env + echo "DB_HOST=${{ secrets.DB_HOST }}" >> production.env + echo "DB_PORT=${{ secrets.DB_PORT }}" >> production.env + echo "DB_USER=${{ secrets.DB_USER }}" >> production.env + echo "DB_PASSWORD=${{ secrets.DB_PASSWORD }}" >> production.env + echo "DB_NAME=${{ secrets.DB_NAME }}" >> production.env + echo "AUTH_SECRET=${{ secrets.AUTH_SECRET }}" >> production.env + echo "JWT_EXPIRES_IN=${{ secrets.JWT_EXPIRES_IN }}" >> production.env + echo "PORT=${{ vars.PORT }}" >> production.env + test: + runs-on: [self-hosted, prod] + steps: + - name: Run tests + run: npm run test build: - needs: create_env + needs: [create_env, test] runs-on: [self-hosted, prod] steps: - name: Build website From 0ff5257e73d412b1bf63c210b9042c858ee896db Mon Sep 17 00:00:00 2001 From: olha-dev-fullstack Date: Thu, 27 Feb 2025 10:58:26 +0200 Subject: [PATCH 2/6] fix test --- .github/workflows/dev.yml | 1 + src/events/event.service.spec.ts | 144 ------------------------------- 2 files changed, 1 insertion(+), 144 deletions(-) delete mode 100644 src/events/event.service.spec.ts diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index 393ce7f..4a5447b 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -38,6 +38,7 @@ jobs: echo "PORT=${{ secrets.PORT }}" >> dev.env test: runs-on: [self-hosted, dev] + needs: create_env steps: - name: Run tests run: npm run test diff --git a/src/events/event.service.spec.ts b/src/events/event.service.spec.ts deleted file mode 100644 index a44c736..0000000 --- a/src/events/event.service.spec.ts +++ /dev/null @@ -1,144 +0,0 @@ -import { Repository } from 'typeorm'; -import { EventsService } from './event.service'; -import { Test } from '@nestjs/testing'; -import { getRepositoryToken } from '@nestjs/typeorm'; -import { Event } from './event.entity'; -import { User } from '../user/user.entity'; -import * as paginator from './../pagination/paginator'; - -jest.mock('./../pagination/paginator'); - -describe('EventService', () => { - let service: EventsService; - let repository: Repository; - let selectQb; - let deleteQb; - let mockedPaginate; - - beforeEach(async () => { - mockedPaginate = paginator.paginate as jest.Mock; - - deleteQb = { - where: jest.fn(), - execute: jest.fn(), - }; - selectQb = { - delete: jest.fn().mockReturnValue(deleteQb), - where: jest.fn(), - execute: jest.fn(), - orderBy: jest.fn(), - leftJoinAndSelect: jest.fn(), - }; - const module = await Test.createTestingModule({ - providers: [ - EventsService, - { - provide: getRepositoryToken(Event), - useValue: { - save: jest.fn(), - createQueryBuilder: jest.fn().mockReturnValue(selectQb), - delete: jest.fn(), - where: jest.fn(), - execute: jest.fn(), - }, - }, - ], - }).compile(); - - service = module.get(EventsService); - repository = module.get>(getRepositoryToken(Event)); - - service.findOne = jest - .fn() - .mockImplementation( - (): any => ({ id: 'test', organizerId: 'testOrgId' }) as Event, - ); - }); - - describe('updateEvent', () => { - it('should update event', async () => { - const repoSpy = jest - .spyOn(repository, 'save') - .mockResolvedValue({ id: 'test' } as Event); - await expect( - service.updateEvent('test', { name: 'New name' }, { - id: 'testOrgId', - } as User), - ).resolves.toEqual({ id: 'test' }); - expect(repoSpy).toHaveBeenCalledWith({ - id: 'test', - name: 'New name', - organizerId: 'testOrgId', - }); - }); - }); - - describe('deleteEvent', () => { - it('should delete event with query builder', async () => { - const createQueryBuilderSpy = jest.spyOn( - repository, - 'createQueryBuilder', - ); - const deleteSpy = jest - .spyOn(selectQb, 'delete') - .mockReturnValue(deleteQb); - const whereSpy = jest.spyOn(deleteQb, 'where').mockReturnValue(deleteQb); - const executeSpy = jest.spyOn(deleteQb, 'execute'); - - await expect( - service.deleteEvent('test', { id: 'testOrgId' } as User), - ).resolves.toBe(undefined); - - expect(createQueryBuilderSpy).toHaveBeenCalledTimes(1); - expect(createQueryBuilderSpy).toHaveBeenCalledWith('e'); - expect(deleteSpy).toHaveBeenCalledTimes(1); - expect(whereSpy).toHaveBeenCalledTimes(1); - expect(whereSpy).toHaveBeenCalledWith('id = :id', { id: 'test' }); - expect(executeSpy).toHaveBeenCalledTimes(1); - }); - }); - - describe('getEventsAttendedByUserIdPaginated', () => { - it('should return a list of paginated events', async () => { - const orderBySpy = jest - .spyOn(selectQb, 'orderBy') - .mockReturnValue(selectQb); - const leftJoinSpy = jest - .spyOn(selectQb, 'leftJoinAndSelect') - .mockReturnValue(selectQb); - const whereSpy = jest.spyOn(selectQb, 'where').mockReturnValue(selectQb); - mockedPaginate.mockResolvedValue({ - first: 1, - last: 1, - total: 10, - limit: 10, - data: [], - }); - await expect( - service.getEventsAttendedByUserIdPaginated('test', { - limit: 1, - currentPage: 1, - }), - ).resolves.toEqual({ - data: [], - first: 1, - last: 1, - limit: 10, - total: 10, - }); - expect(orderBySpy).toHaveBeenCalledTimes(1); - expect(orderBySpy).toHaveBeenCalledWith('e.id', 'DESC'); - expect(leftJoinSpy).toHaveBeenCalledTimes(1); - expect(leftJoinSpy).toHaveBeenCalledWith('e.attendees', 'a'); - expect(whereSpy).toHaveBeenCalledTimes(1); - expect(whereSpy).toHaveBeenCalledWith('a.userId = :userId', { - userId: 'test', - }); - expect(mockedPaginate).toHaveBeenCalledTimes(1); - expect(mockedPaginate).toHaveBeenCalledWith(selectQb, { - currentPage: 1, - limit: 1, - }); - }); - }); -}); From 0cf2672e42c86798048ed6ce080247744fccc499 Mon Sep 17 00:00:00 2001 From: olha-dev-fullstack Date: Thu, 27 Feb 2025 11:07:19 +0200 Subject: [PATCH 3/6] add pull requests tests --- .github/workflows/run-tests.yml | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 .github/workflows/run-tests.yml diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml new file mode 100644 index 0000000..d92bc33 --- /dev/null +++ b/.github/workflows/run-tests.yml @@ -0,0 +1,27 @@ +name: Run tests +on: + push: + pull_request: + workflow_dispatch: +jobs: + checkout: + runs-on: ubuntu-latest + environment: dev + steps: + - name: Get code + uses: actions/checkout@v4 + - name: Cache dependencies + id: cache + uses: actions/cache@v4 + with: + path: node_modules + key: deps-node-modules-${{ hashFiles('**/package-lock.json') }} + - name: Install dependencies + if: steps.cache.outputs.cache-hit != 'true' + run: npm ci + test: + runs-on: ubuntu-latest + needs: checkout + steps: + - name: Run tests + run: npm run test \ No newline at end of file From 04b1b18813278c8b9d444db4f5b4c3258d0e17a5 Mon Sep 17 00:00:00 2001 From: olha-dev-fullstack Date: Thu, 27 Feb 2025 11:13:35 +0200 Subject: [PATCH 4/6] change test --- src/app.module.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app.module.ts b/src/app.module.ts index 54f7c06..e10c959 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -47,7 +47,7 @@ import { SchoolModule } from './school/school.module'; }, { provide: 'APP_NAME', - useValue: 'The best Nest events backend', + useValue: 'The Nest events application backend', }, { provide: 'MESSAGE', From 476f128bbae4c60a72b47307435c308315b2135d Mon Sep 17 00:00:00 2001 From: olha-dev-fullstack Date: Thu, 27 Feb 2025 11:32:46 +0200 Subject: [PATCH 5/6] change test --- .github/workflows/run-tests.yml | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index d92bc33..9d21b54 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -10,14 +10,7 @@ jobs: steps: - name: Get code uses: actions/checkout@v4 - - name: Cache dependencies - id: cache - uses: actions/cache@v4 - with: - path: node_modules - key: deps-node-modules-${{ hashFiles('**/package-lock.json') }} - - name: Install dependencies - if: steps.cache.outputs.cache-hit != 'true' + - name: Install dependencies run: npm ci test: runs-on: ubuntu-latest From 1b006ee64e62bd466ea3f8ae4356ebbef1b7422b Mon Sep 17 00:00:00 2001 From: olha-dev-fullstack Date: Thu, 27 Feb 2025 11:39:13 +0200 Subject: [PATCH 6/6] fix tests workflow --- .github/workflows/run-tests.yml | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index 9d21b54..c4e3702 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -4,17 +4,19 @@ on: pull_request: workflow_dispatch: jobs: - checkout: + test: runs-on: ubuntu-latest - environment: dev steps: - name: Get code uses: actions/checkout@v4 - - name: Install dependencies + - name: Cache dependencies + id: cache + uses: actions/cache@v4 + with: + path: node_modules + key: deps-node-modules-${{ hashFiles('**/package-lock.json') }} + - name: Install dependencies + if: steps.cache.outputs.cache-hit != 'true' run: npm ci - test: - runs-on: ubuntu-latest - needs: checkout - steps: - name: Run tests run: npm run test \ No newline at end of file