Skip to content

Commit 7a28eea

Browse files
committed
test: improve tests with better output and less cross-dependencies
1 parent d62923b commit 7a28eea

File tree

8 files changed

+81
-55
lines changed

8 files changed

+81
-55
lines changed

internal/controllers/account_test.go

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,13 @@ func TestGetAccounts(t *testing.T) {
2929
var response AccountListResponse
3030
err := json.NewDecoder(recorder.Body).Decode(&response)
3131
if err != nil {
32-
assert.Fail(t, "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
32+
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
3333
}
3434

3535
assert.Equal(t, 200, recorder.Code)
36-
assert.Len(t, response.Data, 3)
36+
if !assert.Len(t, response.Data, 3) {
37+
assert.FailNow(t, "Response does not have exactly 3 items")
38+
}
3739

3840
bankAccount := response.Data[0]
3941
assert.Equal(t, uint64(1), bankAccount.BudgetID)
@@ -91,7 +93,7 @@ func TestCreateAccount(t *testing.T) {
9193
var apiAccount AccountDetailResponse
9294
err := json.NewDecoder(recorder.Body).Decode(&apiAccount)
9395
if err != nil {
94-
assert.Fail(t, "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
96+
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
9597
}
9698

9799
var dbAccount models.Account
@@ -115,7 +117,7 @@ func TestGetAccount(t *testing.T) {
115117
var account AccountDetailResponse
116118
err := json.NewDecoder(recorder.Body).Decode(&account)
117119
if err != nil {
118-
assert.Fail(t, "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
120+
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
119121
}
120122

121123
var dbAccount models.Account
@@ -133,7 +135,7 @@ func TestGetAccountTransactions(t *testing.T) {
133135
var response TransactionListResponse
134136
err := json.NewDecoder(recorder.Body).Decode(&response)
135137
if err != nil {
136-
assert.Fail(t, "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
138+
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
137139
}
138140

139141
assert.Equal(t, 200, recorder.Code)
@@ -160,7 +162,7 @@ func TestUpdateAccount(t *testing.T) {
160162
var account AccountDetailResponse
161163
err := json.NewDecoder(recorder.Body).Decode(&account)
162164
if err != nil {
163-
assert.Fail(t, "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
165+
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
164166
}
165167

166168
path := fmt.Sprintf("/v1/budgets/1/accounts/%v", account.Data.ID)
@@ -170,7 +172,7 @@ func TestUpdateAccount(t *testing.T) {
170172
var updatedAccount AccountDetailResponse
171173
err = json.NewDecoder(recorder.Body).Decode(&updatedAccount)
172174
if err != nil {
173-
assert.Fail(t, "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
175+
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
174176
}
175177

176178
assert.Equal(t, "Updated new account for testing", updatedAccount.Data.Name)
@@ -183,7 +185,7 @@ func TestUpdateAccountBroken(t *testing.T) {
183185
var account AccountDetailResponse
184186
err := json.NewDecoder(recorder.Body).Decode(&account)
185187
if err != nil {
186-
assert.Fail(t, "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
188+
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
187189
}
188190

189191
path := fmt.Sprintf("/v1/budgets/1/accounts/%v", account.Data.ID)
@@ -219,7 +221,7 @@ func TestDeleteAccountsAndEmptyList(t *testing.T) {
219221
var apiResponse AccountListResponse
220222
err := json.NewDecoder(recorder.Body).Decode(&apiResponse)
221223
if err != nil {
222-
assert.Fail(t, "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
224+
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
223225
}
224226

225227
// Verify that the account list is an empty list, not null
@@ -239,7 +241,7 @@ func TestDeleteAccountWithBody(t *testing.T) {
239241
var account AccountDetailResponse
240242
err := json.NewDecoder(recorder.Body).Decode(&account)
241243
if err != nil {
242-
assert.Fail(t, "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
244+
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
243245
}
244246

245247
path := fmt.Sprintf("/v1/budgets/1/accounts/%v", account.Data.ID)

internal/controllers/allocation_test.go

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,14 @@ func TestGetAllocations(t *testing.T) {
2929
var response AllocationListResponse
3030
err := json.NewDecoder(recorder.Body).Decode(&response)
3131
if err != nil {
32-
assert.Fail(t, "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
32+
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
3333
}
3434

3535
assert.Equal(t, 200, recorder.Code)
36-
assert.Len(t, response.Data, 3)
36+
if !assert.Len(t, response.Data, 3) {
37+
assert.FailNow(t, "Response does not have exactly 3 items")
38+
}
39+
3740
assert.Equal(t, uint64(1), response.Data[0].EnvelopeID)
3841
assert.Equal(t, uint8(1), response.Data[0].Month)
3942
assert.Equal(t, uint(2022), response.Data[0].Year)
@@ -62,7 +65,7 @@ func TestCreateAllocation(t *testing.T) {
6265
var apiAllocation AllocationDetailResponse
6366
err := json.NewDecoder(recorder.Body).Decode(&apiAllocation)
6467
if err != nil {
65-
assert.Fail(t, "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
68+
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
6669
}
6770

6871
var dbAllocation models.Allocation
@@ -106,7 +109,7 @@ func TestGetAllocation(t *testing.T) {
106109
var allocation AllocationDetailResponse
107110
err := json.NewDecoder(recorder.Body).Decode(&allocation)
108111
if err != nil {
109-
assert.Fail(t, "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
112+
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
110113
}
111114

112115
var dbAllocation models.Allocation
@@ -122,7 +125,7 @@ func TestUpdateAllocation(t *testing.T) {
122125
var allocation AllocationDetailResponse
123126
err := json.NewDecoder(recorder.Body).Decode(&allocation)
124127
if err != nil {
125-
assert.Fail(t, "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
128+
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
126129
}
127130

128131
path := fmt.Sprintf("/v1/budgets/1/categories/1/envelopes/1/allocations/%v", allocation.Data.ID)
@@ -132,7 +135,7 @@ func TestUpdateAllocation(t *testing.T) {
132135
var updatedAllocation AllocationDetailResponse
133136
err = json.NewDecoder(recorder.Body).Decode(&updatedAllocation)
134137
if err != nil {
135-
assert.Fail(t, "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
138+
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
136139
}
137140

138141
assert.Equal(t, uint(2022), updatedAllocation.Data.Year)
@@ -145,7 +148,7 @@ func TestUpdateAllocationBroken(t *testing.T) {
145148
var allocation AllocationDetailResponse
146149
err := json.NewDecoder(recorder.Body).Decode(&allocation)
147150
if err != nil {
148-
assert.Fail(t, "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
151+
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
149152
}
150153

151154
path := fmt.Sprintf("/v1/budgets/1/categories/1/envelopes/1/allocations/%v", allocation.Data.ID)
@@ -175,7 +178,7 @@ func TestDeleteAllocationWithBody(t *testing.T) {
175178
var allocation AllocationDetailResponse
176179
err := json.NewDecoder(recorder.Body).Decode(&allocation)
177180
if err != nil {
178-
assert.Fail(t, "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
181+
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
179182
}
180183

181184
path := fmt.Sprintf("/v1/budgets/1/categories/1/envelopes/1/allocations/%v", allocation.Data.ID)

internal/controllers/budget_test.go

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,14 @@ func TestGetBudgets(t *testing.T) {
2828
var response BudgetListResponse
2929
err := json.NewDecoder(recorder.Body).Decode(&response)
3030
if err != nil {
31-
assert.Fail(t, "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
31+
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
3232
}
3333

3434
assert.Equal(t, 200, recorder.Code)
35-
assert.Len(t, response.Data, 1)
35+
if !assert.Len(t, response.Data, 1) {
36+
assert.FailNow(t, "Response does not have exactly 1 item")
37+
}
38+
3639
assert.Equal(t, "Testing Budget", response.Data[0].Name)
3740
assert.Equal(t, "GNU: Terry Pratchett", response.Data[0].Note)
3841

@@ -56,7 +59,7 @@ func TestCreateBudget(t *testing.T) {
5659
var apiBudget BudgetDetailResponse
5760
err := json.NewDecoder(recorder.Body).Decode(&apiBudget)
5861
if err != nil {
59-
assert.Fail(t, "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
62+
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
6063
}
6164

6265
var dbBudget models.Budget
@@ -82,7 +85,7 @@ func TestGetBudget(t *testing.T) {
8285
var budget BudgetDetailResponse
8386
err := json.NewDecoder(recorder.Body).Decode(&budget)
8487
if err != nil {
85-
assert.Fail(t, "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
88+
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
8689
}
8790

8891
var dbBudget models.Budget
@@ -98,7 +101,7 @@ func TestUpdateBudget(t *testing.T) {
98101
var budget BudgetDetailResponse
99102
err := json.NewDecoder(recorder.Body).Decode(&budget)
100103
if err != nil {
101-
assert.Fail(t, "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
104+
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
102105
}
103106

104107
path := fmt.Sprintf("/v1/budgets/%v", budget.Data.ID)
@@ -108,7 +111,7 @@ func TestUpdateBudget(t *testing.T) {
108111
var updatedBudget BudgetDetailResponse
109112
err = json.NewDecoder(recorder.Body).Decode(&updatedBudget)
110113
if err != nil {
111-
assert.Fail(t, "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
114+
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
112115
}
113116

114117
assert.Equal(t, budget.Data.Note, updatedBudget.Data.Note)
@@ -122,7 +125,7 @@ func TestUpdateBudgetBroken(t *testing.T) {
122125
var budget BudgetDetailResponse
123126
err := json.NewDecoder(recorder.Body).Decode(&budget)
124127
if err != nil {
125-
assert.Fail(t, "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
128+
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
126129
}
127130

128131
path := fmt.Sprintf("/v1/budgets/%v", budget.Data.ID)
@@ -136,7 +139,17 @@ func TestUpdateNonExistingBudget(t *testing.T) {
136139
}
137140

138141
func TestDeleteBudget(t *testing.T) {
139-
recorder := test.Request(t, "DELETE", "/v1/budgets/1", "")
142+
recorder := test.Request(t, "POST", "/v1/budgets", `{ "name": "Delete me now!" }`)
143+
test.AssertHTTPStatus(t, http.StatusCreated, &recorder)
144+
145+
var budget BudgetDetailResponse
146+
err := json.NewDecoder(recorder.Body).Decode(&budget)
147+
if err != nil {
148+
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
149+
}
150+
151+
path := fmt.Sprintf("/v1/budgets/%v", budget.Data.ID)
152+
recorder = test.Request(t, "DELETE", path, "")
140153
test.AssertHTTPStatus(t, http.StatusNoContent, &recorder)
141154
}
142155

@@ -152,7 +165,7 @@ func TestDeleteBudgetWithBody(t *testing.T) {
152165
var budget BudgetDetailResponse
153166
err := json.NewDecoder(recorder.Body).Decode(&budget)
154167
if err != nil {
155-
assert.Fail(t, "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
168+
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
156169
}
157170

158171
path := fmt.Sprintf("/v1/budgets/%v", budget.Data.ID)

internal/controllers/category_test.go

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,14 @@ func TestGetCategories(t *testing.T) {
2828
var response CategoryListResponse
2929
err := json.NewDecoder(recorder.Body).Decode(&response)
3030
if err != nil {
31-
assert.Fail(t, "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
31+
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body.String(), err)
3232
}
3333

3434
assert.Equal(t, 200, recorder.Code)
35-
assert.Len(t, response.Data, 1)
35+
if !assert.Len(t, response.Data, 1) {
36+
assert.FailNow(t, "Response does not have exactly 1 item")
37+
}
38+
3639
assert.Equal(t, uint64(1), response.Data[0].BudgetID)
3740
assert.Equal(t, "Running costs", response.Data[0].Name)
3841
assert.Equal(t, "For e.g. groceries and energy bills", response.Data[0].Note)
@@ -57,7 +60,7 @@ func TestCreateCategory(t *testing.T) {
5760
var apiCategory CategoryDetailResponse
5861
err := json.NewDecoder(recorder.Body).Decode(&apiCategory)
5962
if err != nil {
60-
assert.Fail(t, "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
63+
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
6164
}
6265

6366
var dbCategory models.Category
@@ -83,7 +86,7 @@ func TestGetCategory(t *testing.T) {
8386
var category CategoryDetailResponse
8487
err := json.NewDecoder(recorder.Body).Decode(&category)
8588
if err != nil {
86-
assert.Fail(t, "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
89+
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
8790
}
8891

8992
var dbCategory models.Category
@@ -99,7 +102,7 @@ func TestUpdateCategory(t *testing.T) {
99102
var category CategoryDetailResponse
100103
err := json.NewDecoder(recorder.Body).Decode(&category)
101104
if err != nil {
102-
assert.Fail(t, "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
105+
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
103106
}
104107

105108
path := fmt.Sprintf("/v1/budgets/1/categories/%v", category.Data.ID)
@@ -109,7 +112,7 @@ func TestUpdateCategory(t *testing.T) {
109112
var updatedCategory CategoryDetailResponse
110113
err = json.NewDecoder(recorder.Body).Decode(&updatedCategory)
111114
if err != nil {
112-
assert.Fail(t, "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
115+
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
113116
}
114117

115118
assert.Equal(t, category.Data.Note, updatedCategory.Data.Note)
@@ -123,7 +126,7 @@ func TestUpdateCategoryBroken(t *testing.T) {
123126
var category CategoryDetailResponse
124127
err := json.NewDecoder(recorder.Body).Decode(&category)
125128
if err != nil {
126-
assert.Fail(t, "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
129+
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
127130
}
128131

129132
path := fmt.Sprintf("/v1/budgets/1/categories/%v", category.Data.ID)
@@ -153,7 +156,7 @@ func TestDeleteCategoryWithBody(t *testing.T) {
153156
var category CategoryDetailResponse
154157
err := json.NewDecoder(recorder.Body).Decode(&category)
155158
if err != nil {
156-
assert.Fail(t, "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
159+
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
157160
}
158161

159162
path := fmt.Sprintf("/v1/budgets/1/categories/%v", category.Data.ID)

internal/controllers/envelope_test.go

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,14 @@ func TestGetEnvelopes(t *testing.T) {
2828
var response EnvelopeListResponse
2929
err := json.NewDecoder(recorder.Body).Decode(&response)
3030
if err != nil {
31-
assert.Fail(t, "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
31+
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
3232
}
3333

3434
assert.Equal(t, 200, recorder.Code)
35-
assert.Len(t, response.Data, 1)
35+
if !assert.Len(t, response.Data, 1) {
36+
assert.FailNow(t, "Response does not have exactly 1 item")
37+
}
38+
3639
assert.Equal(t, uint64(1), response.Data[0].CategoryID)
3740
assert.Equal(t, "Utilities", response.Data[0].Name)
3841
assert.Equal(t, "Energy & Water", response.Data[0].Note)
@@ -57,7 +60,7 @@ func TestCreateEnvelope(t *testing.T) {
5760
var apiEnvelope EnvelopeDetailResponse
5861
err := json.NewDecoder(recorder.Body).Decode(&apiEnvelope)
5962
if err != nil {
60-
assert.Fail(t, "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
63+
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
6164
}
6265

6366
var dbEnvelope models.Envelope
@@ -83,7 +86,7 @@ func TestGetEnvelope(t *testing.T) {
8386
var envelope EnvelopeDetailResponse
8487
err := json.NewDecoder(recorder.Body).Decode(&envelope)
8588
if err != nil {
86-
assert.Fail(t, "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
89+
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
8790
}
8891

8992
var dbEnvelope models.Envelope
@@ -99,7 +102,7 @@ func TestUpdateEnvelope(t *testing.T) {
99102
var envelope EnvelopeDetailResponse
100103
err := json.NewDecoder(recorder.Body).Decode(&envelope)
101104
if err != nil {
102-
assert.Fail(t, "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
105+
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
103106
}
104107

105108
path := fmt.Sprintf("/v1/budgets/1/categories/1/envelopes/%v", envelope.Data.ID)
@@ -109,7 +112,7 @@ func TestUpdateEnvelope(t *testing.T) {
109112
var updatedEnvelope EnvelopeDetailResponse
110113
err = json.NewDecoder(recorder.Body).Decode(&updatedEnvelope)
111114
if err != nil {
112-
assert.Fail(t, "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
115+
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
113116
}
114117

115118
assert.Equal(t, envelope.Data.Note, updatedEnvelope.Data.Note)
@@ -123,7 +126,7 @@ func TestUpdateEnvelopeBroken(t *testing.T) {
123126
var envelope EnvelopeDetailResponse
124127
err := json.NewDecoder(recorder.Body).Decode(&envelope)
125128
if err != nil {
126-
assert.Fail(t, "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
129+
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
127130
}
128131

129132
path := fmt.Sprintf("/v1/budgets/1/categories/1/envelopes/%v", envelope.Data.ID)
@@ -153,7 +156,7 @@ func TestDeleteEnvelopeWithBody(t *testing.T) {
153156
var envelope EnvelopeDetailResponse
154157
err := json.NewDecoder(recorder.Body).Decode(&envelope)
155158
if err != nil {
156-
assert.Fail(t, "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
159+
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
157160
}
158161

159162
path := fmt.Sprintf("/v1/budgets/1/categories/1/envelopes/%v", envelope.Data.ID)

0 commit comments

Comments
 (0)