Skip to content

Commit b47c292

Browse files
committed
Added examples for context based error handling.
1 parent 020c23f commit b47c292

5 files changed

+178
-56
lines changed

examples/go.mod

+22-4
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,35 @@
1-
module examples
1+
module github.com/mahadev-k/go-utils/examples
22

33
go 1.23.2
44

55
require (
6-
github.com/mahadev-k/go-utils v1.0.5
7-
github.com/mattn/go-sqlite3 v1.14.24
8-
github.com/stretchr/testify v1.9.0
6+
github.com/mahadev-k/go-utils v1.0.7
7+
github.com/stretchr/testify v1.10.0
8+
modernc.org/sqlite v1.25.0
99
)
1010

1111
require (
1212
github.com/davecgh/go-spew v1.1.1 // indirect
13+
github.com/dustin/go-humanize v1.0.1 // indirect
14+
github.com/google/uuid v1.3.0 // indirect
15+
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
16+
github.com/mattn/go-isatty v0.0.16 // indirect
1317
github.com/pmezard/go-difflib v1.0.0 // indirect
18+
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
19+
golang.org/x/mod v0.3.0 // indirect
20+
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab // indirect
21+
golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78 // indirect
22+
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
1423
gopkg.in/yaml.v3 v3.0.1 // indirect
24+
lukechampine.com/uint128 v1.2.0 // indirect
25+
modernc.org/cc/v3 v3.40.0 // indirect
26+
modernc.org/ccgo/v3 v3.16.13 // indirect
27+
modernc.org/libc v1.24.1 // indirect
28+
modernc.org/mathutil v1.5.0 // indirect
29+
modernc.org/memory v1.6.0 // indirect
30+
modernc.org/opt v0.1.3 // indirect
31+
modernc.org/strutil v1.1.3 // indirect
32+
modernc.org/token v1.0.1 // indirect
1533
)
1634

1735
// replace github.com/mahadev-k/go-utils => ../

examples/go.sum

