Skip to content

Commit 53da7e7

Browse files
committed
test: deduplicate test code
1 parent 9598bd0 commit 53da7e7

File tree

10 files changed

+65
-204
lines changed

10 files changed

+65
-204
lines changed

internal/controllers/account_test.go

Lines changed: 9 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package controllers_test
22

33
import (
4-
"encoding/json"
54
"fmt"
65
"net/http"
76
"testing"
@@ -27,10 +26,7 @@ func TestGetAccounts(t *testing.T) {
2726
recorder := test.Request(t, "GET", "/v1/budgets/1/accounts", "")
2827

2928
var response AccountListResponse
30-
err := json.NewDecoder(recorder.Body).Decode(&response)
31-
if err != nil {
32-
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
33-
}
29+
test.DecodeResponse(t, &recorder, &response)
3430

3531
assert.Equal(t, 200, recorder.Code)
3632
if !assert.Len(t, response.Data, 3) {
@@ -100,10 +96,7 @@ func TestCreateAccount(t *testing.T) {
10096
test.AssertHTTPStatus(t, http.StatusCreated, &recorder)
10197

10298
var apiAccount AccountDetailResponse
103-
err := json.NewDecoder(recorder.Body).Decode(&apiAccount)
104-
if err != nil {
105-
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
106-
}
99+
test.DecodeResponse(t, &recorder, &apiAccount)
107100

108101
var dbAccount models.Account
109102
models.DB.First(&dbAccount, apiAccount.Data.ID)
@@ -124,10 +117,7 @@ func TestGetAccount(t *testing.T) {
124117
test.AssertHTTPStatus(t, http.StatusOK, &recorder)
125118

126119
var account AccountDetailResponse
127-
err := json.NewDecoder(recorder.Body).Decode(&account)
128-
if err != nil {
129-
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
130-
}
120+
test.DecodeResponse(t, &recorder, &account)
131121

132122
var dbAccount models.Account
133123
models.DB.First(&dbAccount, account.Data.ID)
@@ -142,10 +132,7 @@ func TestGetAccountTransactions(t *testing.T) {
142132
recorder := test.Request(t, "GET", "/v1/budgets/1/accounts/1/transactions", "")
143133

144134
var response TransactionListResponse
145-
err := json.NewDecoder(recorder.Body).Decode(&response)
146-
if err != nil {
147-
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
148-
}
135+
test.DecodeResponse(t, &recorder, &response)
149136

150137
assert.Equal(t, 200, recorder.Code)
151138
assert.Len(t, response.Data, 3)
@@ -161,20 +148,14 @@ func TestUpdateAccount(t *testing.T) {
161148
test.AssertHTTPStatus(t, http.StatusCreated, &recorder)
162149

163150
var account AccountDetailResponse
164-
err := json.NewDecoder(recorder.Body).Decode(&account)
165-
if err != nil {
166-
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
167-
}
151+
test.DecodeResponse(t, &recorder, &account)
168152

169153
path := fmt.Sprintf("/v1/budgets/1/accounts/%v", account.Data.ID)
170154
recorder = test.Request(t, "PATCH", path, `{ "name": "Updated new account for testing" }`)
171155
test.AssertHTTPStatus(t, http.StatusOK, &recorder)
172156

173157
var updatedAccount AccountDetailResponse
174-
err = json.NewDecoder(recorder.Body).Decode(&updatedAccount)
175-
if err != nil {
176-
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
177-
}
158+
test.DecodeResponse(t, &recorder, &updatedAccount)
178159

179160
assert.Equal(t, "Updated new account for testing", updatedAccount.Data.Name)
180161
}
@@ -184,10 +165,7 @@ func TestUpdateAccountBroken(t *testing.T) {
184165
test.AssertHTTPStatus(t, http.StatusCreated, &recorder)
185166

186167
var account AccountDetailResponse
187-
err := json.NewDecoder(recorder.Body).Decode(&account)
188-
if err != nil {
189-
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
190-
}
168+
test.DecodeResponse(t, &recorder, &account)
191169

192170
path := fmt.Sprintf("/v1/budgets/1/accounts/%v", account.Data.ID)
193171
recorder = test.Request(t, "PATCH", path, `{ "name": 2" }`)
@@ -220,10 +198,7 @@ func TestDeleteAccountsAndEmptyList(t *testing.T) {
220198

221199
recorder = test.Request(t, "GET", "/v1/budgets/1/accounts", "")
222200
var apiResponse AccountListResponse
223-
err := json.NewDecoder(recorder.Body).Decode(&apiResponse)
224-
if err != nil {
225-
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
226-
}
201+
test.DecodeResponse(t, &recorder, &apiResponse)
227202

228203
// Verify that the account list is an empty list, not null
229204
assert.NotNil(t, apiResponse.Data)
@@ -240,10 +215,7 @@ func TestDeleteAccountWithBody(t *testing.T) {
240215
test.AssertHTTPStatus(t, http.StatusCreated, &recorder)
241216

242217
var account AccountDetailResponse
243-
err := json.NewDecoder(recorder.Body).Decode(&account)
244-
if err != nil {
245-
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
246-
}
218+
test.DecodeResponse(t, &recorder, &account)
247219

248220
path := fmt.Sprintf("/v1/budgets/1/accounts/%v", account.Data.ID)
249221
recorder = test.Request(t, "DELETE", path, `{ "name": "test name 23" }`)

internal/controllers/allocation_test.go

Lines changed: 7 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package controllers_test
22

33
import (
4-
"encoding/json"
54
"fmt"
65
"net/http"
76
"testing"
@@ -27,10 +26,7 @@ func TestGetAllocations(t *testing.T) {
2726
recorder := test.Request(t, "GET", "/v1/budgets/1/categories/1/envelopes/1/allocations", "")
2827

2928
var response AllocationListResponse
30-
err := json.NewDecoder(recorder.Body).Decode(&response)
31-
if err != nil {
32-
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
33-
}
29+
test.DecodeResponse(t, &recorder, &response)
3430

3531
assert.Equal(t, 200, recorder.Code)
3632
if !assert.Len(t, response.Data, 3) {
@@ -63,10 +59,7 @@ func TestCreateAllocation(t *testing.T) {
6359
test.AssertHTTPStatus(t, http.StatusCreated, &recorder)
6460

6561
var apiAllocation AllocationDetailResponse
66-
err := json.NewDecoder(recorder.Body).Decode(&apiAllocation)
67-
if err != nil {
68-
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
69-
}
62+
test.DecodeResponse(t, &recorder, &apiAllocation)
7063

7164
var dbAllocation models.Allocation
7265
models.DB.First(&dbAllocation, apiAllocation.Data.ID)
@@ -107,10 +100,7 @@ func TestGetAllocation(t *testing.T) {
107100
test.AssertHTTPStatus(t, http.StatusOK, &recorder)
108101

109102
var allocation AllocationDetailResponse
110-
err := json.NewDecoder(recorder.Body).Decode(&allocation)
111-
if err != nil {
112-
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
113-
}
103+
test.DecodeResponse(t, &recorder, &allocation)
114104

115105
var dbAllocation models.Allocation
116106
models.DB.First(&dbAllocation, allocation.Data.ID)
@@ -123,20 +113,14 @@ func TestUpdateAllocation(t *testing.T) {
123113
test.AssertHTTPStatus(t, http.StatusCreated, &recorder)
124114

125115
var allocation AllocationDetailResponse
126-
err := json.NewDecoder(recorder.Body).Decode(&allocation)
127-
if err != nil {
128-
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
129-
}
116+
test.DecodeResponse(t, &recorder, &allocation)
130117

131118
path := fmt.Sprintf("/v1/budgets/1/categories/1/envelopes/1/allocations/%v", allocation.Data.ID)
132119
recorder = test.Request(t, "PATCH", path, `{ "year": 2022 }`)
133120
test.AssertHTTPStatus(t, http.StatusOK, &recorder)
134121

135122
var updatedAllocation AllocationDetailResponse
136-
err = json.NewDecoder(recorder.Body).Decode(&updatedAllocation)
137-
if err != nil {
138-
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
139-
}
123+
test.DecodeResponse(t, &recorder, &updatedAllocation)
140124

141125
assert.Equal(t, uint(2022), updatedAllocation.Data.Year)
142126
}
@@ -146,10 +130,7 @@ func TestUpdateAllocationBroken(t *testing.T) {
146130
test.AssertHTTPStatus(t, http.StatusCreated, &recorder)
147131

148132
var allocation AllocationDetailResponse
149-
err := json.NewDecoder(recorder.Body).Decode(&allocation)
150-
if err != nil {
151-
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
152-
}
133+
test.DecodeResponse(t, &recorder, &allocation)
153134

154135
path := fmt.Sprintf("/v1/budgets/1/categories/1/envelopes/1/allocations/%v", allocation.Data.ID)
155136
recorder = test.Request(t, "PATCH", path, `{ "name": 2" }`)
@@ -176,10 +157,7 @@ func TestDeleteAllocationWithBody(t *testing.T) {
176157
test.AssertHTTPStatus(t, http.StatusCreated, &recorder)
177158

178159
var allocation AllocationDetailResponse
179-
err := json.NewDecoder(recorder.Body).Decode(&allocation)
180-
if err != nil {
181-
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
182-
}
160+
test.DecodeResponse(t, &recorder, &allocation)
183161

184162
path := fmt.Sprintf("/v1/budgets/1/categories/1/envelopes/1/allocations/%v", allocation.Data.ID)
185163
recorder = test.Request(t, "DELETE", path, `{ "name": "test name 23" }`)

internal/controllers/budget_test.go

Lines changed: 8 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package controllers_test
22

33
import (
4-
"encoding/json"
54
"fmt"
65
"net/http"
76
"testing"
@@ -26,10 +25,7 @@ func TestGetBudgets(t *testing.T) {
2625
recorder := test.Request(t, "GET", "/v1/budgets", "")
2726

2827
var response BudgetListResponse
29-
err := json.NewDecoder(recorder.Body).Decode(&response)
30-
if err != nil {
31-
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
32-
}
28+
test.DecodeResponse(t, &recorder, &response)
3329

3430
assert.Equal(t, 200, recorder.Code)
3531
if !assert.Len(t, response.Data, 1) {
@@ -57,10 +53,7 @@ func TestCreateBudget(t *testing.T) {
5753
test.AssertHTTPStatus(t, http.StatusCreated, &recorder)
5854

5955
var apiBudget BudgetDetailResponse
60-
err := json.NewDecoder(recorder.Body).Decode(&apiBudget)
61-
if err != nil {
62-
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
63-
}
56+
test.DecodeResponse(t, &recorder, &apiBudget)
6457

6558
var dbBudget models.Budget
6659
models.DB.First(&dbBudget, apiBudget.Data.ID)
@@ -83,10 +76,7 @@ func TestGetBudget(t *testing.T) {
8376
test.AssertHTTPStatus(t, http.StatusOK, &recorder)
8477

8578
var budget BudgetDetailResponse
86-
err := json.NewDecoder(recorder.Body).Decode(&budget)
87-
if err != nil {
88-
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
89-
}
79+
test.DecodeResponse(t, &recorder, &budget)
9080

9181
var dbBudget models.Budget
9282
models.DB.First(&dbBudget, budget.Data.ID)
@@ -99,20 +89,14 @@ func TestUpdateBudget(t *testing.T) {
9989
test.AssertHTTPStatus(t, http.StatusCreated, &recorder)
10090

10191
var budget BudgetDetailResponse
102-
err := json.NewDecoder(recorder.Body).Decode(&budget)
103-
if err != nil {
104-
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
105-
}
92+
test.DecodeResponse(t, &recorder, &budget)
10693

10794
path := fmt.Sprintf("/v1/budgets/%v", budget.Data.ID)
10895
recorder = test.Request(t, "PATCH", path, `{ "name": "Updated new budget" }`)
10996
test.AssertHTTPStatus(t, http.StatusOK, &recorder)
11097

11198
var updatedBudget BudgetDetailResponse
112-
err = json.NewDecoder(recorder.Body).Decode(&updatedBudget)
113-
if err != nil {
114-
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
115-
}
99+
test.DecodeResponse(t, &recorder, &updatedBudget)
116100

117101
assert.Equal(t, budget.Data.Note, updatedBudget.Data.Note)
118102
assert.Equal(t, "Updated new budget", updatedBudget.Data.Name)
@@ -123,10 +107,7 @@ func TestUpdateBudgetBroken(t *testing.T) {
123107
test.AssertHTTPStatus(t, http.StatusCreated, &recorder)
124108

125109
var budget BudgetDetailResponse
126-
err := json.NewDecoder(recorder.Body).Decode(&budget)
127-
if err != nil {
128-
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
129-
}
110+
test.DecodeResponse(t, &recorder, &budget)
130111

131112
path := fmt.Sprintf("/v1/budgets/%v", budget.Data.ID)
132113
recorder = test.Request(t, "PATCH", path, `{ "name": 2" }`)
@@ -143,10 +124,7 @@ func TestDeleteBudget(t *testing.T) {
143124
test.AssertHTTPStatus(t, http.StatusCreated, &recorder)
144125

145126
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-
}
127+
test.DecodeResponse(t, &recorder, &budget)
150128

151129
path := fmt.Sprintf("/v1/budgets/%v", budget.Data.ID)
152130
recorder = test.Request(t, "DELETE", path, "")
@@ -163,10 +141,7 @@ func TestDeleteBudgetWithBody(t *testing.T) {
163141
test.AssertHTTPStatus(t, http.StatusCreated, &recorder)
164142

165143
var budget BudgetDetailResponse
166-
err := json.NewDecoder(recorder.Body).Decode(&budget)
167-
if err != nil {
168-
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
169-
}
144+
test.DecodeResponse(t, &recorder, &budget)
170145

171146
path := fmt.Sprintf("/v1/budgets/%v", budget.Data.ID)
172147
recorder = test.Request(t, "DELETE", path, `{ "name": "test name 23" }`)

internal/controllers/category_test.go

Lines changed: 7 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package controllers_test
22

33
import (
4-
"encoding/json"
54
"fmt"
65
"net/http"
76
"testing"
@@ -26,10 +25,7 @@ func TestGetCategories(t *testing.T) {
2625
recorder := test.Request(t, "GET", "/v1/budgets/1/categories", "")
2726

2827
var response CategoryListResponse
29-
err := json.NewDecoder(recorder.Body).Decode(&response)
30-
if err != nil {
31-
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body.String(), err)
32-
}
28+
test.DecodeResponse(t, &recorder, &response)
3329

3430
assert.Equal(t, 200, recorder.Code)
3531
if !assert.Len(t, response.Data, 1) {
@@ -67,10 +63,7 @@ func TestCreateCategory(t *testing.T) {
6763
test.AssertHTTPStatus(t, http.StatusCreated, &recorder)
6864

6965
var apiCategory CategoryDetailResponse
70-
err := json.NewDecoder(recorder.Body).Decode(&apiCategory)
71-
if err != nil {
72-
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
73-
}
66+
test.DecodeResponse(t, &recorder, &apiCategory)
7467

7568
var dbCategory models.Category
7669
models.DB.First(&dbCategory, apiCategory.Data.ID)
@@ -93,10 +86,7 @@ func TestGetCategory(t *testing.T) {
9386
test.AssertHTTPStatus(t, http.StatusOK, &recorder)
9487

9588
var category CategoryDetailResponse
96-
err := json.NewDecoder(recorder.Body).Decode(&category)
97-
if err != nil {
98-
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
99-
}
89+
test.DecodeResponse(t, &recorder, &category)
10090

10191
var dbCategory models.Category
10292
models.DB.First(&dbCategory, category.Data.ID)
@@ -109,20 +99,14 @@ func TestUpdateCategory(t *testing.T) {
10999
test.AssertHTTPStatus(t, http.StatusCreated, &recorder)
110100

111101
var category CategoryDetailResponse
112-
err := json.NewDecoder(recorder.Body).Decode(&category)
113-
if err != nil {
114-
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
115-
}
102+
test.DecodeResponse(t, &recorder, &category)
116103

117104
path := fmt.Sprintf("/v1/budgets/1/categories/%v", category.Data.ID)
118105
recorder = test.Request(t, "PATCH", path, `{ "name": "Updated new category for testing" }`)
119106
test.AssertHTTPStatus(t, http.StatusOK, &recorder)
120107

121108
var updatedCategory CategoryDetailResponse
122-
err = json.NewDecoder(recorder.Body).Decode(&updatedCategory)
123-
if err != nil {
124-
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
125-
}
109+
test.DecodeResponse(t, &recorder, &updatedCategory)
126110

127111
assert.Equal(t, category.Data.Note, updatedCategory.Data.Note)
128112
assert.Equal(t, "Updated new category for testing", updatedCategory.Data.Name)
@@ -133,10 +117,7 @@ func TestUpdateCategoryBroken(t *testing.T) {
133117
test.AssertHTTPStatus(t, http.StatusCreated, &recorder)
134118

135119
var category CategoryDetailResponse
136-
err := json.NewDecoder(recorder.Body).Decode(&category)
137-
if err != nil {
138-
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
139-
}
120+
test.DecodeResponse(t, &recorder, &category)
140121

141122
path := fmt.Sprintf("/v1/budgets/1/categories/%v", category.Data.ID)
142123
recorder = test.Request(t, "PATCH", path, `{ "name": 2" }`)
@@ -163,10 +144,7 @@ func TestDeleteCategoryWithBody(t *testing.T) {
163144
test.AssertHTTPStatus(t, http.StatusCreated, &recorder)
164145

165146
var category CategoryDetailResponse
166-
err := json.NewDecoder(recorder.Body).Decode(&category)
167-
if err != nil {
168-
assert.Fail(t, "Parsing error", "Unable to parse response from server %q into APIListResponse, '%v'", recorder.Body, err)
169-
}
147+
test.DecodeResponse(t, &recorder, &category)
170148

171149
path := fmt.Sprintf("/v1/budgets/1/categories/%v", category.Data.ID)
172150
recorder = test.Request(t, "DELETE", path, `{ "name": "test name 23" }`)

0 commit comments

Comments
 (0)