1- import { credentialOff , credentialOn , getGitUrlWithCredential , getRemoteUrl } from '../src' ;
1+ import { credentialOff , credentialOn , getGitHubUrlWithCredential , getRemoteUrl } from '../src' ;
22import { defaultGitInfo } from '../src/defaultGitInfo' ;
33import { getGitUrlWithGitSuffix , getGitUrlWithOutGitSuffix } from '../src/utils' ;
4- import { dir , exampleRemoteUrl , exampleToken } from './constants' ;
4+ import { creatorGitInfo , dir , exampleRemoteUrl , exampleToken } from './constants' ;
55import { addHTTPRemote } from './utils' ;
66
77describe ( 'credential' , ( ) => {
@@ -15,7 +15,7 @@ describe('credential', () => {
1515 // make sure we are working on a https remote, our method only handle this case
1616 expect ( remoteUrl ) . toStartWith ( 'https://' ) ;
1717 expect ( remoteUrl . length ) . toBeGreaterThan ( 0 ) ;
18- expect ( remoteUrl ) . toBe ( getGitUrlWithCredential ( exampleRemoteUrl , defaultGitInfo . gitUserName , exampleToken ) ) ;
18+ expect ( remoteUrl ) . toBe ( getGitHubUrlWithCredential ( exampleRemoteUrl , defaultGitInfo . gitUserName , exampleToken ) ) ;
1919 // github use https://${username}:${accessToken}@github .com/ format
2020 expect ( remoteUrl . includes ( '@' ) ) . toBe ( true ) ;
2121 expect ( remoteUrl . includes ( exampleToken ) ) . toBe ( true ) ;
@@ -58,6 +58,33 @@ describe('credential', () => {
5858 expect ( restoredRemoteUrl . includes ( exampleToken ) ) . toBe ( false ) ;
5959 } ) ;
6060
61+ test ( 'it remove Github token after off (specific case of creator)' , async ( ) => {
62+ const creatorRepoUrl = `https://github.com/${ creatorGitInfo . gitUserName } /wiki` ;
63+ const creatorRepoUrlWithToken = `https://${ creatorGitInfo . gitUserName } :${ creatorGitInfo . accessToken } @github.com/${ creatorGitInfo . gitUserName } /wiki` ;
64+ await credentialOn ( dir , creatorRepoUrl , creatorGitInfo . gitUserName , creatorGitInfo . accessToken , defaultGitInfo . remote ) ;
65+ const newRemoteUrl = await getRemoteUrl ( dir , defaultGitInfo . remote ) ;
66+ expect ( newRemoteUrl . includes ( creatorGitInfo . accessToken ) ) . toBe ( true ) ;
67+ expect ( newRemoteUrl ) . toBe ( creatorRepoUrlWithToken ) ;
68+ await credentialOff ( dir , defaultGitInfo . remote ) ;
69+ const restoredRemoteUrl = await getRemoteUrl ( dir , defaultGitInfo . remote ) ;
70+ expect ( restoredRemoteUrl ) . toBe ( creatorRepoUrl ) ;
71+ expect ( restoredRemoteUrl . includes ( exampleToken ) ) . toBe ( false ) ;
72+ } ) ;
73+
74+ test ( 'it remove Github token from url with token (specific case of creator)' , async ( ) => {
75+ const creatorRepoUrl = `https://github.com/${ creatorGitInfo . gitUserName } /wiki` ;
76+ const creatorRepoUrlWithToken = `https://${ creatorGitInfo . gitUserName } :${ creatorGitInfo . accessToken } @github.com/${ creatorGitInfo . gitUserName } /wiki` ;
77+ // sometimes, original url has token (forget to remove) due to bugs in previous versions.
78+ await credentialOn ( dir , creatorRepoUrlWithToken , creatorGitInfo . gitUserName , creatorGitInfo . accessToken , defaultGitInfo . remote ) ;
79+ const newRemoteUrl = await getRemoteUrl ( dir , defaultGitInfo . remote ) ;
80+ expect ( newRemoteUrl . includes ( creatorGitInfo . accessToken ) ) . toBe ( true ) ;
81+ expect ( newRemoteUrl ) . toBe ( creatorRepoUrlWithToken ) ;
82+ await credentialOff ( dir , defaultGitInfo . remote ) ;
83+ const restoredRemoteUrl = await getRemoteUrl ( dir , defaultGitInfo . remote ) ;
84+ expect ( restoredRemoteUrl ) . toBe ( creatorRepoUrl ) ;
85+ expect ( restoredRemoteUrl . includes ( exampleToken ) ) . toBe ( false ) ;
86+ } ) ;
87+
6188 test ( 'methods are idempotent' , async ( ) => {
6289 const originalRemoteUrl = await getRemoteUrl ( dir , defaultGitInfo . remote ) ;
6390 await credentialOn ( dir , originalRemoteUrl , defaultGitInfo . gitUserName , exampleToken , defaultGitInfo . remote ) ;
0 commit comments