(t *testing.T)
| 42 | } |
| 43 | |
| 44 | func Test_SetCommand(t *testing.T) { |
| 45 | t.Parallel() |
| 46 | t.Run("ok", func(t *testing.T) { |
| 47 | mock := teststore.NewMockStore() |
| 48 | out, err := execute(t, SetCommand(), mock, "foo=bar=bar=bar") |
| 49 | assert.NoError(t, err) |
| 50 | assert.Empty(t, out) |
| 51 | assertStoredValue(t, mock, "bar=bar=bar") |
| 52 | }) |
| 53 | t.Run("from STDIN", func(t *testing.T) { |
| 54 | mock := teststore.NewMockStore() |
| 55 | out, err := executeWithStdin(t, SetCommand(), mock, "my\nmultiline\nvalue", "foo") |
| 56 | assert.NoError(t, err) |
| 57 | assert.Empty(t, out) |
| 58 | assertStoredValue(t, mock, "my\nmultiline\nvalue") |
| 59 | }) |
| 60 | t.Run("with --metadata flag", func(t *testing.T) { |
| 61 | mock := teststore.NewMockStore() |
| 62 | out, err := execute(t, SetCommand(), mock, "foo=bar", "--metadata", "name=bob", "--metadata", "expiry=2027-03-01") |
| 63 | assert.NoError(t, err) |
| 64 | assert.Empty(t, out) |
| 65 | assertStoredValue(t, mock, "bar") |
| 66 | assertStoredMetadata(t, mock, map[string]string{"name": "bob", "expiry": "2027-03-01"}) |
| 67 | }) |
| 68 | t.Run("from STDIN JSON with value and metadata", func(t *testing.T) { |
| 69 | mock := teststore.NewMockStore() |
| 70 | out, err := executeWithStdin(t, SetCommand(), mock, `{"secret":"bar","metadata":{"name":"bob"}}`, "foo") |
| 71 | assert.NoError(t, err) |
| 72 | assert.Empty(t, out) |
| 73 | assertStoredValue(t, mock, "bar") |
| 74 | assertStoredMetadata(t, mock, map[string]string{"name": "bob"}) |
| 75 | }) |
| 76 | t.Run("from STDIN JSON merged with --metadata flag wins on collision", func(t *testing.T) { |
| 77 | mock := teststore.NewMockStore() |
| 78 | out, err := executeWithStdin(t, SetCommand(), mock, `{"secret":"bar","metadata":{"name":"bob","extra":"thing"}}`, "foo", "--metadata", "name=alice") |
| 79 | assert.NoError(t, err) |
| 80 | assert.Empty(t, out) |
| 81 | assertStoredValue(t, mock, "bar") |
| 82 | assertStoredMetadata(t, mock, map[string]string{"name": "alice", "extra": "thing"}) |
| 83 | }) |
| 84 | t.Run("invalid --metadata flag (no =)", func(t *testing.T) { |
| 85 | mock := teststore.NewMockStore() |
| 86 | _, err := execute(t, SetCommand(), mock, "foo=bar", "--metadata", "invalid") |
| 87 | assert.ErrorContains(t, err, "invalid metadata pair (expected key=value): invalid") |
| 88 | }) |
| 89 | t.Run("store error", func(t *testing.T) { |
| 90 | errSave := errors.New("save error") |
| 91 | mock := teststore.NewMockStore(teststore.WithStoreSaveErr(errSave)) |
| 92 | out, err := execute(t, SetCommand(), mock, "foo=bar") |
| 93 | assert.ErrorIs(t, err, errSave) |
| 94 | assert.Equal(t, "Error: "+errSave.Error()+"\n", out) |
| 95 | }) |
| 96 | t.Run("invalid id", func(t *testing.T) { |
| 97 | errSave := errors.New("save error") |
| 98 | mock := teststore.NewMockStore(teststore.WithStoreSaveErr(errSave)) |
| 99 | out, err := execute(t, SetCommand(), mock, "/foo=bar") |
| 100 | errInvalidID := secrets.ErrInvalidID{ID: "/foo"} |
| 101 | assert.ErrorIs(t, err, errInvalidID) |
nothing calls this directly
no test coverage detected