Skip to content

Commit 23a05d0

Browse files
committed
chore: updated most tests to test for this behaviour
1 parent 616df30 commit 23a05d0

File tree

7 files changed

+207
-165
lines changed

7 files changed

+207
-165
lines changed

src/secrets/CommandMkdir.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ class CommandMkdir extends CommandPolykey {
2424
this.addOption(binOptions.nodeId);
2525
this.addOption(binOptions.clientHost);
2626
this.addOption(binOptions.clientPort);
27-
this.addOption(binOptions.recursive);
27+
this.addOption(binOptions.parents);
2828
this.action(async (secretPaths, options) => {
2929
secretPaths = secretPaths.map((path: string) =>
3030
binParsers.parseSecretPath(path),
@@ -67,9 +67,9 @@ class CommandMkdir extends CommandPolykey {
6767
for (const [vault, path] of secretPaths) {
6868
await writer.write({
6969
nameOrId: vault,
70-
dirName: path,
70+
dirName: path ?? '/',
7171
metadata: first
72-
? { ...auth, options: { recursive: options.recursive } }
72+
? { ...auth, options: { recursive: options.parents } }
7373
: undefined,
7474
});
7575
first = false;

src/secrets/CommandWrite.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ class CommandWrite extends CommandPolykey {
7777
await pkClient.rpcClient.methods.vaultsSecretsWriteFile({
7878
metadata: auth,
7979
nameOrId: secretPath[0],
80-
secretName: secretPath[1],
80+
secretName: secretPath[1] ?? '/',
8181
secretContent: stdin,
8282
}),
8383
meta,

src/utils/options.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,12 @@ const order = new commander.Option(
304304

305305
const recursive = new commander.Option(
306306
'--recursive',
307-
'If enabled, specified directories will be removed along with their contents',
307+
'If enabled, specified operation will be applied recursively to the directory and its contents',
308+
).default(false);
309+
310+
const parents = new commander.Option(
311+
'--parents',
312+
'If enabled, create all parent directories as well. If the directories exist, do nothing.',
308313
).default(false);
309314

310315
export {
@@ -349,4 +354,5 @@ export {
349354
limit,
350355
order,
351356
recursive,
357+
parents,
352358
};

tests/secrets/cat.test.ts

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,22 @@ describe('commandCatSecret', () => {
6161
expect(result.exitCode).toBe(0);
6262
expect(result.stdout).toBe(secretContent);
6363
});
64+
test('should fail when reading root without secret path', async () => {
65+
const vaultName = 'Vault3' as VaultName;
66+
const vaultId = await polykeyAgent.vaultManager.createVault(vaultName);
67+
const secretName = 'secret-name';
68+
const secretContent = 'this is the contents of the secret';
69+
await polykeyAgent.vaultManager.withVaults([vaultId], async (vault) => {
70+
await vaultOps.addSecret(vault, secretName, secretContent);
71+
});
72+
const command = ['secrets', 'cat', '-np', dataDir, vaultName];
73+
const result = await testUtils.pkStdio(command, {
74+
env: { PK_PASSWORD: password },
75+
cwd: dataDir,
76+
});
77+
expect(result.exitCode).toBe(0);
78+
expect(result.stderr).toBeDefined();
79+
});
6480
test('should concatenate multiple secrets', async () => {
6581
const vaultName = 'Vault3' as VaultName;
6682
const vaultId = await polykeyAgent.vaultManager.createVault(vaultName);
@@ -169,7 +185,7 @@ describe('commandCatSecret', () => {
169185
resolve(exitCode);
170186
});
171187
});
172-
expect(exitCode).toStrictEqual(0);
188+
expect(exitCode).toBe(0);
173189
expect(stdout).toBe(stdinData);
174190
});
175191
});

tests/secrets/edit.test.ts

Lines changed: 55 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ describe('commandEditSecret', () => {
1717
let editorFail: string;
1818
let editorView: string;
1919
let polykeyAgent: PolykeyAgent;
20-
let command: Array<string>;
2120

2221
beforeEach(async () => {
2322
dataDir = await fs.promises.mkdtemp(
@@ -59,6 +58,7 @@ describe('commandEditSecret', () => {
5958
logger: logger,
6059
});
6160
});
61+
6262
afterEach(async () => {
6363
await polykeyAgent.stop();
6464
await fs.promises.rm(dataDir, {
@@ -68,108 +68,125 @@ describe('commandEditSecret', () => {
6868
});
6969

7070
test('should edit secret', async () => {
71-
const vaultName = 'Vault10' as VaultName;
71+
const vaultName = 'vault' as VaultName;
7272
const vaultId = await polykeyAgent.vaultManager.createVault(vaultName);
7373
const secretName = 'secret';
74-
7574
await polykeyAgent.vaultManager.withVaults([vaultId], async (vault) => {
7675
await vaultOps.addSecret(vault, secretName, 'original secret');
7776
});
78-
79-
command = ['secrets', 'edit', '-np', dataDir, `${vaultName}:${secretName}`];
80-
81-
const result = await testUtils.pkStdio([...command], {
77+
const command = [
78+
'secrets',
79+
'edit',
80+
'-np',
81+
dataDir,
82+
`${vaultName}:${secretName}`,
83+
];
84+
const result = await testUtils.pkStdio(command, {
8285
env: { PK_PASSWORD: password, EDITOR: editorEdit },
8386
cwd: dataDir,
8487
});
8588
expect(result.exitCode).toBe(0);
86-
8789
await polykeyAgent.vaultManager.withVaults([vaultId], async (vault) => {
8890
const contents = await vaultOps.getSecret(vault, secretName);
8991
expect(contents.toString()).toStrictEqual(`${editedContent}\n`);
9092
});
9193
});
92-
94+
test('should fail to edit without a secret path specified', async () => {
95+
const vaultName = 'vault' as VaultName;
96+
const command = ['secrets', 'edit', '-np', dataDir, vaultName];
97+
const result = await testUtils.pkStdio(command, {
98+
env: { PK_PASSWORD: password, EDITOR: editorEdit },
99+
cwd: dataDir,
100+
});
101+
expect(result.exitCode).not.toBe(0);
102+
});
93103
test('should create secret if it does not exist', async () => {
94-
const vaultName = 'Vault10' as VaultName;
104+
const vaultName = 'vault' as VaultName;
95105
const vaultId = await polykeyAgent.vaultManager.createVault(vaultName);
96106
const secretName = 'secret';
97-
98-
command = ['secrets', 'edit', '-np', dataDir, `${vaultName}:${secretName}`];
99-
100-
const result = await testUtils.pkStdio([...command], {
107+
const command = [
108+
'secrets',
109+
'edit',
110+
'-np',
111+
dataDir,
112+
`${vaultName}:${secretName}`,
113+
];
114+
const result = await testUtils.pkStdio(command, {
101115
env: { PK_PASSWORD: password, EDITOR: editorEdit },
102116
cwd: dataDir,
103117
});
104118
expect(result.exitCode).toBe(0);
105-
106119
await polykeyAgent.vaultManager.withVaults([vaultId], async (vault) => {
107120
const contents = await vaultOps.getSecret(vault, secretName);
108121
expect(contents.toString()).toStrictEqual(`${editedContent}\n`);
109122
});
110123
});
111-
112124
test('should not create secret if editor crashes', async () => {
113-
const vaultName = 'Vault10' as VaultName;
125+
const vaultName = 'vault' as VaultName;
114126
const vaultId = await polykeyAgent.vaultManager.createVault(vaultName);
115127
const secretName = 'secret';
116-
117-
command = ['secrets', 'edit', '-np', dataDir, `${vaultName}:${secretName}`];
118-
119-
const result = await testUtils.pkStdio([...command], {
128+
const command = [
129+
'secrets',
130+
'edit',
131+
'-np',
132+
dataDir,
133+
`${vaultName}:${secretName}`,
134+
];
135+
const result = await testUtils.pkStdio(command, {
120136
env: { PK_PASSWORD: password, EDITOR: editorFail },
121137
cwd: dataDir,
122138
});
123139
expect(result.exitCode).not.toBe(0);
124-
125140
await polykeyAgent.vaultManager.withVaults([vaultId], async (vault) => {
126141
const list = await vaultOps.listSecrets(vault);
127142
expect(list.sort()).toStrictEqual([]);
128143
});
129144
});
130-
131145
test('should not create secret if editor does not write to file', async () => {
132-
const vaultName = 'Vault10' as VaultName;
146+
const vaultName = 'vault' as VaultName;
133147
const vaultId = await polykeyAgent.vaultManager.createVault(vaultName);
134148
const secretName = 'secret';
135-
136-
command = ['secrets', 'edit', '-np', dataDir, `${vaultName}:${secretName}`];
137-
138-
const result = await testUtils.pkStdio([...command], {
149+
const command = [
150+
'secrets',
151+
'edit',
152+
'-np',
153+
dataDir,
154+
`${vaultName}:${secretName}`,
155+
];
156+
const result = await testUtils.pkStdio(command, {
139157
env: { PK_PASSWORD: password, EDITOR: editorExit },
140158
cwd: dataDir,
141159
});
142160
expect(result.exitCode).toBe(0);
143-
144161
await polykeyAgent.vaultManager.withVaults([vaultId], async (vault) => {
145162
const list = await vaultOps.listSecrets(vault);
146163
expect(list.sort()).toStrictEqual([]);
147164
});
148165
});
149-
150166
test('file contents should be fetched correctly', async () => {
151-
const vaultName = 'Vault10' as VaultName;
167+
const vaultName = 'vault' as VaultName;
152168
const vaultId = await polykeyAgent.vaultManager.createVault(vaultName);
153169
const secretName = 'secret';
154170
const secretContent = 'original secret';
155-
156171
await polykeyAgent.vaultManager.withVaults([vaultId], async (vault) => {
157172
await vaultOps.addSecret(vault, secretName, secretContent);
158173
});
159-
160-
command = ['secrets', 'edit', '-np', dataDir, `${vaultName}:${secretName}`];
161-
162-
const result = await testUtils.pkStdio([...command], {
174+
const command = [
175+
'secrets',
176+
'edit',
177+
'-np',
178+
dataDir,
179+
`${vaultName}:${secretName}`,
180+
];
181+
const result = await testUtils.pkStdio(command, {
163182
env: { PK_PASSWORD: password, EDITOR: editorView },
164183
cwd: dataDir,
165184
});
166185
expect(result.exitCode).toBe(0);
167-
168186
const fetchedSecret = await fs.promises.readFile(
169187
path.join(dataDir, 'secret'),
170188
);
171189
expect(fetchedSecret.toString()).toEqual(secretContent);
172-
173190
await polykeyAgent.vaultManager.withVaults([vaultId], async (vault) => {
174191
const contents = await vaultOps.getSecret(vault, secretName);
175192
expect(contents.toString()).toStrictEqual(`${editedContent}\n`);

0 commit comments

Comments
 (0)