import { Test, TestingModule } from '@nestjs/testing';
import { INestApplication } from '@nestjs/common';
import request from 'supertest';
import { AppModule } from './../src/app.module';

describe('PlansController (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('/plans (GET)', () => {
        return request(app.getHttpServer())
            .get('/plans')
            .expect(200)
            .expect(res => {
                expect(Array.isArray(res.body)).toBe(true);
                expect(res.body.length).toBeGreaterThan(0);
                expect(res.body[0]).toHaveProperty('id');
                expect(res.body[0]).toHaveProperty('name');
                expect(res.body[0]).toHaveProperty('monthlyPrice');
            });
    });

    it('/plans/:id (GET)', () => {
        return request(app.getHttpServer())
            .get('/plans/starter')
            .expect(200)
            .expect(res => {
                expect(res.body.id).toBe('starter');
                expect(res.body.name).toBe('Starter');
            });
    });
});
