@@ -12,7 +12,6 @@ describe('commandRenameSecret', () => {
1212 const logger = new Logger ( 'CLI Test' , LogLevel . WARN , [ new StreamHandler ( ) ] ) ;
1313 let dataDir : string ;
1414 let polykeyAgent : PolykeyAgent ;
15- let command : Array < string > ;
1615
1716 beforeEach ( async ( ) => {
1817 dataDir = await fs . promises . mkdtemp (
@@ -33,6 +32,7 @@ describe('commandRenameSecret', () => {
3332 logger : logger ,
3433 } ) ;
3534 } ) ;
35+
3636 afterEach ( async ( ) => {
3737 await polykeyAgent . stop ( ) ;
3838 await fs . promises . rm ( dataDir , {
@@ -44,39 +44,86 @@ describe('commandRenameSecret', () => {
4444 test ( 'should rename secrets' , async ( ) => {
4545 const vaultName = 'vault' as VaultName ;
4646 const vaultId = await polykeyAgent . vaultManager . createVault ( vaultName ) ;
47- const secretName = 'secret ' ;
48- const newSecretName = 'secret-renamed ' ;
49- const secretContent = 'this is the secret' ;
47+ const oldSecretName = 'secretOld ' ;
48+ const newSecretName = 'secretNew ' ;
49+ const secretContent = 'this is the secret for simple rename ' ;
5050 await polykeyAgent . vaultManager . withVaults ( [ vaultId ] , async ( vault ) => {
51- await vaultOps . addSecret ( vault , secretName , secretContent ) ;
51+ await vaultOps . addSecret ( vault , oldSecretName , secretContent ) ;
5252 } ) ;
53- command = [
53+
54+ // Should fail if only new name is provided
55+ const command1 = [
5456 'secrets' ,
5557 'rename' ,
5658 '-np' ,
5759 dataDir ,
58- `${ vaultName } :${ secretName } ` ,
60+ `${ vaultName } :${ oldSecretName } ` ,
5961 newSecretName ,
6062 ] ;
61- const result = await testUtils . pkStdio ( command , {
63+ const result1 = await testUtils . pkStdio ( command1 , {
6264 env : { PK_PASSWORD : password } ,
6365 cwd : dataDir ,
6466 } ) ;
65- expect ( result . exitCode ) . toBe ( 0 ) ;
67+ expect ( result1 . exitCode ) . toBe ( 1 ) ;
68+ await polykeyAgent . vaultManager . withVaults ( [ vaultId ] , async ( vault ) => {
69+ const list = await vaultOps . listSecrets ( vault ) ;
70+ expect ( list . sort ( ) ) . toStrictEqual ( [ oldSecretName ] ) ;
71+ } ) ;
72+
73+ // Should pass if fully-qualified path is provided
74+ const command2 = [
75+ 'secrets' ,
76+ 'rename' ,
77+ '-np' ,
78+ dataDir ,
79+ `${ vaultName } :${ oldSecretName } ` ,
80+ `${ vaultName } :${ newSecretName } ` ,
81+ ] ;
82+ const result2 = await testUtils . pkStdio ( command2 , {
83+ env : { PK_PASSWORD : password } ,
84+ cwd : dataDir ,
85+ } ) ;
86+ expect ( result2 . exitCode ) . toBe ( 0 ) ;
6687 await polykeyAgent . vaultManager . withVaults ( [ vaultId ] , async ( vault ) => {
6788 const list = await vaultOps . listSecrets ( vault ) ;
6889 expect ( list . sort ( ) ) . toStrictEqual ( [ newSecretName ] ) ;
6990 } ) ;
7091 } ) ;
71- test ( 'should not rename vault root' , async ( ) => {
72- const vaultName = 'vault' as VaultName ;
73- await polykeyAgent . vaultManager . createVault ( vaultName ) ;
74- command = [ 'secrets' , 'rename' , '-np' , dataDir , vaultName , 'rename' ] ;
92+
93+ test ( 'should fail renaming across vaults' , async ( ) => {
94+ const vaultName1 = 'vault1' as VaultName ;
95+ const vaultName2 = 'vault2' as VaultName ;
96+ const vaultId1 = await polykeyAgent . vaultManager . createVault ( vaultName1 ) ;
97+ const vaultId2 = await polykeyAgent . vaultManager . createVault ( vaultName2 ) ;
98+ const oldSecretName = 'secretOld' ;
99+ const newSecretName = 'secretNew' ;
100+ const secretContent = 'this is the secret for simple rename' ;
101+ await polykeyAgent . vaultManager . withVaults ( [ vaultId1 ] , async ( vault ) => {
102+ await vaultOps . addSecret ( vault , oldSecretName , secretContent ) ;
103+ } ) ;
104+ const command = [
105+ 'secrets' ,
106+ 'rename' ,
107+ '-np' ,
108+ dataDir ,
109+ `${ vaultName1 } :${ oldSecretName } ` ,
110+ `${ vaultName2 } :${ newSecretName } ` ,
111+ ] ;
75112 const result = await testUtils . pkStdio ( command , {
76113 env : { PK_PASSWORD : password } ,
77114 cwd : dataDir ,
78115 } ) ;
79- expect ( result . exitCode ) . not . toBe ( 0 ) ;
80- expect ( result . stderr ) . toInclude ( 'EPERM' ) ;
116+ expect ( result . exitCode ) . toBe ( 1 ) ;
117+ await polykeyAgent . vaultManager . withVaults (
118+ [ vaultId1 , vaultId2 ] ,
119+ async ( vault1 , vault2 ) => {
120+ // The secret wasn't changed in the original place
121+ const list1 = await vaultOps . listSecrets ( vault1 ) ;
122+ expect ( list1 . sort ( ) ) . toStrictEqual ( [ oldSecretName ] ) ;
123+ // The target vault is also unchanged
124+ const list2 = await vaultOps . listSecrets ( vault2 ) ;
125+ expect ( list2 . sort ( ) ) . toStrictEqual ( [ ] ) ;
126+ } ,
127+ ) ;
81128 } ) ;
82129} ) ;
0 commit comments