From 9d027ae63e9d6e3a5011221cb597908546819a1e Mon Sep 17 00:00:00 2001 From: Adriano Date: Mon, 26 Apr 2021 01:39:22 -0300 Subject: [PATCH] Convert FII dividends date to YYYY-MM-DD format --- parsers/fiidb.go | 13 +++++++-- parsers/fiidb_test.go | 63 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+), 2 deletions(-) create mode 100644 parsers/fiidb_test.go diff --git a/parsers/fiidb.go b/parsers/fiidb.go index 39d69f3..0ac6eee 100644 --- a/parsers/fiidb.go +++ b/parsers/fiidb.go @@ -102,8 +102,8 @@ func (fii FIIStore) StoreFIIDividends(stream map[string]string) error { } code := mapFinder("Código de negociação da cota", stream) - baseDate := mapFinder("Data-base", stream) - pymtDate := mapFinder("Data do pagamento", stream) + baseDate := fixDate(mapFinder("Data-base", stream)) + pymtDate := fixDate(mapFinder("Data do pagamento", stream)) val := mapFinder("Valor do provento por cota", stream) const insert = `INSERT OR IGNORE INTO fii_dividends @@ -167,3 +167,12 @@ func comma2dot(val string) float64 { n, _ := strconv.ParseFloat(b, 64) return n } + +// fixDate converts dates from DD/MM/YYYY to YYYY-MM-DD. +func fixDate(date string) string { + if len(date) != len("26/04/2021") || strings.Count(date, "/") != 2 { + return date + } + + return date[6:10] + "-" + date[3:5] + "-" + date[0:2] +} diff --git a/parsers/fiidb_test.go b/parsers/fiidb_test.go new file mode 100644 index 0000000..3c433bf --- /dev/null +++ b/parsers/fiidb_test.go @@ -0,0 +1,63 @@ +package parsers + +import ( + "testing" +) + +func Test_comma2dot(t *testing.T) { + type args struct { + val string + } + tests := []struct { + name string + args args + want float64 + }{ + { + name: "should work", + args: args{val: "1.230,56"}, + want: 1230.56, + }, + { + name: "should return 0", + args: args{val: "shouldbeanum"}, + want: 0, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := comma2dot(tt.args.val); got != tt.want { + t.Errorf("comma2dot() = %v, want %v", got, tt.want) + } + }) + } +} + +func Test_convertDateStr(t *testing.T) { + type args struct { + date string + } + tests := []struct { + name string + args args + want string + }{ + { + name: "should work", + args: args{date: "01/02/2021"}, + want: "2021-02-01", + }, + { + name: "should return the input", + args: args{date: "wrong/date"}, + want: "wrong/date", + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := fixDate(tt.args.date); got != tt.want { + t.Errorf("fixDate() = %v, want %v", got, tt.want) + } + }) + } +}