1.1.4 • Published 5 days ago

@nestjs-cognito/testing v1.1.4

Weekly downloads
-
License
MIT
Repository
github
Last release
5 days ago

Node.js CI Coverage Status

Description

This module is a solution for NestJS which facilitates the integration with Amazon Cognito for end-to-end and integration testing purposes. It includes a module, a controller, and a service that simplify testing your authentication and authorization code based on Amazon Cognito.

Installation

npm install @nestjs-cognito/testing

Usage

Module

To use the CognitoTestingModule, you will need to import it and use either the register or registerAsync method to set up its dependencies:

@Module({
  imports: [
    CognitoTestingModule.register({
      identityProvider: {
        region: "eu-west-1",
      },
    }),
  ],
})
export class AppModule {}

Controller

The CognitoTestingController is a simple controller that accepts a username and password and returns an access token. The code is shown below:

import { Body, Controller, Post } from "@nestjs/common";
import { CognitoTestingService } from "@nestjs-cognito/testing";

@Controller()
export class CognitoTestingController {
  constructor(private readonly authService: CognitoTestingService) {}

  @Post("cognito-testing-login")
  login(@Body() body: Record<string, string>) {
    return this.authService.getAccessToken(
      {
        username: body.username,
        password: body.password,
      },
      body.clientId
    );
  }
}

Service

The CognitoTestingService is a service that uses the CognitoIdentityProvider client to get an access token. To call the method cognito-testing-login, you need to pass the following information in the request body:

  • username: The username of the test user
  • password: The password of the test user
  • clientId: Required for using the initiateAuth method provided by @aws-sdk/client-cognito-identity-provider.

Example using Jest and Pactum

import { CognitoTestingModule } from "@nestjs-cognito/testing";
import { INestApplication } from "@nestjs/common";
import { ConfigModule, ConfigService } from "@nestjs/config";
import { Test } from "@nestjs/testing";
import { request, spec } from "pactum";

describe("Cognito Module : Testing", () => {
  let app: INestApplication;
  let config: ConfigService;

  beforeAll(async () => {
    const moduleFixture = await Test.createTestingModule({
      imports: [
        ConfigModule.forRoot(),
        CognitoTestingModule.register({
          region: "eu-west-1",
        }),
      ],
    }).compile();

    app = moduleFixture.createNestApplication();
    config = moduleFixture.get<ConfigService>(ConfigService);

    await app.listen(0);
    const url = (await app.getUrl()).replace("[::1]", "localhost");
    request.setBaseUrl(url);
  });

  afterAll(async () => {
    await app.close();
  });

  describe("authentication", () => {
    it("should be able to access the private route", async () => {
      await spec()
        .post("/cognito-testing-login")
        .withBody({
          username: config.get("COGNITO_USER_EMAIL"),
          password: config.get("COGNITO_USER_PASSWORD"),
          clientId: config.get("COGNITO_CLIENT_ID"),
        })
        .expectStatus(201)
        .expectBodyContains("AccessToken").
        .stores('token', 'AccessToken');
      await spec()
        .get('/private')
        .withHeaders('Authorization', 'Bearer $S{token}')
        .expectStatus(200);
    });
  });
});

License

@nestjs-cognito/testing is MIT licensed.

1.1.4

5 days ago

1.1.3

3 months ago

1.1.2

3 months ago

1.1.1

5 months ago

1.1.0

5 months ago

1.0.12

5 months ago

1.0.9

8 months ago

1.0.8

9 months ago

1.0.7

9 months ago

1.0.6

10 months ago

1.0.5

10 months ago

1.0.11

8 months ago

1.0.10

8 months ago

1.0.4

11 months ago

1.0.3

12 months ago

1.0.2

1 year ago

1.0.1

1 year ago

1.0.0

1 year ago

1.0.1-alpha.0

1 year ago

1.0.0-alpha.0

1 year ago

0.2.9

1 year ago

0.2.1

2 years ago

0.2.0

2 years ago

0.2.7

2 years ago

0.2.6

2 years ago

0.2.8

2 years ago

0.2.3

2 years ago

0.2.2

2 years ago

0.2.5

2 years ago

0.2.4

2 years ago

0.1.2

2 years ago

0.1.1

2 years ago

0.1.0

2 years ago

0.0.4-alpha.0

2 years ago

0.0.3-alpha.0

2 years ago

0.0.2-alpha.0

2 years ago