+75-6
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,84 @@ github.com/DATA-DOG/go-sqlmock v1.5.2 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7Oputl
22
github.com/DATA-DOG/go-sqlmock v1.5.2/go.mod h1:88MAG/4G7SMwSE3CeA0ZKzrT5CiOU3OJ+JlNzwDqpNU=
33
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
44
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
5-
github.com/mahadev-k/go-utils v1.0.5 h1:wuQTTLurspCmNyV/7yaRYA08v8ym+wH0yK6v+maQKBg=
6-
github.com/mahadev-k/go-utils v1.0.5/go.mod h1:o+zb2soIT6EdpIXPVn/PjeSqX2M0+WBFCYlRbpBK7ac=
7-
github.com/mattn/go-sqlite3 v1.14.24 h1:tpSp2G2KyMnnQu99ngJ47EIkWVmliIizyZBfPrBWDRM=
8-
github.com/mattn/go-sqlite3 v1.14.24/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
5+
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
6+
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
7+
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
8+
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
9+
github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 h1:Xim43kblpZXfIBQsbuBVKCudVG457BR2GZFIz3uw3hQ=
10+
github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26/go.mod h1:dDKJzRmX4S37WGHujM7tX//fmj1uioxKzKxz3lo4HJo=
11+
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
12+
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
13+
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs=
14+
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
15+
github.com/mahadev-k/go-utils v1.0.7 h1:M6tNa8uKry3AziGvhU/A+8sMNAK8L8iCmB0wBabCT9s=
16+
github.com/mahadev-k/go-utils v1.0.7/go.mod h1:o+zb2soIT6EdpIXPVn/PjeSqX2M0+WBFCYlRbpBK7ac=
17+
github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ=
18+
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
19+
github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y=
20+
github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
921
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
1022
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
11-
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
12-
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
23+
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
24+
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
25+
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
26+
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
27+
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
28+
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
29+
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
30+
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
31+
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
32+
golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4=
33+
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
34+
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
35+
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
36+
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
37+
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
38+
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
39+
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
40+
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
41+
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
42+
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab h1:2QkjZIsXupsJbJIdSjjUOgWK3aEtzyuh2mPt3l/CkeU=
43+
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
44+
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
45+
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
46+
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
47+
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
48+
golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78 h1:M8tBwCtWD/cZV9DZpFYRUgaymAYAr+aIUTWzDaM3uPs=
49+
golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
50+
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
51+
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
52+
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
53+
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
1354
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
1455
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
1556
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
1657
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
58+
lukechampine.com/uint128 v1.2.0 h1:mBi/5l91vocEN8otkC5bDLhi2KdCticRiwbdB0O+rjI=
59+
lukechampine.com/uint128 v1.2.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk=
60+
modernc.org/cc/v3 v3.40.0 h1:P3g79IUS/93SYhtoeaHW+kRCIrYaxJ27MFPv+7kaTOw=
61+
modernc.org/cc/v3 v3.40.0/go.mod h1:/bTg4dnWkSXowUO6ssQKnOV0yMVxDYNIsIrzqTFDGH0=
62+
modernc.org/ccgo/v3 v3.16.13 h1:Mkgdzl46i5F/CNR/Kj80Ri59hC8TKAhZrYSaqvkwzUw=
63+
modernc.org/ccgo/v3 v3.16.13/go.mod h1:2Quk+5YgpImhPjv2Qsob1DnZ/4som1lJTodubIcoUkY=
64+
modernc.org/ccorpus v1.11.6 h1:J16RXiiqiCgua6+ZvQot4yUuUy8zxgqbqEEUuGPlISk=
65+
modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ=
66+
modernc.org/httpfs v1.0.6 h1:AAgIpFZRXuYnkjftxTAZwMIiwEqAfk8aVB2/oA6nAeM=
67+
modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM=
68+
modernc.org/libc v1.24.1 h1:uvJSeCKL/AgzBo2yYIPPTy82v21KgGnizcGYfBHaNuM=
69+
modernc.org/libc v1.24.1/go.mod h1:FmfO1RLrU3MHJfyi9eYYmZBfi/R+tqZ6+hQ3yQQUkak=
70+
modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ=
71+
modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
72+
modernc.org/memory v1.6.0 h1:i6mzavxrE9a30whzMfwf7XWVODx2r5OYXvU46cirX7o=
73+
modernc.org/memory v1.6.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU=
74+
modernc.org/opt v0.1.3 h1:3XOZf2yznlhC+ibLltsDGzABUGVx8J6pnFMS3E4dcq4=
75+
modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0=
76+
modernc.org/sqlite v1.25.0 h1:AFweiwPNd/b3BoKnBOfFm+Y260guGMF+0UFk0savqeA=
77+
modernc.org/sqlite v1.25.0/go.mod h1:FL3pVXie73rg3Rii6V/u5BoHlSoyeZeIgKZEgHARyCU=
78+
modernc.org/strutil v1.1.3 h1:fNMm+oJklMGYfU9Ylcywl0CO5O6nTfaowNsh2wpPjzY=
79+
modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw=
80+
modernc.org/tcl v1.15.2 h1:C4ybAYCGJw968e+Me18oW55kD/FexcHbqH2xak1ROSY=
81+
modernc.org/tcl v1.15.2/go.mod h1:3+k/ZaEbKrC8ePv8zJWPtBSW0V7Gg9g8rkmhI1Kfs3c=
82+
modernc.org/token v1.0.1 h1:A3qvTqOwexpfZZeyI0FeGPDlSWX5pjZu9hF4lU+EKWg=
83+
modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=
84+
modernc.org/z v1.7.3 h1:zDJf6iHjrnB+WRD88stbXokugjyc0/pB91ri1gO6LZY=
85+
modernc.org/z v1.7.3/go.mod h1:Ipv4tsdxZRbQyLq9Q1M6gdbkxYzdlrciF2Hi/lS7nWE=

