From 49cb527794860505ffc0cccb36c3effd04623041 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=90or=C4=91ije=20Kunda=C4=8Dina?= Date: Wed, 12 Apr 2023 06:21:19 +0200 Subject: [PATCH] Make various `time`s optional/pointers: Zeitraum, Rechnung, Reklamation, Vertragskonditionen (always Start/End) (#206) --- bo/preisblatt_test.go | 13 ++++++------ bo/rechnung_test.go | 8 ++++---- bo/reklamation_test.go | 11 ++++++----- com/vertragskonditionen_test.go | 19 +++++++++--------- com/zeitraum.go | 8 ++++---- com/zeitraum_test.go | 35 +++++++++++++++++---------------- 6 files changed, 49 insertions(+), 45 deletions(-) diff --git a/bo/preisblatt_test.go b/bo/preisblatt_test.go index 20a36d4a..3962b77f 100644 --- a/bo/preisblatt_test.go +++ b/bo/preisblatt_test.go @@ -16,6 +16,7 @@ import ( "github.com/hochfrequenz/go-bo4e/enum/rollencodetyp" "github.com/hochfrequenz/go-bo4e/enum/sparte" "github.com/hochfrequenz/go-bo4e/enum/waehrungseinheit" + "github.com/hochfrequenz/go-bo4e/internal" "github.com/shopspring/decimal" "reflect" "strings" @@ -47,8 +48,8 @@ func (s *Suite) Test_Preisblatt_Deserialization() { Makoadresse: "test@test.com", }, Gueltigkeit: com.Zeitraum{ - Startzeitpunkt: time.Date(2021, 12, 31, 22, 0, 0, 0, time.UTC), - Startdatum: time.Date(2021, 12, 31, 22, 0, 0, 0, time.UTC), + Startzeitpunkt: internal.Ptr(time.Date(2021, 12, 31, 22, 0, 0, 0, time.UTC)), + Startdatum: internal.Ptr(time.Date(2021, 12, 31, 22, 0, 0, 0, time.UTC)), }, Preispositionen: []com.Preisposition{ { @@ -155,10 +156,10 @@ func (s *Suite) Test_Successful_Preisblatt_Validation() { Makoadresse: "test@test.com", }, Gueltigkeit: com.Zeitraum{ - Startzeitpunkt: time.Date(2021, 12, 31, 22, 00, 00, 00, time.UTC), - Startdatum: time.Date(2021, 12, 31, 22, 00, 00, 00, time.UTC), - Enddatum: time.Date(9999, 12, 31, 23, 59, 59, 00, time.UTC), - Endzeitpunkt: time.Date(9999, 12, 31, 23, 59, 59, 00, time.UTC), + Startzeitpunkt: internal.Ptr(time.Date(2021, 12, 31, 22, 00, 00, 00, time.UTC)), + Startdatum: internal.Ptr(time.Date(2021, 12, 31, 22, 00, 00, 00, time.UTC)), + Enddatum: internal.Ptr(time.Date(9999, 12, 31, 23, 59, 59, 00, time.UTC)), + Endzeitpunkt: internal.Ptr(time.Date(9999, 12, 31, 23, 59, 59, 00, time.UTC)), }, Preispositionen: []com.Preisposition{}, }, diff --git a/bo/rechnung_test.go b/bo/rechnung_test.go index 9a6d389f..8ed56633 100644 --- a/bo/rechnung_test.go +++ b/bo/rechnung_test.go @@ -47,8 +47,8 @@ var serializableRechnung = bo.Rechnung{ Rechnungsperiode: com.Zeitraum{ Einheit: zeiteinheit.MINUTE, Dauer: decimal.NullDecimal{}, - Startzeitpunkt: time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC), - Endzeitpunkt: time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC).Add(time.Minute * 15), + Startzeitpunkt: internal.Ptr(time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC)), + Endzeitpunkt: internal.Ptr(time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC).Add(time.Minute * 15)), }, Buchungsdatum: time.Date(2022, 9, 22, 0, 0, 0, 0, time.UTC), Rechnungsersteller: bo.Geschaeftspartner{ @@ -290,8 +290,8 @@ var completeValidRechnung = bo.Rechnung{ Rechnungsperiode: com.Zeitraum{ Einheit: zeiteinheit.MINUTE, Dauer: decimal.NewNullDecimal(decimal.NewFromFloat(15)), - Startzeitpunkt: time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC), - Endzeitpunkt: time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC).Add(time.Minute * 15), + Startzeitpunkt: internal.Ptr(time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC)), + Endzeitpunkt: internal.Ptr(time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC).Add(time.Minute * 15)), }, Rechnungsersteller: bo.Geschaeftspartner{ Geschaeftsobjekt: bo.Geschaeftsobjekt{ diff --git a/bo/reklamation_test.go b/bo/reklamation_test.go index 0ed2b14c..849ce68e 100644 --- a/bo/reklamation_test.go +++ b/bo/reklamation_test.go @@ -10,6 +10,7 @@ import ( "github.com/hochfrequenz/go-bo4e/enum/botyp" "github.com/hochfrequenz/go-bo4e/enum/lokationstyp" "github.com/hochfrequenz/go-bo4e/enum/reklamationsgrund" + "github.com/hochfrequenz/go-bo4e/internal" "reflect" "time" @@ -28,7 +29,7 @@ func (s *Suite) Test_Reklamation_Deserialization() { LokationsTyp: lokationstyp.MALO, ObisKennzahl: obis("1-0:1.8.0"), ZeitraumMesswertanfrage: com.Zeitraum{ - Startzeitpunkt: time.Date(2021, 12, 31, 22, 0, 0, 0, time.UTC), + Startzeitpunkt: internal.Ptr(time.Date(2021, 12, 31, 22, 0, 0, 0, time.UTC)), }.AsPointer(), Reklamationsgrund: reklamationsgrund.WERTE_FEHLEN, } @@ -79,10 +80,10 @@ func (s *Suite) Test_Successful_Reklamation_Validation() { LokationsTyp: lokationstyp.MALO, ObisKennzahl: obis("1-0:1.8.0"), ZeitraumMesswertanfrage: com.Zeitraum{ - Startzeitpunkt: time.Date(2021, 11, 30, 22, 0, 0, 0, time.UTC), - Startdatum: time.Date(2021, 11, 30, 22, 0, 0, 0, time.UTC), - Endzeitpunkt: time.Date(2021, 12, 31, 22, 0, 0, 0, time.UTC), - Enddatum: time.Date(2021, 12, 31, 22, 0, 0, 0, time.UTC), + Startzeitpunkt: internal.Ptr(time.Date(2021, 11, 30, 22, 0, 0, 0, time.UTC)), + Startdatum: internal.Ptr(time.Date(2021, 11, 30, 22, 0, 0, 0, time.UTC)), + Endzeitpunkt: internal.Ptr(time.Date(2021, 12, 31, 22, 0, 0, 0, time.UTC)), + Enddatum: internal.Ptr(time.Date(2021, 12, 31, 22, 0, 0, 0, time.UTC)), }.AsPointer(), Reklamationsgrund: reklamationsgrund.WERTE_FEHLEN, }, diff --git a/com/vertragskonditionen_test.go b/com/vertragskonditionen_test.go index ca24ffa4..1c8f0b4c 100644 --- a/com/vertragskonditionen_test.go +++ b/com/vertragskonditionen_test.go @@ -7,6 +7,7 @@ import ( "github.com/go-playground/validator/v10" "github.com/hochfrequenz/go-bo4e/com" "github.com/hochfrequenz/go-bo4e/enum/zeiteinheit" + "github.com/hochfrequenz/go-bo4e/internal" "github.com/shopspring/decimal" "strings" "time" @@ -20,16 +21,16 @@ var validVertragskonditionen = com.Vertragskonditionen{ Dauer: decimal.NewNullDecimal(decimal.NewFromFloat(15)), }, Kuendigungsfrist: &com.Zeitraum{ - Startzeitpunkt: time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC), - Endzeitpunkt: time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC).Add(time.Minute * 15), - Startdatum: time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC), - Enddatum: time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC).Add(time.Minute * 15), + Startzeitpunkt: internal.Ptr(time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC)), + Endzeitpunkt: internal.Ptr(time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC).Add(time.Minute * 15)), + Startdatum: internal.Ptr(time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC)), + Enddatum: internal.Ptr(time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC).Add(time.Minute * 15)), }, Vertragsverlaengerung: &com.Zeitraum{ - Startzeitpunkt: time.Date(2022, 8, 1, 0, 0, 0, 0, time.UTC), - Endzeitpunkt: time.Date(2022, 8, 1, 0, 0, 0, 0, time.UTC).Add(time.Minute * 15), - Startdatum: time.Date(2022, 8, 1, 0, 0, 0, 0, time.UTC), - Enddatum: time.Date(2022, 8, 1, 0, 0, 0, 0, time.UTC).Add(time.Minute * 15), + Startzeitpunkt: internal.Ptr(time.Date(2022, 8, 1, 0, 0, 0, 0, time.UTC)), + Endzeitpunkt: internal.Ptr(time.Date(2022, 8, 1, 0, 0, 0, 0, time.UTC).Add(time.Minute * 15)), + Startdatum: internal.Ptr(time.Date(2022, 8, 1, 0, 0, 0, 0, time.UTC)), + Enddatum: internal.Ptr(time.Date(2022, 8, 1, 0, 0, 0, 0, time.UTC).Add(time.Minute * 15)), }, Abschlagszyklus: &com.Zeitraum{ Einheit: zeiteinheit.JAHR, @@ -58,7 +59,7 @@ func (s *Suite) Test_Vertragskonditionen_Failed_Validation() { com.Vertragskonditionen{ // is only invalid if a zeitraum is invalid Vertragslaufzeit: &com.Zeitraum{ - Startzeitpunkt: time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC), + Startzeitpunkt: internal.Ptr(time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC)), }, }, }, diff --git a/com/zeitraum.go b/com/zeitraum.go index 3e8fd699..6139d305 100644 --- a/com/zeitraum.go +++ b/com/zeitraum.go @@ -10,10 +10,10 @@ import ( type Zeitraum struct { Einheit zeiteinheit.Zeiteinheit `json:"zeiteinheit,omitempty" validate:"omitempty,required_with=Dauer"` // Einheit is the unit of measurement Dauer decimal.NullDecimal `json:"dauer,omitempty" validate:"omitempty,required_with=Einheit"` // Dauer ist eh duration - Startdatum time.Time `json:"startdatum,omitempty" validate:"required_without_all=Einheit Dauer" example:"2018-01-28T10:15:00+01"` // Startdatum is the day and time of begin - Enddatum time.Time `json:"enddatum,omitempty" validate:"required_without_all=Einheit Dauer" example:"2018-01-28T10:15:00+01"` // Enddatum is the day and time of end - Startzeitpunkt time.Time `json:"startzeitpunkt,omitempty" validate:"required_without_all=Einheit Dauer" example:"2018-01-28T10:15:00+01"` // Startzeitpunkt is the inclusive begin - Endzeitpunkt time.Time `json:"endzeitpunkt,omitempty" validate:"required_with=Startzeitpunkt,omitempty,gtfield=Startzeitpunkt" example:"2018-01-28T10:30:00+01"` // Endzeitpunkt is the exclusive end + Startdatum *time.Time `json:"startdatum,omitempty" validate:"required_without_all=Einheit Dauer" example:"2018-01-28T10:15:00+01"` // Startdatum is the day and time of begin + Enddatum *time.Time `json:"enddatum,omitempty" validate:"required_without_all=Einheit Dauer" example:"2018-01-28T10:15:00+01"` // Enddatum is the day and time of end + Startzeitpunkt *time.Time `json:"startzeitpunkt,omitempty" validate:"required_without_all=Einheit Dauer" example:"2018-01-28T10:15:00+01"` // Startzeitpunkt is the inclusive begin + Endzeitpunkt *time.Time `json:"endzeitpunkt,omitempty" validate:"required_with=Startzeitpunkt,omitempty,gtfield=Startzeitpunkt" example:"2018-01-28T10:30:00+01"` // Endzeitpunkt is the exclusive end } func (zeitraum Zeitraum) AsPointer() *Zeitraum { diff --git a/com/zeitraum_test.go b/com/zeitraum_test.go index 91b5ee6b..1d413f1c 100644 --- a/com/zeitraum_test.go +++ b/com/zeitraum_test.go @@ -7,6 +7,7 @@ import ( "github.com/go-playground/validator/v10" "github.com/hochfrequenz/go-bo4e/com" "github.com/hochfrequenz/go-bo4e/enum/zeiteinheit" + "github.com/hochfrequenz/go-bo4e/internal" "github.com/shopspring/decimal" "strings" "time" @@ -17,10 +18,10 @@ func (s *Suite) Test_Zeitraum_Deserialization() { var zeitraum = com.Zeitraum{ Einheit: zeiteinheit.MINUTE, Dauer: decimal.NewNullDecimal(decimal.NewFromFloat(15)), - Startzeitpunkt: time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC), - Startdatum: time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC), - Enddatum: time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC).Add(time.Minute * 15), - Endzeitpunkt: time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC).Add(time.Minute * 15), + Startzeitpunkt: internal.Ptr(time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC)), + Startdatum: internal.Ptr(time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC)), + Enddatum: internal.Ptr(time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC).Add(time.Minute * 15)), + Endzeitpunkt: internal.Ptr(time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC).Add(time.Minute * 15)), } serializedZeitraum, err := json.Marshal(zeitraum) jsonString := string(serializedZeitraum) @@ -36,8 +37,8 @@ func (s *Suite) Test_Zeitraum_Deserialization() { // TestZeitraumDeserializationWithoutEinheit func (s *Suite) Test_Zeitraum_DeserializationWithoutEinheit() { var zeitraum = com.Zeitraum{ - Startzeitpunkt: time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC), - Endzeitpunkt: time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC).Add(time.Minute * 15), + Startzeitpunkt: internal.Ptr(time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC)), + Endzeitpunkt: internal.Ptr(time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC).Add(time.Minute * 15)), } serializedZeitraum, err := json.Marshal(zeitraum) jsonString := string(serializedZeitraum) @@ -56,13 +57,13 @@ func (s *Suite) Test_Zeitraum_Failed_Validation() { invalidZeitraums := map[string][]interface{}{ "required_with": { com.Zeitraum{ - Startzeitpunkt: time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC), + Startzeitpunkt: internal.Ptr(time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC)), }, }, "gtfield": { com.Zeitraum{ - Startzeitpunkt: time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC), - Endzeitpunkt: time.Date(2020, 8, 1, 0, 0, 0, 0, time.UTC), + Startzeitpunkt: internal.Ptr(time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC)), + Endzeitpunkt: internal.Ptr(time.Date(2020, 8, 1, 0, 0, 0, 0, time.UTC)), }, }, } @@ -76,20 +77,20 @@ func (s *Suite) Test_Successful_Zeitraum_Validation() { com.Zeitraum{ Einheit: zeiteinheit.Zeiteinheit(0), Dauer: decimal.NewNullDecimal(decimal.NewFromFloat(15)), - Startzeitpunkt: time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC), - Startdatum: time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC), - Enddatum: time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC).Add(time.Minute * 15), - Endzeitpunkt: time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC).Add(time.Minute * 15), + Startzeitpunkt: internal.Ptr(time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC)), + Startdatum: internal.Ptr(time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC)), + Enddatum: internal.Ptr(time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC).Add(time.Minute * 15)), + Endzeitpunkt: internal.Ptr(time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC).Add(time.Minute * 15)), }, com.Zeitraum{ Einheit: zeiteinheit.MINUTE, Dauer: decimal.NewNullDecimal(decimal.NewFromFloat(15)), }, com.Zeitraum{ - Startzeitpunkt: time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC), - Endzeitpunkt: time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC).Add(time.Minute * 15), - Startdatum: time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC), - Enddatum: time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC).Add(time.Minute * 15), + Startzeitpunkt: internal.Ptr(time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC)), + Endzeitpunkt: internal.Ptr(time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC).Add(time.Minute * 15)), + Startdatum: internal.Ptr(time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC)), + Enddatum: internal.Ptr(time.Date(2021, 8, 1, 0, 0, 0, 0, time.UTC).Add(time.Minute * 15)), }, } VerfiySuccessfulValidations(s, validate, validZeitraums)