import { Test } from "@nestjs/testing";
import { LogtoLoggerServiceToken, OAuthClient, OAuthClientToken, SignInType } from "..";
import { ConfigModule } from "@nestjs/config";
import { ConsoleLogger } from "@nestjs/common";
import { LogtoTokenVerifierToken, LogtoTokenVerifier } from "../../token";

describe('OAuthClient', () => {
    let oauthClient: OAuthClient;
    
    beforeEach(async () => {
        const testingModule = await Test.createTestingModule({
            imports: [
                ConfigModule.forRoot({
                  envFilePath: `env/.env.${process.env.NODE_ENV}`, // Ensure this matches your environment file path
                  isGlobal: true,
                }),
              ],
            providers: [
                {
                    provide: LogtoLoggerServiceToken,
                    useClass: ConsoleLogger
                },
                { 
                    provide: OAuthClientToken, 
                    useClass: OAuthClient 
                }, 
                {
                    provide: LogtoTokenVerifierToken,
                    useClass: LogtoTokenVerifier
                }
            ],
        }).compile();

        oauthClient = testingModule.get<OAuthClient>(OAuthClientToken);
    });
    
    it('로그인/ 회원가입을 위한 로그인 페이지 요청 URI 생성', () => {

        const uri = oauthClient.getSignInURI(SignInType.Admin);

        expect(uri).toContain('prompt=login');
    });
    it('잘못된 PAT 토큰으로 발급 시도 시 에러 발생', async () => {
        await expect(oauthClient.fetchAccessTokenByPAT('invalid_pat')).rejects.toThrow();
    });

});
