From b3f6fd3dc1bca994301a7d3558bfbb317c7bb4ce Mon Sep 17 00:00:00 2001 From: hunjixin <1084400399@qq.com> Date: Wed, 29 Nov 2023 19:36:01 +0800 Subject: [PATCH 1/2] feat: use embed pg for test, go-cmp to check db time --- config/config.go | 1 + go.mod | 12 ++++++++ go.sum | 22 +++++++++++++ models/models.go | 7 +++++ models/models_test.go | 36 ++++++++++++++++++++++ models/user.go | 10 +++--- models/user_test.go | 72 +++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 155 insertions(+), 5 deletions(-) create mode 100644 models/models_test.go create mode 100644 models/user_test.go diff --git a/config/config.go b/config/config.go index 213ff4f..423619e 100644 --- a/config/config.go +++ b/config/config.go @@ -28,6 +28,7 @@ type APIConfig struct { type DatabaseConfig struct { Connection string `mapstructure:"connection"` + Debug bool `mapstructure:"debug"` } func InitConfig() error { diff --git a/go.mod b/go.mod index 15a3852..6fba1d7 100644 --- a/go.mod +++ b/go.mod @@ -20,32 +20,44 @@ require ( ) require ( + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/fatih/color v1.15.0 // indirect + github.com/fergusstrange/embedded-postgres v1.25.0 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/go-chi/cors v1.2.1 // indirect github.com/go-openapi/jsonpointer v0.19.6 // indirect github.com/go-openapi/swag v0.22.4 // indirect + github.com/google/go-cmp v0.6.0 // indirect github.com/gorilla/mux v1.8.0 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/invopop/yaml v0.2.0 // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/josharian/intern v1.0.0 // indirect + github.com/lib/pq v1.10.9 // indirect github.com/magiconair/properties v1.8.7 // indirect github.com/mailru/easyjson v0.7.7 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.19 // indirect github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect github.com/pelletier/go-toml/v2 v2.1.0 // indirect github.com/perimeterx/marshmallow v1.1.4 // indirect + github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/sagikazarmark/locafero v0.3.0 // indirect github.com/sagikazarmark/slog-shim v0.1.0 // indirect github.com/sourcegraph/conc v0.3.0 // indirect github.com/spf13/afero v1.10.0 // indirect github.com/spf13/cast v1.5.1 // indirect github.com/spf13/pflag v1.0.5 // indirect + github.com/stretchr/objx v0.5.0 // indirect + github.com/stretchr/testify v1.8.4 // indirect github.com/subosito/gotenv v1.6.0 // indirect github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc // indirect + github.com/uptrace/bun/extra/bundebug v1.1.16 // indirect github.com/vmihailenco/msgpack/v5 v5.3.5 // indirect github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect + github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 // indirect go.uber.org/atomic v1.9.0 // indirect go.uber.org/dig v1.17.0 // indirect go.uber.org/multierr v1.9.0 // indirect diff --git a/go.sum b/go.sum index 3014f39..40690bb 100644 --- a/go.sum +++ b/go.sum @@ -53,6 +53,7 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/deepmap/oapi-codegen/v2 v2.0.1-0.20231120160225-add3126ee845 h1:QlRkcr1t+VcHkdk8WJDhuiI94RqmjSgtflB3Q+H8X2k= github.com/deepmap/oapi-codegen/v2 v2.0.1-0.20231120160225-add3126ee845/go.mod h1:pB9cROTwrn6Gj3Rtmcmp5fwV23znquC9tY1rR6+/R3s= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -61,6 +62,10 @@ github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1m github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= +github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= +github.com/fergusstrange/embedded-postgres v1.25.0 h1:sa+k2Ycrtz40eCRPOzI7Ry7TtkWXXJ+YRsxpKMDhxK0= +github.com/fergusstrange/embedded-postgres v1.25.0/go.mod h1:t/MLs0h9ukYM6FSt99R7InCHs1nW0ordoVCcnzmpTYw= github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= @@ -119,6 +124,8 @@ github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= @@ -169,13 +176,18 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= +github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= @@ -188,12 +200,15 @@ github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6 github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= github.com/perimeterx/marshmallow v1.1.4 h1:pZLDH9RjlLGGorbXhcaQLhfuV0pFMNfPO55FuFkxqLw= github.com/perimeterx/marshmallow v1.1.4/go.mod h1:dsXbUu8CRzfYP5a87xpp0xq9S3u0Vchtcl8we9tYaXw= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= @@ -216,6 +231,7 @@ github.com/spf13/viper v1.17.0 h1:I5txKw7MJasPL/BrfkbA0Jyo/oELqVmux4pR/UxOMfI= github.com/spf13/viper v1.17.0/go.mod h1:BmMMMLQXSbcHK6KAOiFLz0l5JHrU89OdIRHvsk0+yVI= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -241,10 +257,14 @@ github.com/uptrace/bun/dialect/pgdialect v1.1.16 h1:eUPZ+YCJ69BA+W1X1ZmpOJSkv1oY github.com/uptrace/bun/dialect/pgdialect v1.1.16/go.mod h1:KQjfx/r6JM0OXfbv0rFrxAbdkPD7idK8VitnjIV9fZI= github.com/uptrace/bun/driver/pgdriver v1.1.16 h1:b/NiSXk6Ldw7KLfMLbOqIkm4odHd7QiNOCPLqPFJjK4= github.com/uptrace/bun/driver/pgdriver v1.1.16/go.mod h1:Rmfbc+7lx1z/umjMyAxkOHK81LgnGj71XC5YpA6k1vU= +github.com/uptrace/bun/extra/bundebug v1.1.16 h1:SgicRQGtnjhrIhlYOxdkOm1Em4s6HykmT3JblHnoTBM= +github.com/uptrace/bun/extra/bundebug v1.1.16/go.mod h1:SkiOkfUirBiO1Htc4s5bQKEq+JSeU1TkBVpMsPz2ePM= github.com/vmihailenco/msgpack/v5 v5.3.5 h1:5gO0H1iULLWGhs2H5tbAHIZTV8/cYafcFOr9znI5mJU= github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc= github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g= github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= +github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 h1:nIPpBwaJSVYIxUFsDv3M8ofmx9yWTog9BfvIu0q41lo= +github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -266,6 +286,7 @@ go.uber.org/fx v1.20.1/go.mod h1:iSYNbHf2y55acNCwCXKx7LbWb5WG1Bnue5RDXz1OREg= go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= @@ -411,6 +432,7 @@ golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= diff --git a/models/models.go b/models/models.go index 1d62321..e291636 100644 --- a/models/models.go +++ b/models/models.go @@ -4,6 +4,8 @@ import ( "context" "database/sql" + "github.com/uptrace/bun/extra/bundebug" + "github.com/jiaozifs/jiaozifs/config" "github.com/uptrace/bun" "github.com/uptrace/bun/dialect/pgdialect" @@ -19,6 +21,11 @@ func SetupDatabase(ctx context.Context, lc fx.Lifecycle, dbConfig *config.Databa } bunDB := bun.NewDB(sqlDB, pgdialect.New(), bun.WithDiscardUnknownColumns()) + + if dbConfig.Debug { + bunDB.AddQueryHook(bundebug.NewQueryHook(bundebug.WithVerbose(true))) + } + lc.Append(fx.Hook{ OnStop: func(ctx context.Context) error { return bunDB.Close() diff --git a/models/models_test.go b/models/models_test.go new file mode 100644 index 0000000..bfc4231 --- /dev/null +++ b/models/models_test.go @@ -0,0 +1,36 @@ +package models_test + +import ( + "context" + "fmt" + "github.com/jiaozifs/jiaozifs/models" + "testing" + + embeddedpostgres "github.com/fergusstrange/embedded-postgres" + + "github.com/phayes/freeport" + "github.com/stretchr/testify/require" + + "github.com/jiaozifs/jiaozifs/config" + + "go.uber.org/fx/fxtest" +) + +var testConnTmpl = "postgres://postgres:postgres@localhost:%d/jiaozifs?sslmode=disable" + +func TestSetupDatabase(t *testing.T) { + ctx := context.Background() + port, err := freeport.GetFreePort() + require.NoError(t, err) + + postgres := embeddedpostgres.NewDatabase(embeddedpostgres.DefaultConfig().Port(uint32(port)).Database("jiaozifs")) + err = postgres.Start() + require.NoError(t, err) + defer postgres.Stop() //nolint + + lc := fxtest.NewLifecycle(t) + db, err := models.SetupDatabase(ctx, lc, &config.DatabaseConfig{Connection: fmt.Sprintf(testConnTmpl, port)}) + require.NoError(t, err) + lc.RequireStop() + require.NoError(t, db.PingContext(ctx)) +} diff --git a/models/user.go b/models/user.go index 9b11a8b..7bfd09c 100644 --- a/models/user.go +++ b/models/user.go @@ -17,12 +17,12 @@ type User struct { Name string `bun:"name,notnull"` Email string `bun:"email,notnull"` EncryptedPassword string `bun:"encrypted_password"` - CurrentSignInAt int64 `bun:"current_sign_in_at"` - LastSignInAt int64 `bun:"last_sign_in_at"` + CurrentSignInAt time.Time `bun:"current_sign_in_at"` + LastSignInAt time.Time `bun:"last_sign_in_at"` CurrentSignInIP string `bun:"current_sign_in_ip"` LastSignInIP string `bun:"last_sign_in_ip"` - CreatedAt time.Time `bun:"created_at,type:timestamp"` - UpdatedAt time.Time `bun:"updated_at,type:timestamp"` + CreatedAt time.Time `bun:"created_at"` + UpdatedAt time.Time `bun:"updated_at"` } type IUserRepo interface { @@ -42,7 +42,7 @@ func NewUserRepo(db *bun.DB) IUserRepo { func (userRepo *UserRepo) GetUser(ctx context.Context, id uuid.UUID) (*User, error) { user := &User{} - return user, userRepo.DB.NewSelect().Model(_user).Where("id = :id", id).Scan(ctx, &user) + return user, userRepo.DB.NewSelect().Model(user).Where("id = ?", id).Scan(ctx) } func (userRepo *UserRepo) Insert(ctx context.Context, user *User) (*User, error) { diff --git a/models/user_test.go b/models/user_test.go new file mode 100644 index 0000000..e6230e1 --- /dev/null +++ b/models/user_test.go @@ -0,0 +1,72 @@ +package models_test + +import ( + "context" + "fmt" + "testing" + "time" + + "github.com/google/go-cmp/cmp" + + "github.com/google/uuid" + + "github.com/uptrace/bun" + + "github.com/jiaozifs/jiaozifs/models/migrations" + + "github.com/jiaozifs/jiaozifs/models" + + "github.com/jiaozifs/jiaozifs/config" + "github.com/phayes/freeport" + "go.uber.org/fx/fxtest" + + "github.com/stretchr/testify/require" + + embeddedpostgres "github.com/fergusstrange/embedded-postgres" + + _ "github.com/jiaozifs/jiaozifs/models/migrations" +) + +var dbTimeCmpOpt = cmp.Comparer(func(x, y time.Time) bool { + return x.Unix() == y.Unix() +}) + +func setup(ctx context.Context, t *testing.T) (*embeddedpostgres.EmbeddedPostgres, *bun.DB) { + port, err := freeport.GetFreePort() + require.NoError(t, err) + postgres := embeddedpostgres.NewDatabase(embeddedpostgres.DefaultConfig().Port(uint32(port)).Database("jiaozifs")) + err = postgres.Start() + require.NoError(t, err) + + db, err := models.SetupDatabase(ctx, fxtest.NewLifecycle(t), &config.DatabaseConfig{Debug: true, Connection: fmt.Sprintf(testConnTmpl, port)}) + require.NoError(t, err) + + migrations.MigrateDatabase(ctx, db) + return postgres, db +} +func TestNewUserRepo(t *testing.T) { + ctx := context.Background() + postgres, db := setup(ctx, t) + defer postgres.Stop() //nolint + + repo := models.NewUserRepo(db) + userModel := &models.User{ + Name: "aaa", + Email: "xx@gmail.com", + EncryptedPassword: "aaaaa", + CurrentSignInAt: time.Now(), + LastSignInAt: time.Now(), + CurrentSignInIP: "127.0.0.1", + LastSignInIP: "127.0.0.1", + CreatedAt: time.Now(), + UpdatedAt: time.Now(), + } + newUser, err := repo.Insert(ctx, userModel) + require.NoError(t, err) + require.NotEqual(t, uuid.Nil, newUser.ID) + + user, err := repo.GetUser(ctx, newUser.ID) + require.NoError(t, err) + + require.True(t, cmp.Equal(userModel.UpdatedAt, user.UpdatedAt, dbTimeCmpOpt)) +} From 93f3da0b4f3dad4784935ec463cc410c8497ea8f Mon Sep 17 00:00:00 2001 From: hunjixin <1084400399@qq.com> Date: Wed, 29 Nov 2023 20:01:03 +0800 Subject: [PATCH 2/2] chore: make lint happy --- .github/workflows/test.yml | 4 ++-- .gitignore | 3 ++- models/models_test.go | 4 +++- models/user.go | 2 -- models/user_test.go | 5 ++--- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 3b19b4f..5b1e313 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -34,13 +34,13 @@ jobs: - name: Test run: | - go test -coverpkg=./... -coverprofile=coverage.txt -covermode=atomic -timeout=30m -parallel=4 -v ./... + go test -coverpkg=./... -coverprofile=coverage.out -covermode=atomic -timeout=30m -parallel=4 -v ./... - name: Upload uses: codecov/codecov-action@v3 with: token: - files: ./coverage.txt + files: ./coverage.out name: jzfs fail_ci_if_error: true verbose: true diff --git a/.gitignore b/.gitignore index 8dbb396..c1de863 100644 --- a/.gitignore +++ b/.gitignore @@ -17,7 +17,8 @@ jzfs *.test # Test coverage file -coverage.txt +coverage.out + # Dependency directories (remove the comment below to include it) # vendor/ diff --git a/models/models_test.go b/models/models_test.go index bfc4231..c8be949 100644 --- a/models/models_test.go +++ b/models/models_test.go @@ -3,9 +3,11 @@ package models_test import ( "context" "fmt" - "github.com/jiaozifs/jiaozifs/models" + "testing" + "github.com/jiaozifs/jiaozifs/models" + embeddedpostgres "github.com/fergusstrange/embedded-postgres" "github.com/phayes/freeport" diff --git a/models/user.go b/models/user.go index 7bfd09c..aa8a612 100644 --- a/models/user.go +++ b/models/user.go @@ -9,8 +9,6 @@ import ( "github.com/uptrace/bun" ) -var _user = (*User)(nil) - type User struct { bun.BaseModel `bun:"table:users,alias:u"` ID uuid.UUID `bun:"id,pk,type:uuid,default:uuid_generate_v4()"` diff --git a/models/user_test.go b/models/user_test.go index e6230e1..2fb49a4 100644 --- a/models/user_test.go +++ b/models/user_test.go @@ -23,8 +23,6 @@ import ( "github.com/stretchr/testify/require" embeddedpostgres "github.com/fergusstrange/embedded-postgres" - - _ "github.com/jiaozifs/jiaozifs/models/migrations" ) var dbTimeCmpOpt = cmp.Comparer(func(x, y time.Time) bool { @@ -41,7 +39,8 @@ func setup(ctx context.Context, t *testing.T) (*embeddedpostgres.EmbeddedPostgre db, err := models.SetupDatabase(ctx, fxtest.NewLifecycle(t), &config.DatabaseConfig{Debug: true, Connection: fmt.Sprintf(testConnTmpl, port)}) require.NoError(t, err) - migrations.MigrateDatabase(ctx, db) + err = migrations.MigrateDatabase(ctx, db) + require.NoError(t, err) return postgres, db } func TestNewUserRepo(t *testing.T) {