github.com/s7techlab/cckit@v0.10.5/examples/cpaper/chaincode_test.go (about)

     1  package cpaper_test
     2  
     3  import (
     4  	"testing"
     5  	"time"
     6  
     7  	"github.com/s7techlab/cckit/examples/cpaper"
     8  	testcc "github.com/s7techlab/cckit/testing"
     9  	expectcc "github.com/s7techlab/cckit/testing/expect"
    10  
    11  	. "github.com/onsi/ginkgo"
    12  	. "github.com/onsi/gomega"
    13  )
    14  
    15  const (
    16  	IssuerName = "SomeIssuer"
    17  	BuyerName  = "SomeBuyer"
    18  )
    19  
    20  func TestCommercialPaper(t *testing.T) {
    21  	RegisterFailHandler(Fail)
    22  	RunSpecs(t, "Commercial Paper Suite")
    23  }
    24  
    25  var _ = Describe(`CommercialPaper`, func() {
    26  	paperChaincode := testcc.NewMockStub(`commercial_paper`, cpaper.NewCC())
    27  
    28  	BeforeSuite(func() {
    29  		expectcc.ResponseOk(paperChaincode.Init())
    30  	})
    31  
    32  	Describe("Commercial Paper lifecycle", func() {
    33  
    34  		It("Allow issuer to issue new commercial paper", func() {
    35  			//invoke chaincode method from authority actor
    36  			expectcc.ResponseOk(paperChaincode.Invoke(`issue`, &cpaper.IssueCommercialPaper{
    37  				Issuer:       IssuerName,
    38  				PaperNumber:  "0001",
    39  				IssueDate:    time.Now(),
    40  				MaturityDate: time.Now().Add(time.Hour * 24 * 30 * 6), // Six months later
    41  				FaceValue:    100000,
    42  			}))
    43  		})
    44  
    45  		It("Allow issuer to get commercial paper", func() {
    46  			queryResponse := paperChaincode.Query("get", IssuerName, "0001")
    47  			paper := expectcc.PayloadIs(queryResponse, &cpaper.CommercialPaper{}).(cpaper.CommercialPaper)
    48  
    49  			Expect(paper.Issuer).To(Equal(IssuerName))
    50  			Expect(paper.Owner).To(Equal(IssuerName))
    51  			Expect(paper.State).To(Equal(cpaper.CommercialPaperIssued))
    52  			Expect(paper.PaperNumber).To(Equal("0001"))
    53  			Expect(paper.FaceValue).To(BeNumerically("==", 100000))
    54  		})
    55  
    56  		It("Allow issuer to get a list of commercial papers", func() {
    57  			queryResponse := paperChaincode.Query("list")
    58  			papers := expectcc.PayloadIs(queryResponse, &[]cpaper.CommercialPaper{}).([]cpaper.CommercialPaper)
    59  
    60  			Expect(len(papers)).To(BeNumerically("==", 1))
    61  			Expect(papers[0].Issuer).To(Equal(IssuerName))
    62  			Expect(papers[0].Owner).To(Equal(IssuerName))
    63  			Expect(papers[0].State).To(Equal(cpaper.CommercialPaperIssued))
    64  			Expect(papers[0].PaperNumber).To(Equal("0001"))
    65  			Expect(papers[0].FaceValue).To(BeNumerically("==", 100000))
    66  		})
    67  
    68  		It("Allow buyer to buy commercial paper", func() {
    69  			//invoke chaincode method from authority actor
    70  			expectcc.ResponseOk(paperChaincode.Invoke(`buy`, &cpaper.BuyCommercialPaper{
    71  				Issuer:       IssuerName,
    72  				PaperNumber:  "0001",
    73  				CurrentOwner: IssuerName,
    74  				NewOwner:     BuyerName,
    75  				Price:        95000,
    76  				PurchaseDate: time.Now(),
    77  			}))
    78  
    79  			queryResponse := paperChaincode.Query("get", IssuerName, "0001")
    80  			paper := expectcc.PayloadIs(queryResponse, &cpaper.CommercialPaper{}).(cpaper.CommercialPaper)
    81  			Expect(paper.Owner).To(Equal(BuyerName))
    82  			Expect(paper.State).To(Equal(cpaper.CommercialPaperTrading))
    83  		})
    84  
    85  		It("Allow buyer to redeem commercial paper", func() {
    86  			//invoke chaincode method from authority actor
    87  			expectcc.ResponseOk(paperChaincode.Invoke(`redeem`, &cpaper.RedeemCommercialPaper{
    88  				Issuer:         IssuerName,
    89  				PaperNumber:    "0001",
    90  				RedeemingOwner: BuyerName,
    91  				RedeemDate:     time.Now(),
    92  			}))
    93  
    94  			queryResponse := paperChaincode.Query("get", IssuerName, "0001")
    95  			paper := expectcc.PayloadIs(queryResponse, &cpaper.CommercialPaper{}).(cpaper.CommercialPaper)
    96  			Expect(paper.Owner).To(Equal(IssuerName))
    97  			Expect(paper.State).To(Equal(cpaper.CommercialPaperRedeemed))
    98  		})
    99  	})
   100  })