github.com/companieshouse/lfp-pay-api@v0.0.0-20230203133422-0ca455cd79f9/handlers/payable_resource_test.go (about) 1 package handlers 2 3 import ( 4 "context" 5 "encoding/json" 6 "net/http/httptest" 7 "testing" 8 "time" 9 10 "github.com/companieshouse/lfp-pay-api-core/models" 11 "github.com/companieshouse/lfp-pay-api/config" 12 . "github.com/smartystreets/goconvey/convey" 13 ) 14 15 func TestUnitHandleGetPayableResource(t *testing.T) { 16 Convey("Invalid PayableResourceRest", t, func() { 17 req := httptest.NewRequest("GET", "/test", nil) 18 w := httptest.NewRecorder() 19 HandleGetPayableResource(w, req) 20 So(w.Code, ShouldEqual, 500) 21 }) 22 Convey("Valid PayableResource", t, func() { 23 createdAt := time.Now().Truncate(time.Millisecond) 24 payable := models.PayableResource{ 25 CompanyNumber: "12345678", 26 Reference: "abcdef", 27 Links: models.PayableResourceLinks{ 28 Self: "/company/12345678/penalties/late-filing/abcdef", 29 Payment: "/company/12345678/penalties/late-filing/abcdef/payment", 30 }, 31 Etag: "qwertyetag1234", 32 CreatedAt: &createdAt, 33 CreatedBy: models.CreatedBy{ 34 Email: "test@user.com", 35 ID: "uz3r1D_H3r3", 36 }, 37 Transactions: []models.TransactionItem{ 38 models.TransactionItem{ 39 Amount: 5, 40 Type: "penalty", 41 TransactionID: "0987654321", 42 }, 43 }, 44 Payment: models.Payment{ 45 Amount: "5", 46 Status: "pending", 47 }, 48 } 49 50 req := httptest.NewRequest("GET", "/test", nil) 51 ctx := context.WithValue(req.Context(), config.PayableResource, &payable) 52 w := httptest.NewRecorder() 53 54 HandleGetPayableResource(w, req.WithContext(ctx)) 55 56 So(w.Code, ShouldEqual, 200) 57 So(w.Header().Get("Content-Type"), ShouldEqual, "application/json") 58 59 resultPayable := &models.PayableResource{} 60 json.NewDecoder(w.Body).Decode(&resultPayable) 61 So(resultPayable.CompanyNumber, ShouldEqual, payable.CompanyNumber) 62 So(resultPayable.Reference, ShouldEqual, payable.Reference) 63 So(resultPayable.Etag, ShouldEqual, payable.Etag) 64 So(resultPayable.CreatedAt.Nanosecond(), ShouldEqual, payable.CreatedAt.Nanosecond()) 65 So(resultPayable.Links.Self, ShouldEqual, payable.Links.Self) 66 So(resultPayable.Links.Payment, ShouldEqual, payable.Links.Payment) 67 So(resultPayable.CreatedBy.Email, ShouldEqual, payable.CreatedBy.Email) 68 So(resultPayable.CreatedBy.ID, ShouldEqual, payable.CreatedBy.ID) 69 So(resultPayable.Payment.Amount, ShouldEqual, payable.Payment.Amount) 70 So(resultPayable.Payment.Status, ShouldEqual, payable.Payment.Status) 71 So(len(resultPayable.Transactions), ShouldEqual, 1) 72 So(resultPayable.Transactions[0].Amount, ShouldEqual, payable.Transactions[0].Amount) 73 So(resultPayable.Transactions[0].Type, ShouldEqual, payable.Transactions[0].Type) 74 So(resultPayable.Transactions[0].TransactionID, ShouldEqual, payable.Transactions[0].TransactionID) 75 76 }) 77 }