import { setTimeout as wait } from 'timers/promises'; import { Test, TestingModule } from '@nestjs/testing'; import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from './../src/app.module'; describe('AppController (e2e)', () => { let app: INestApplication; beforeEach(async () => { const moduleFixture: TestingModule = await Test.createTestingModule({ imports: [AppModule], }).compile(); app = moduleFixture.createNestApplication(); await app.init(); }); afterEach(async () => { await app.close(); }); it('stores a job for suricrasia.online and completes it', async () => { const supertest = request(app.getHttpServer()); const jobCreateResponse = await supertest .post('/screenshots') .send({ pageUrl: 'https://suricrasia.online', imageType: 'png' }); expect(jobCreateResponse.status).toEqual(201); expect(jobCreateResponse.body.jobId).toBeDefined(); const jobId = jobCreateResponse.body.jobId; await wait(5000); const jobStatusResponse = await supertest.get(`/screenshots/${jobId}`); expect(jobStatusResponse.status).toEqual(200); expect(jobStatusResponse.body.status).toBeDefined(); expect(jobStatusResponse.body.status).toEqual('completed'); const jobResultResponse = await supertest.get( `/screenshots/${jobId}/result`, ); expect(jobResultResponse.status).toEqual(200); expect(jobResultResponse.body).toMatchImageSnapshot(); }, 10000); });