forked from go-goodies/go_currency
/
currency_test.go
123 lines (106 loc) · 3.26 KB
/
currency_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
package go_currency
import (
"testing"
"log"
"github.com/remogatto/prettytest"
jc "github.com/go-goodies/go_jsoncfg"
u "github.com/go-goodies/go_utils"
"fmt"
)
type mySuite struct {
prettytest.Suite
}
func TestRunner(t *testing.T) {
prettytest.Run(t, new(mySuite))
}
func (s *mySuite) TestReadConfigFile() {
//------------------------------------------------
// Read JSON file
//------------------------------------------------
/*
{
"lineitem1": {
"description": "SSD Drive",
"count": 2,
"priceUSD": "250.00"
},
"lineitem2": {
"description": "RAM Chip",
"count": 4,
"priceUSD": "125.50"
}
}
*/
obj, err := jc.ReadFile("testdata/invoice.json")
if err != nil {
log.Fatal(err)
}
lineitem1 := obj.RequiredObject("lineitem1")
//------------------------------------------------
// description == "SSD Drive"
//------------------------------------------------
s.Equal(lineitem1["description"], "SSD Drive")
//------------------------------------------------
// count == 2
//------------------------------------------------
lineitem1_count, err := u.ConvNumToInt(lineitem1["count"])
if err != nil {
log.Fatal(err)
}
s.Equal(lineitem1_count, int(2))
//------------------------------------------------
// priceUSD == 250.00
//------------------------------------------------
item1PriceUSD, err := ParseUSD(lineitem1["priceUSD"].(string))
if err != nil {
log.Fatal(err)
}
usd250, err := ParseUSD("250.00")
if err != nil {
log.Fatal(err)
}
s.Equal(item1PriceUSD, usd250)
s.Equal(u.TypeOf(usd250), "go_currency.USD")
}
func (s *mySuite) TestErrors() {
emptyUSD, err := ParseUSD("")
s.Equal(fmt.Sprintf("%s", err), "go_utils.ParseUSD: parsing \"\": value out of range")
s.Equal(u.TypeOf(emptyUSD), "go_currency.USD")
unnecessaryDeciaml, err := ParseUSD("2.")
s.Equal(fmt.Sprintf("%s", err), "go_utils.ParseUSD: parsing \"2.\": value out of range")
s.Equal(u.TypeOf(unnecessaryDeciaml), "go_currency.USD")
usd250, err := ParseUSD(".")
s.Equal(fmt.Sprintf("%s", err), "go_utils.ParseUSD: parsing \".\": value out of range")
s.Equal(u.TypeOf(usd250), "go_currency.USD")
s.Equal(fmt.Sprintf("%s", usd250), "0.00")
}
func initLineItemPrices(jsonFile string) (item1PriceUSD USD, item2PriceUSD USD) {
obj, err := jc.ReadFile(jsonFile)
if err != nil {
log.Fatal(err)
}
lineitem1 := obj.RequiredObject("lineitem1")
item1PriceUSD, _ = ParseUSD(lineitem1["priceUSD"].(string))
lineitem2 := obj.RequiredObject("lineitem2")
item2PriceUSD, _ = ParseUSD(lineitem2["priceUSD"].(string))
return item1PriceUSD, item2PriceUSD
}
func (s *mySuite) TestAdd() {
item1PriceUSD, item2PriceUSD := initLineItemPrices("testdata/invoice.json")
s.Equal(item1PriceUSD.ToString(), "250.00")
s.Equal(item2PriceUSD.ToString(), "125.50")
sum, _ := item1PriceUSD.Add(item2PriceUSD)
usd375_50, _ := ParseUSD("375.50")
s.Equal(sum, usd375_50)
}
func (s *mySuite) TestSubtract() {
item1PriceUSD, item2PriceUSD := initLineItemPrices("testdata/invoice.json")
s.Equal(item1PriceUSD.ToString(), "250.00")
s.Equal(item2PriceUSD.ToString(), "125.50")
diff, _ := item1PriceUSD.Subtract(item2PriceUSD)
usd124_50, _ := ParseUSD("124.50")
s.Equal(diff, usd124_50)
}
func (s *mySuite) TestMultiply() {
s.Pending()
}