@@ -297,6 +297,35 @@ func (suite *TestSuiteStandard) TestMonthsV3PostFails() {
297297 }
298298}
299299
300+ // TestMonthsV3Sorting verifies that categories and months are sorted correctly
301+ func (suite * TestSuiteStandard ) TestMonthsV3Sorting () {
302+ budget := suite .createTestBudgetV3 (suite .T (), models.BudgetCreate {})
303+ categoryU := suite .createTestCategoryV3 (suite .T (), controllers.CategoryCreateV3 {BudgetID : budget .Data .ID , Name : "Upkeep" })
304+ envelopeU := suite .createTestEnvelopeV3 (suite .T (), controllers.EnvelopeCreateV3 {CategoryID : categoryU .Data .ID , Name : "Utilities" })
305+ envelopeM := suite .createTestEnvelopeV3 (suite .T (), controllers.EnvelopeCreateV3 {CategoryID : categoryU .Data .ID , Name : "Muppets" })
306+
307+ categoryA := suite .createTestCategoryV3 (suite .T (), controllers.CategoryCreateV3 {BudgetID : budget .Data .ID , Name : "Alphabetically first" })
308+ envelopeB := suite .createTestEnvelopeV3 (suite .T (), controllers.EnvelopeCreateV3 {CategoryID : categoryA .Data .ID , Name : "Batteries" })
309+ envelopeC := suite .createTestEnvelopeV3 (suite .T (), controllers.EnvelopeCreateV3 {CategoryID : categoryA .Data .ID , Name : "Chargers" })
310+
311+ // Get month data
312+ recorder := test .Request (suite .controller , suite .T (), http .MethodGet , strings .Replace (budget .Data .Links .Month , "YYYY-MM" , types .MonthOf (time .Now ()).String (), 1 ), "" )
313+ assertHTTPStatus (suite .T (), & recorder , http .StatusOK )
314+
315+ // Parse month data
316+ var response controllers.MonthResponseV3
317+ suite .decodeResponse (& recorder , & response )
318+ month := response .Data
319+
320+ assert .Equal (suite .T (), categoryU .Data .ID , month .Categories [1 ].ID )
321+ assert .Equal (suite .T (), envelopeU .Data .ID , month .Categories [1 ].Envelopes [1 ].ID )
322+ assert .Equal (suite .T (), envelopeM .Data .ID , month .Categories [1 ].Envelopes [0 ].ID )
323+
324+ assert .Equal (suite .T (), categoryA .Data .ID , month .Categories [0 ].ID )
325+ assert .Equal (suite .T (), envelopeB .Data .ID , month .Categories [0 ].Envelopes [0 ].ID )
326+ assert .Equal (suite .T (), envelopeC .Data .ID , month .Categories [0 ].Envelopes [1 ].ID )
327+ }
328+
300329// TestMonthsV3 verifies that the monthly calculations are correct.
301330func (suite * TestSuiteStandard ) TestMonthsV3 () {
302331 budget := suite .createTestBudgetV3 (suite .T (), models.BudgetCreate {})
0 commit comments