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  }