github.com/s7techlab/cckit@v0.10.5/examples/cpaper_extended/chaincode_test.go (about) 1 package cpaper_extended_test 2 3 import ( 4 "testing" 5 "time" 6 7 . "github.com/onsi/ginkgo" 8 . "github.com/onsi/gomega" 9 10 "github.com/golang/protobuf/ptypes" 11 12 "github.com/s7techlab/cckit/examples/cpaper_extended" 13 "github.com/s7techlab/cckit/examples/cpaper_extended/schema" 14 "github.com/s7techlab/cckit/examples/cpaper_extended/testdata" 15 idtestdata "github.com/s7techlab/cckit/identity/testdata" 16 testcc "github.com/s7techlab/cckit/testing" 17 expectcc "github.com/s7techlab/cckit/testing/expect" 18 ) 19 20 const ( 21 IssuerName = "SomeIssuer" 22 BuyerName = "SomeBuyer" 23 ) 24 25 func TestCommercialPaper(t *testing.T) { 26 RegisterFailHandler(Fail) 27 RunSpecs(t, "Commercial Paper Suite") 28 } 29 30 var _ = Describe(`CommercialPaper`, func() { 31 paperChaincode := testcc.NewMockStub( 32 // chaincode name 33 `commercial_paper`, 34 // chaincode implementation, supports Chaincode interface with Init and Invoke methods 35 cpaper_extended.NewCC(), 36 ) 37 38 BeforeSuite(func() { 39 // Init chaincode with admin identity 40 adminIdentity := testdata.Certificates[0].MustIdentity(idtestdata.DefaultMSP) 41 expectcc.ResponseOk( 42 paperChaincode.From(adminIdentity).Init()) 43 }) 44 45 Describe("Commercial Paper lifecycle", func() { 46 It("Allow issuer to issue new commercial paper", func(done Done) { 47 //input payload for chaincode method 48 issueTransactionData := &schema.IssueCommercialPaper{ 49 Issuer: IssuerName, 50 PaperNumber: "0001", 51 IssueDate: ptypes.TimestampNow(), 52 MaturityDate: testcc.MustProtoTimestamp(time.Now().AddDate(0, 2, 0)), 53 FaceValue: 100000, 54 ExternalId: "EXT0001", 55 } 56 57 // we expect tha `issue` method invocation with particular input payload returns response with 200 code 58 // &schema.IssueCommercialPaper wil automatically converts to bytes via proto.Marshall function 59 expectcc.ResponseOk( 60 paperChaincode.Invoke(`issue`, issueTransactionData)) 61 62 // Validate event has been emitted with the transaction data 63 expectcc.EventStringerEqual(<-paperChaincode.ChaincodeEventsChannel, 64 `IssueCommercialPaper`, issueTransactionData) 65 66 // Clear events channel after a test case that emits an event 67 paperChaincode.ClearEvents() 68 close(done) 69 }, 0.1) 70 71 It("Allow issuer to get commercial paper by composite primary key", func() { 72 queryResponse := paperChaincode.Query("get", &schema.CommercialPaperId{ 73 Issuer: IssuerName, 74 PaperNumber: "0001", 75 }) 76 77 // we expect that returned []byte payload can be unmarshalled to *schema.CommercialPaper entity 78 paper := expectcc.PayloadIs(queryResponse, &schema.CommercialPaper{}).(*schema.CommercialPaper) 79 80 Expect(paper.Issuer).To(Equal(IssuerName)) 81 Expect(paper.Owner).To(Equal(IssuerName)) 82 Expect(paper.State).To(Equal(schema.CommercialPaper_STATE_ISSUED)) 83 Expect(paper.PaperNumber).To(Equal("0001")) 84 Expect(paper.FaceValue).To(BeNumerically("==", 100000)) 85 }) 86 87 It("Allow issuer to get commercial paper by unique key", func() { 88 queryResponse := paperChaincode.Query("getByExternalId", "EXT0001") 89 90 paper := expectcc.PayloadIs(queryResponse, &schema.CommercialPaper{}).(*schema.CommercialPaper) 91 92 Expect(paper.Issuer).To(Equal(IssuerName)) 93 Expect(paper.Owner).To(Equal(IssuerName)) 94 Expect(paper.State).To(Equal(schema.CommercialPaper_STATE_ISSUED)) 95 Expect(paper.PaperNumber).To(Equal("0001")) 96 Expect(paper.FaceValue).To(BeNumerically("==", 100000)) 97 }) 98 99 It("Allow issuer to get a list of commercial papers", func() { 100 queryResponse := paperChaincode.Query("list") 101 102 papers := expectcc.PayloadIs(queryResponse, &schema.CommercialPaperList{}).(*schema.CommercialPaperList) 103 104 Expect(len(papers.Items)).To(BeNumerically("==", 1)) 105 Expect(papers.Items[0].Issuer).To(Equal(IssuerName)) 106 Expect(papers.Items[0].Owner).To(Equal(IssuerName)) 107 Expect(papers.Items[0].State).To(Equal(schema.CommercialPaper_STATE_ISSUED)) 108 Expect(papers.Items[0].PaperNumber).To(Equal("0001")) 109 Expect(papers.Items[0].FaceValue).To(BeNumerically("==", 100000)) 110 }) 111 112 It("Allow buyer to buy commercial paper", func() { 113 buyTransactionData := &schema.BuyCommercialPaper{ 114 Issuer: IssuerName, 115 PaperNumber: "0001", 116 CurrentOwner: IssuerName, 117 NewOwner: BuyerName, 118 Price: 95000, 119 PurchaseDate: ptypes.TimestampNow(), 120 } 121 122 expectcc.ResponseOk(paperChaincode.Invoke(`buy`, buyTransactionData)) 123 124 queryResponse := paperChaincode.Query("get", &schema.CommercialPaperId{ 125 Issuer: IssuerName, 126 PaperNumber: "0001", 127 }) 128 129 paper := expectcc.PayloadIs(queryResponse, &schema.CommercialPaper{}).(*schema.CommercialPaper) 130 131 Expect(paper.Owner).To(Equal(BuyerName)) 132 Expect(paper.State).To(Equal(schema.CommercialPaper_STATE_TRADING)) 133 134 expectcc.EventStringerEqual(<-paperChaincode.ChaincodeEventsChannel, 135 `BuyCommercialPaper`, buyTransactionData) 136 137 paperChaincode.ClearEvents() 138 }) 139 140 It("Allow buyer to redeem commercial paper", func() { 141 redeemTransactionData := &schema.RedeemCommercialPaper{ 142 Issuer: IssuerName, 143 PaperNumber: "0001", 144 RedeemingOwner: BuyerName, 145 RedeemDate: ptypes.TimestampNow(), 146 } 147 148 expectcc.ResponseOk(paperChaincode.Invoke(`redeem`, redeemTransactionData)) 149 150 queryResponse := paperChaincode.Query("get", &schema.CommercialPaperId{ 151 Issuer: IssuerName, 152 PaperNumber: "0001", 153 }) 154 155 paper := expectcc.PayloadIs(queryResponse, &schema.CommercialPaper{}).(*schema.CommercialPaper) 156 Expect(paper.Owner).To(Equal(IssuerName)) 157 Expect(paper.State).To(Equal(schema.CommercialPaper_STATE_REDEEMED)) 158 159 expectcc.EventStringerEqual(<-paperChaincode.ChaincodeEventsChannel, 160 `RedeemCommercialPaper`, redeemTransactionData) 161 162 paperChaincode.ClearEvents() 163 }) 164 165 It("Allow issuer to delete commercial paper", func() { 166 expectcc.ResponseOk(paperChaincode.Invoke(`delete`, &schema.CommercialPaperId{ 167 Issuer: IssuerName, 168 PaperNumber: "0001", 169 })) 170 171 // Validate there are 0 Commercial Papers in the world state 172 queryResponse := paperChaincode.Query("list") 173 papers := expectcc.PayloadIs(queryResponse, &schema.CommercialPaperList{}).(*schema.CommercialPaperList) 174 175 Expect(len(papers.Items)).To(BeNumerically("==", 0)) 176 }) 177 }) 178 })