@@ -2,13 +2,30 @@ package controllers_test
22
33import (
44 "net/http"
5+ "testing"
56 "time"
67
78 "github.com/envelope-zero/backend/pkg/controllers"
9+ "github.com/envelope-zero/backend/pkg/models"
810 "github.com/envelope-zero/backend/pkg/test"
11+ "github.com/google/uuid"
912 "github.com/stretchr/testify/assert"
1013)
1114
15+ func createTestCategory (t * testing.T , c models.CategoryCreate ) controllers.CategoryResponse {
16+ if c .BudgetID == uuid .Nil {
17+ c .BudgetID = createTestBudget (t , models.BudgetCreate {Name : "Testing budget" }).Data .ID
18+ }
19+
20+ r := test .Request (t , http .MethodPost , "http://example.com/v1/categories" , c )
21+ test .AssertHTTPStatus (t , http .StatusCreated , & r )
22+
23+ var category controllers.CategoryResponse
24+ test .DecodeResponse (t , & r , & category )
25+
26+ return category
27+ }
28+
1229func (suite * TestSuiteEnv ) TestGetCategories () {
1330 recorder := test .Request (suite .T (), "GET" , "http://example.com/v1/categories" , "" )
1431
@@ -30,6 +47,13 @@ func (suite *TestSuiteEnv) TestGetCategories() {
3047 assert .LessOrEqual (suite .T (), diff , test .TOLERANCE )
3148}
3249
50+ func (suite * TestSuiteEnv ) TestGetCategory () {
51+ category := createTestCategory (suite .T (), models.CategoryCreate {Name : "Catch me if you can!" })
52+ recorder := test .Request (suite .T (), http .MethodGet , category .Data .Links .Self , "" )
53+
54+ test .AssertHTTPStatus (suite .T (), http .StatusOK , & recorder )
55+ }
56+
3357func (suite * TestSuiteEnv ) TestNoCategoryNotFound () {
3458 recorder := test .Request (suite .T (), "GET" , "http://example.com/v1/categories/4e743e94-6a4b-44d6-aba5-d77c87103ff7" , "" )
3559
@@ -69,24 +93,15 @@ func (suite *TestSuiteEnv) TestCategoryInvalidIDs() {
6993}
7094
7195func (suite * TestSuiteEnv ) TestCreateCategory () {
72- recorder := test .Request (suite .T (), "POST" , "http://example.com/v1/categories" , `{ "name": "New Category", "note": "More tests something something" }` )
73- test .AssertHTTPStatus (suite .T (), http .StatusCreated , & recorder )
74-
75- var categoryObject , savedCategory controllers.CategoryResponse
76- test .DecodeResponse (suite .T (), & recorder , & categoryObject )
77-
78- recorder = test .Request (suite .T (), "GET" , categoryObject .Data .Links .Self , "" )
79- test .DecodeResponse (suite .T (), & recorder , & savedCategory )
80-
81- assert .Equal (suite .T (), savedCategory , categoryObject )
96+ _ = createTestCategory (suite .T (), models.CategoryCreate {Name : "New Category" , Note : "Something to test creation" })
8297}
8398
8499func (suite * TestSuiteEnv ) TestCreateBrokenCategory () {
85100 recorder := test .Request (suite .T (), "POST" , "http://example.com/v1/categories" , `{ "createdAt": "New Category", "note": "More tests for categories to ensure less brokenness something" }` )
86101 test .AssertHTTPStatus (suite .T (), http .StatusBadRequest , & recorder )
87102}
88103
89- func (suite * TestSuiteEnv ) TestCreateBrokenNoBudget () {
104+ func (suite * TestSuiteEnv ) TestCreateBudgetDoesNotExist () {
90105 recorder := test .Request (suite .T (), "POST" , "http://example.com/v1/categories" , `{ "budgetId": "f8c74664-9b79-4e15-8d3d-4618f3e3c230" }` )
91106 test .AssertHTTPStatus (suite .T (), http .StatusNotFound , & recorder )
92107}
@@ -97,13 +112,9 @@ func (suite *TestSuiteEnv) TestCreateCategoryNoBody() {
97112}
98113
99114func (suite * TestSuiteEnv ) TestUpdateCategory () {
100- recorder := test .Request (suite .T (), "POST" , "http://example.com/v1/categories" , `{ "name": "New Category", "note": "More tests something something" }` )
101- test .AssertHTTPStatus (suite .T (), http .StatusCreated , & recorder )
115+ category := createTestCategory (suite .T (), models.CategoryCreate {Name : "New category" , Note : "Mor(r)e tests" })
102116
103- var category controllers.CategoryResponse
104- test .DecodeResponse (suite .T (), & recorder , & category )
105-
106- recorder = test .Request (suite .T (), "PATCH" , category .Data .Links .Self , `{ "name": "Updated new category for testing" }` )
117+ recorder := test .Request (suite .T (), "PATCH" , category .Data .Links .Self , `{ "name": "Updated new category for testing" }` )
107118 test .AssertHTTPStatus (suite .T (), http .StatusOK , & recorder )
108119
109120 var updatedCategory controllers.CategoryResponse
@@ -114,13 +125,9 @@ func (suite *TestSuiteEnv) TestUpdateCategory() {
114125}
115126
116127func (suite * TestSuiteEnv ) TestUpdateCategoryBroken () {
117- recorder := test .Request (suite .T (), "POST" , "http://example.com/v1/categories" , `{ "name": "New Category", "note": "More tests something something" }` )
118- test .AssertHTTPStatus (suite .T (), http .StatusCreated , & recorder )
128+ category := createTestCategory (suite .T (), models.CategoryCreate {Name : "New category" , Note : "Mor(r)e tests" })
119129
120- var category controllers.CategoryResponse
121- test .DecodeResponse (suite .T (), & recorder , & category )
122-
123- recorder = test .Request (suite .T (), "PATCH" , category .Data .Links .Self , `{ "name": 2" }` )
130+ recorder := test .Request (suite .T (), "PATCH" , category .Data .Links .Self , `{ "name": 2" }` )
124131 test .AssertHTTPStatus (suite .T (), http .StatusBadRequest , & recorder )
125132}
126133
@@ -130,13 +137,9 @@ func (suite *TestSuiteEnv) TestUpdateNonExistingCategory() {
130137}
131138
132139func (suite * TestSuiteEnv ) TestDeleteCategory () {
133- recorder := test .Request (suite .T (), "POST" , "http://example.com/v1/categories" , `{ "name": "Delete me now!" }` )
134- test .AssertHTTPStatus (suite .T (), http .StatusCreated , & recorder )
135-
136- var category controllers.CategoryResponse
137- test .DecodeResponse (suite .T (), & recorder , & category )
140+ category := createTestCategory (suite .T (), models.CategoryCreate {Name : "Delete me now!" })
138141
139- recorder = test .Request (suite .T (), "DELETE" , category .Data .Links .Self , "" )
142+ recorder : = test .Request (suite .T (), "DELETE" , category .Data .Links .Self , "" )
140143 test .AssertHTTPStatus (suite .T (), http .StatusNoContent , & recorder )
141144}
142145
@@ -146,12 +149,8 @@ func (suite *TestSuiteEnv) TestDeleteNonExistingCategory() {
146149}
147150
148151func (suite * TestSuiteEnv ) TestDeleteCategoryWithBody () {
149- recorder := test .Request (suite .T (), "POST" , "http://example.com/v1/categories" , `{ "name": "Delete me now!" }` )
150- test .AssertHTTPStatus (suite .T (), http .StatusCreated , & recorder )
151-
152- var category controllers.CategoryResponse
153- test .DecodeResponse (suite .T (), & recorder , & category )
152+ category := createTestCategory (suite .T (), models.CategoryCreate {Name : "Delete me now!" })
154153
155- recorder = test .Request (suite .T (), "DELETE" , category .Data .Links .Self , `{ "name": "test name 23" }` )
154+ recorder : = test .Request (suite .T (), "DELETE" , category .Data .Links .Self , `{ "name": "test name 23" }` )
156155 test .AssertHTTPStatus (suite .T (), http .StatusNoContent , & recorder )
157156}
0 commit comments