From 981da0ddeae5c450c0d74de2124d645762c38d64 Mon Sep 17 00:00:00 2001 From: konstantin Date: Wed, 12 Apr 2023 06:32:42 +0200 Subject: [PATCH] Nullable fields in Bilanzierung struct: `Bilanzierungsbeginn`, `Bilanzierungsende`, `Bilanzkreis` (#208) (#218) * nullable fields in Bilanzierung struct * fix tests --- bo/bilanzierung.go | 6 +++--- bo/bilanzierung_test.go | 25 +++++++++++++------------ 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/bo/bilanzierung.go b/bo/bilanzierung.go index 105c4d81..1b3667e6 100644 --- a/bo/bilanzierung.go +++ b/bo/bilanzierung.go @@ -22,9 +22,9 @@ import ( type Bilanzierung struct { Geschaeftsobjekt Lastprofile []com.Lastprofil `json:"lastprofile,omitempty"` // Lastprofile ist eine Liste der verwendeten Lastprofile (SLP, SLP/TLP, ALP etc.) - Bilanzierungsbeginn time.Time `json:"bilanzierungsbeginn,omitempty" validate:"omitempty,ltefield=Bilanzierungsende"` // Bilanzierungsbeginn ist der inklusive Beginn der Bilanzierung - Bilanzierungsende time.Time `json:"bilanzierungsende,omitempty" validate:"omitempty,gtefield=Bilanzierungsbeginn"` // Bilanzierungsende ist das exklusive Ende der Bilanzierung - Bilanzkreis string `json:"bilanzkreis,omitempty" validate:"omitempty,len=16,eic"` // Bilanzkreis ist der EIC-Code des Bilanzkreises + Bilanzierungsbeginn *time.Time `json:"bilanzierungsbeginn,omitempty" validate:"omitempty,ltefield=Bilanzierungsende"` // Bilanzierungsbeginn ist der inklusive Beginn der Bilanzierung + Bilanzierungsende *time.Time `json:"bilanzierungsende,omitempty" validate:"omitempty,gtefield=Bilanzierungsbeginn"` // Bilanzierungsende ist das exklusive Ende der Bilanzierung + Bilanzkreis *string `json:"bilanzkreis,omitempty" validate:"omitempty,len=16,eic"` // Bilanzkreis ist der EIC-Code des Bilanzkreises Jahresverbrauchsprognose *com.Menge `json:"jahresverbrauchsprognose,omitempty"` // Jahresverbrauchsprognose ist die Jahresverbrauchsprognose Kundenwert *com.Menge `json:"kundenwert,omitempty"` // Kundenwert ist der Kundenwert // Verbrauchsaufteilung beschreibt, welcher Anteil im SLP- bzw. TLP-Profil steckt diff --git a/bo/bilanzierung_test.go b/bo/bilanzierung_test.go index 5274d594..5a7399ac 100644 --- a/bo/bilanzierung_test.go +++ b/bo/bilanzierung_test.go @@ -15,6 +15,7 @@ import ( "github.com/hochfrequenz/go-bo4e/enum/profilverfahren" "github.com/hochfrequenz/go-bo4e/enum/prognosegrundlage" "github.com/hochfrequenz/go-bo4e/enum/zeitreihentyp" + "github.com/hochfrequenz/go-bo4e/internal" "github.com/shopspring/decimal" "reflect" "strings" @@ -41,9 +42,9 @@ var validBilanzierung = bo.Bilanzierung{ }, Einspeisung: &aTrue, }}, - Bilanzierungsbeginn: time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC), - Bilanzierungsende: time.Date(2021, 2, 1, 0, 0, 0, 0, time.UTC), - Bilanzkreis: "11XVE-N-GHM----Q", + Bilanzierungsbeginn: internal.Ptr(time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC)), + Bilanzierungsende: internal.Ptr(time.Date(2021, 2, 1, 0, 0, 0, 0, time.UTC)), + Bilanzkreis: internal.Ptr("11XVE-N-GHM----Q"), Jahresverbrauchsprognose: &com.Menge{ Wert: newDecimalFromString("1500"), Einheit: mengeneinheit.KWH, @@ -83,7 +84,7 @@ func (s *Suite) Test_Bilanzierung_Deserializes_Unknown_Fields() { var deserializedBilanzierung bo.Bilanzierung err := json.Unmarshal([]byte(jsonString), &deserializedBilanzierung) then.AssertThat(s.T(), err, is.Nil()) - then.AssertThat(s.T(), deserializedBilanzierung.Bilanzkreis, is.EqualTo("THE0BFL002410004")) // a "normal" property/field of Bilanzierung + then.AssertThat(s.T(), *deserializedBilanzierung.Bilanzkreis, is.EqualTo("THE0BFL002410004")) // a "normal" property/field of Bilanzierung then.AssertThat(s.T(), deserializedBilanzierung.ExtensionData["Lastprofil_Codeliste"], is.EqualTo("293")) // an extension data key jsonStringBytes, serializationErr := json.Marshal(deserializedBilanzierung) then.AssertThat(s.T(), serializationErr, is.Nil()) @@ -103,23 +104,23 @@ func (s *Suite) Test_Failed_Bilanzierung_Validation() { bo.Bilanzierung{}, }, "len": { - bo.Bilanzierung{Bilanzkreis: "not 16 chars"}, + bo.Bilanzierung{Bilanzkreis: internal.Ptr("not 16 chars")}, }, "eic": { - bo.Bilanzierung{Bilanzkreis: "FOO BAR XYZ ASD "}, // 16 chars but does not match regex - bo.Bilanzierung{Bilanzkreis: "1234567890123456"}, // 16 chars but does not match regex - bo.Bilanzierung{Bilanzkreis: "11XVE-N-GHM----R"}, // wrong check sum + bo.Bilanzierung{Bilanzkreis: internal.Ptr("FOO BAR XYZ ASD ")}, // 16 chars but does not match regex + bo.Bilanzierung{Bilanzkreis: internal.Ptr("1234567890123456")}, // 16 chars but does not match regex + bo.Bilanzierung{Bilanzkreis: internal.Ptr("11XVE-N-GHM----R")}, // wrong check sum }, "gtefield": { // on ende bo.Bilanzierung{ - Bilanzierungsbeginn: time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC), - Bilanzierungsende: time.Date(1990, 1, 1, 0, 0, 0, 0, time.UTC), + Bilanzierungsbeginn: internal.Ptr(time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC)), + Bilanzierungsende: internal.Ptr(time.Date(1990, 1, 1, 0, 0, 0, 0, time.UTC)), }, }, "ltefield": { // on beginn bo.Bilanzierung{ - Bilanzierungsbeginn: time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC), - Bilanzierungsende: time.Date(1990, 1, 1, 0, 0, 0, 0, time.UTC), + Bilanzierungsbeginn: internal.Ptr(time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC)), + Bilanzierungsende: internal.Ptr(time.Date(1990, 1, 1, 0, 0, 0, 0, time.UTC)), }, }, "maloid": { // on beginn