fabric-samples/commercial-paper/organization/digibank/contract-go/commercialpaper/paper_test.go
Andrew Hurt 84a966c4fc
[FAB-17140] update to use go chaincode
Signed-off-by: Andrew Hurt <andrew.hurt1@ibm.com>
2019-12-16 09:28:01 +00:00

125 lines
4.2 KiB
Go

/*
* SPDX-License-Identifier: Apache-2.0
*/
package commercialpaper
import (
"testing"
ledgerapi "github.com/hyperledger/fabric-samples/commercial-paper/organization/digibank/contract-go/ledger-api"
"github.com/stretchr/testify/assert"
)
func TestString(t *testing.T) {
assert.Equal(t, "ISSUED", issued.String(), "should return string for issued")
assert.Equal(t, "TRADING", trading.String(), "should return string for issued")
assert.Equal(t, "REDEEMED", redeemed.String(), "should return string for issued")
assert.Equal(t, "UNKNOWN", commercialPaperState(redeemed+1).String(), "should return unknown when not one of constants")
}
func TestCreateCommercialPaperKey(t *testing.T) {
assert.Equal(t, ledgerapi.MakeKey("someissuer", "somepaper"), CreateCommercialPaperKey("someissuer", "somepaper"), "should return key comprised of passed values")
}
func TestGetState(t *testing.T) {
cp := new(CommercialPaper)
cp.state = "ISSUED"
assert.Equal(t, "ISSUED", cp.GetState(), "should return set state")
}
func TestSetIssued(t *testing.T) {
cp := new(CommercialPaper)
cp.SetIssued()
assert.Equal(t, "ISSUED", cp.state, "should set state to trading")
}
func TestSetTrading(t *testing.T) {
cp := new(CommercialPaper)
cp.SetTrading()
assert.Equal(t, "TRADING", cp.state, "should set state to trading")
}
func TestSetRedeemed(t *testing.T) {
cp := new(CommercialPaper)
cp.SetRedeemed()
assert.Equal(t, "REDEEMED", cp.state, "should set state to trading")
}
func TestIsIssued(t *testing.T) {
cp := new(CommercialPaper)
cp.SetIssued()
assert.True(t, cp.IsIssued(), "should be true when status set to issued")
cp.SetTrading()
assert.False(t, cp.IsIssued(), "should be false when status not set to issued")
}
func TestIsTrading(t *testing.T) {
cp := new(CommercialPaper)
cp.SetTrading()
assert.True(t, cp.IsTrading(), "should be true when status set to trading")
cp.SetRedeemed()
assert.False(t, cp.IsTrading(), "should be false when status not set to trading")
}
func TestIsRedeemed(t *testing.T) {
cp := new(CommercialPaper)
cp.SetRedeemed()
assert.True(t, cp.IsRedeemed(), "should be true when status set to redeemed")
cp.SetIssued()
assert.False(t, cp.IsRedeemed(), "should be false when status not set to redeemed")
}
func TestGetSplitKey(t *testing.T) {
cp := new(CommercialPaper)
cp.PaperNumber = "somepaper"
cp.Issuer = "someissuer"
assert.Equal(t, []string{"someissuer", "somepaper"}, cp.GetSplitKey(), "should return issuer and paper number as split key")
}
func TestSerialize(t *testing.T) {
cp := new(CommercialPaper)
cp.PaperNumber = "somepaper"
cp.Issuer = "someissuer"
cp.IssueDateTime = "sometime"
cp.FaceValue = 1000
cp.MaturityDateTime = "somelatertime"
cp.Owner = "someowner"
cp.state = "TRADING"
bytes, err := cp.Serialize()
assert.Nil(t, err, "should not error on serialize")
assert.Equal(t, `{"paperNumber":"somepaper","issuer":"someissuer","issueDateTime":"sometime","faceValue":1000,"maturityDateTime":"somelatertime","owner":"someowner","state":"TRADING"}`, string(bytes), "should return JSON formatted value")
}
func TestDeserialize(t *testing.T) {
var cp *CommercialPaper
var err error
goodJSON := `{"paperNumber":"somepaper","issuer":"someissuer","issueDateTime":"sometime","faceValue":1000,"maturityDateTime":"somelatertime","owner":"someowner","state":"TRADING"}`
expectedCp := new(CommercialPaper)
expectedCp.PaperNumber = "somepaper"
expectedCp.Issuer = "someissuer"
expectedCp.IssueDateTime = "sometime"
expectedCp.FaceValue = 1000
expectedCp.MaturityDateTime = "somelatertime"
expectedCp.Owner = "someowner"
expectedCp.state = "TRADING"
cp = new(CommercialPaper)
err = Deserialize([]byte(goodJSON), cp)
assert.Nil(t, err, "should not return error for deserialize")
assert.Equal(t, expectedCp, cp, "should create expected commercial paper")
badJSON := `{"paperNumber":"somepaper","issuer":"someissuer","issueDateTime":"sometime","faceValue":"NaN","maturityDateTime":"somelatertime","owner":"someowner","state":"TRADING"}`
cp = new(CommercialPaper)
err = Deserialize([]byte(badJSON), cp)
assert.EqualError(t, err, "Error deserializing commercial paper. json: cannot unmarshal string into Go struct field jsonCommercialPaper.faceValue of type int", "should return error for bad data")
}