examples/map_runner_example_test.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@ func TestMapRunnerLib(t *testing.T) {
1313
floatingStrings := []string{"0.1", "0.2", "22", "22.1"}
1414

1515
res, err := streams.NewTransformer[string, int64](floatingStrings).
16-
transform(streams.MapIt[string, float64](func(item string) (float64, error) { return strconv.ParseFloat(item, 64) })).
17-
transform(streams.MapIt[float64, float64](func(item float64) (float64, error) { return item * 10, nil })).
18-
transform(streams.MapIt[float64, int64](func(item float64) (int64, error) { return int64(item), nil })).
19-
transform(streams.FilterIt[int64](func(item int64) (bool, error) { return item%2 == 0, nil })).
16+
Transform(streams.MapIt[string, float64](func(item string) (float64, error) { return strconv.ParseFloat(item, 64) })).
17+
Transform(streams.MapIt[float64, float64](func(item float64) (float64, error) { return item * 10, nil })).
18+
Transform(streams.MapIt[float64, int64](func(item float64) (int64, error) { return int64(item), nil })).
19+
Transform(streams.FilterIt[int64](func(item int64) (bool, error) { return item%2 == 0, nil })).
2020
Result()
2121
if err != nil {
2222
t.Errorf("Testcase failed with error : %v", err)

examples/sql_txn_example_test.go

+40-34
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ import (
77
"testing"
88

99
"github.com/mahadev-k/go-utils/dbutils"
10-
_ "github.com/mattn/go-sqlite3" // Import sqlite3 driver as a side effect
1110
"github.com/stretchr/testify/assert"
11+
_ "modernc.org/sqlite" // Import pure Go sqlite driver
1212
)
1313

1414
type OrderRequest struct {
@@ -38,35 +38,35 @@ func TestSqlWriteExec_CreateOrderTxn(t *testing.T) {
3838
}
3939
verifyTransactionSuccessful(t, db)
4040
t.Cleanup(
41-
func() {
41+
func() {
4242
cleanup(db)
43-
db.Close()
43+
db.Close()
4444
},
4545
)
4646
}
4747

4848
func TestRollback(t *testing.T) {
4949
db := setupDatabase()
5050

51-
err := dbutils.NewSqlTxnExec[OrderRequest, OrderProcessingResponse](context.TODO(), db, nil, &OrderRequest{CustomerName: "CustomerA", ProductID: 1, Quantity: 30}).
52-
StatefulExec(InsertOrder).
53-
StatefulExec(UpdateInventory).
54-
StatefulExec(InsertShipment).
55-
Commit()
56-
57-
// check if the transaction was rolled back successfully
58-
if err == nil {
59-
t.Fatal("Expected error during rollback, but none occurred")
60-
return
61-
}
62-
63-
verifyTransactionFailed(t, db)
64-
t.Cleanup(
65-
func() {
66-
cleanup(db)
67-
db.Close()
68-
},
69-
)
51+
err := dbutils.NewSqlTxnExec[OrderRequest, OrderProcessingResponse](context.TODO(), db, nil, &OrderRequest{CustomerName: "CustomerA", ProductID: 1, Quantity: 30}).
52+
StatefulExec(InsertOrder).
53+
StatefulExec(UpdateInventory).
54+
StatefulExec(InsertShipment).
55+
Commit()
56+
57+
// check if the transaction was rolled back successfully
58+
if err == nil {
59+
t.Fatal("Expected error during rollback, but none occurred")
60+
return
61+
}
62+
63+
verifyTransactionFailed(t, db)
64+
t.Cleanup(
65+
func() {
66+
cleanup(db)
67+
db.Close()
68+
},
69+
)
7070
}
7171

7272
func verifyTransactionFailed(t *testing.T, db *sql.DB) {
@@ -80,34 +80,34 @@ func verifyTransactionFailed(t *testing.T, db *sql.DB) {
8080
if count != 0 {
8181
t.Errorf("Expected 0 orders, but got %d", count)
8282
return
83-
}
83+
}
8484

8585
}
8686

8787
func verifyTransactionSuccessful(t *testing.T, db *sql.DB) {
88-
// Verify the transaction data
89-
// Check if the Order, Inventory, and Shipment were inserted and updated correctly
88+
// Verify the transaction data
89+
// Check if the Order, Inventory, and Shipment were inserted and updated correctly
9090
// run select queries against the database to verify the results
9191
var orderID int64
9292
var shippingID int64
9393
var productQuantity int
94-
94+
9595
row := db.QueryRow("SELECT id FROM orders WHERE customer_name =?", "CustomerA")
9696
err := row.Scan(&orderID)
9797
if err != nil {
9898
t.Fatal(err)
9999
return
100100
}
101101

102-
row = db.QueryRow("SELECT product_quantity FROM inventory WHERE id =?", 1)
102+
row = db.QueryRow("SELECT product_quantity FROM inventory WHERE id =?", 1)
103103
err = row.Scan(&productQuantity)
104104
if err != nil {
105105
t.Fatal(err)
106106
return
107107
}
108108
t.Log("Order ID: ", orderID)
109109
t.Log("Product Quantity: ", productQuantity)
110-
t.Log("Shipping ID: ", shippingID)
110+
t.Log("Shipping ID: ", shippingID)
111111

112112
assert.Equal(t, productQuantity, 10)
113113
}
@@ -151,7 +151,7 @@ func InsertShipment(ctx context.Context, txn *sql.Tx, order *OrderRequest, order
151151
func setupDatabase() *sql.DB {
152152
// Arrange
153153
// create a sqllite db
154-
db, err := sql.Open("sqlite3", ":memory:")
154+
db, err := sql.Open("sqlite", ":memory:")
155155
if err != nil {
156156
panic(err)
157157
}
@@ -187,17 +187,23 @@ func setupDatabase() *sql.DB {
187187
_, err = db.Exec(query)
188188
if err != nil {
189189
panic(err)
190-
}
190+
}
191191

192192
return db
193193
}
194194

195195
func cleanup(db *sql.DB) error {
196196
_, err := db.Exec("DROP TABLE IF EXISTS Order")
197-
if err != nil { return err }
197+
if err != nil {
198+
return err
199+
}
198200
_, err = db.Exec("DROP TABLE IF EXISTS inventory")
199-
if err != nil { return err }
201+
if err != nil {
202+
return err
203+
}
200204
_, err = db.Exec("DROP TABLE IF EXISTS shipment")
201-
if err != nil { return err }
205+
if err != nil {
206+
return err
207+
}
202208
return nil
203-
}
209+
}

examples/task_context_example_test.go

+37-8
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ func generateLabel(orderID string, cost float64) goctx.RunFn[string] {
6161
if cost <= 0 {
6262
return "", errors.New("invalid shipping cost")
6363
}
64-
return fmt.Sprintf("TRACK-%s-%d", orderID, time.Now().Unix()), nil
64+
return fmt.Sprintf("TRACK-%s-1234567890", orderID), nil
6565
}
6666
}
6767

@@ -80,7 +80,7 @@ func ExampleTaskContext_OrderProcessing() {
8080
inventoryChecks := goctx.Run[[]goctx.RunFn[bool]](taskCtx,
8181
func() ([]goctx.RunFn[bool], error) {
8282
return streams.NewTransformer[OrderItem, goctx.RunFn[bool]](order).
83-
Map(streams.MapItSimple(checkInventory)).
83+
Transform(streams.MapItSimple(checkInventory)).
8484
Result()
8585
})
8686

@@ -95,16 +95,14 @@ func ExampleTaskContext_OrderProcessing() {
9595
func ExampleTaskContext_ShipmentProcessing() {
9696
ctx := goctx.NewTaskContext(context.Background())
9797

98-
order := []OrderItem{
99-
{ProductID: "MOUSE", Quantity: 1},
100-
}
101-
shipment := Shipment{OrderID: "ORD123"}
98+
order := dummyOrder()
99+
shipment := dummyShipment()
102100

103101
// Step 1: Validate address
104-
_ = goctx.Run(ctx, validateAddress("123 Main St"))
105102
// Step 2: Calculate shipping cost
106-
cost := goctx.Run(ctx, calculateShipping(order))
107103
// Step 3: Generate label
104+
_ = goctx.Run(ctx, validateAddress("123 Main St"))
105+
cost := goctx.Run(ctx, calculateShipping(order))
108106
trackingNum := goctx.Run(ctx, generateLabel(shipment.OrderID, cost))
109107

110108
if ctx.Err() != nil {
@@ -119,3 +117,34 @@ func ExampleTaskContext_ShipmentProcessing() {
119117
// Output:
120118
// Shipment processed: {OrderID:ORD123 Status:READY TrackingNum:TRACK-ORD123-1234567890}
121119
}
120+
121+
func ExampleTaskContext_ShipmentProcessing_WithError() {
122+
ctx := goctx.NewTaskContext(context.Background())
123+
124+
order := dummyOrder()
125+
shipment := dummyShipment()
126+
127+
goctx.Run(ctx, validateAddress(""))
128+
cost := goctx.Run(ctx, calculateShipping(order))
129+
goctx.Run(ctx, generateLabel(shipment.OrderID, cost))
130+
131+
if ctx.Err() != nil {
132+
fmt.Printf("Error: %v\n", ctx.Err())
133+
return
134+
}
135+
136+
fmt.Printf("Shipment processed: %+v\n", shipment)
137+
138+
// Output:
139+
// Error: invalid address
140+
}
141+
142+
func dummyOrder() []OrderItem {
143+
return []OrderItem{
144+
{ProductID: "MOUSE", Quantity: 1},
145+
}
146+
}
147+
148+
func dummyShipment() Shipment {
149+
return Shipment{OrderID: "ORD123"}
150+
}

0 commit comments

Comments
 (0)