From a647f56bb0cc36c660e99442ca6a1da04472c4a7 Mon Sep 17 00:00:00 2001 From: jkoberg Date: Tue, 1 Mar 2022 15:22:19 +0100 Subject: [PATCH] unitests for list values Signed-off-by: jkoberg --- settings/pkg/store/metadata/store_test.go | 2 +- settings/pkg/store/metadata/values.go | 38 +++++++++++++++- settings/pkg/store/metadata/values_test.go | 51 +++++++++++++++++----- 3 files changed, 78 insertions(+), 13 deletions(-) diff --git a/settings/pkg/store/metadata/store_test.go b/settings/pkg/store/metadata/store_test.go index c963901688..6ce91a16d3 100644 --- a/settings/pkg/store/metadata/store_test.go +++ b/settings/pkg/store/metadata/store_test.go @@ -30,7 +30,7 @@ const ( // value ids value1 = "fd3b6221-dc13-4a22-824d-2480495f1cdb" value2 = "2a0bd9b0-ca1d-491a-8c56-d2ddfd68ded8" - //value3 = "b42702d2-5e4d-4d73-b133-e1f9e285355e" + value3 = "b42702d2-5e4d-4d73-b133-e1f9e285355e" ) // use "unit" or "integration" do define test type. You need a running ocis instance for integration tests diff --git a/settings/pkg/store/metadata/values.go b/settings/pkg/store/metadata/values.go index df23883689..c79cc0361e 100644 --- a/settings/pkg/store/metadata/values.go +++ b/settings/pkg/store/metadata/values.go @@ -14,7 +14,42 @@ import ( // If the accountUUID is empty, only values with empty accountUUID are returned. // If the accountUUID is not empty, values with an empty or with a matching accountUUID are returned. func (s *Store) ListValues(bundleID, accountUUID string) ([]*settingsmsg.Value, error) { - return nil, errors.New("not implemented") + s.Init() + + vIDs, err := s.mdc.ReadDir(nil, valuesFolderLocation) + if err != nil { + return nil, err + } + + // TODO: refine logic not to spam metadata service + var values []*settingsmsg.Value + for _, vid := range vIDs { + b, err := s.mdc.SimpleDownload(nil, valuePath(vid)) + if err != nil { + return nil, err + } + + v := &settingsmsg.Value{} + err = json.Unmarshal(b, v) + if err != nil { + return nil, err + } + + if bundleID != "" && v.BundleId != bundleID { + continue + } + + if v.AccountUuid == "" { + values = append(values, v) + continue + } + + if v.AccountUuid == accountUUID { + values = append(values, v) + continue + } + } + return values, nil } // ReadValue tries to find a value by the given valueId within the dataPath @@ -30,6 +65,7 @@ func (s *Store) ReadValue(valueID string) (*settingsmsg.Value, error) { // ReadValueByUniqueIdentifiers tries to find a value given a set of unique identifiers func (s *Store) ReadValueByUniqueIdentifiers(accountUUID, settingID string) (*settingsmsg.Value, error) { + fmt.Println("ReadValueByUniqueIdentifiers not implemented") return nil, errors.New("not implemented") } diff --git a/settings/pkg/store/metadata/values_test.go b/settings/pkg/store/metadata/values_test.go index 462460fbcd..62c71867e0 100644 --- a/settings/pkg/store/metadata/values_test.go +++ b/settings/pkg/store/metadata/values_test.go @@ -30,7 +30,7 @@ var valueScenarios = []struct { name: "generic-test-with-file-resource", value: &settingsmsg.Value{ Id: value2, - BundleId: bundle1, + BundleId: bundle2, SettingId: setting2, AccountUuid: accountUUID1, Resource: &settingsmsg.Resource{ @@ -42,18 +42,25 @@ var valueScenarios = []struct { }, }, }, + { + name: "value without accountUUID", + value: &settingsmsg.Value{ + Id: value3, + BundleId: bundle3, + SettingId: setting2, + AccountUuid: "", + Resource: &settingsmsg.Resource{ + Type: settingsmsg.Resource_TYPE_FILE, + Id: "adfba82d-919a-41c3-9cd1-5a3f83b2bf76", + }, + Value: &settingsmsg.Value_StringValue{ + StringValue: "tralala", + }, + }, + }, } func TestValues(t *testing.T) { - //mdc := NewMDC() - //s := Store{ - //Logger: olog.NewLogger( - //olog.Color(true), - //olog.Pretty(true), - //olog.Level("info"), - //), - //mdc: mdc, - //} for i := range valueScenarios { index := i t.Run(valueScenarios[index].name, func(t *testing.T) { @@ -65,7 +72,29 @@ func TestValues(t *testing.T) { v, err = s.ReadValue(value.Id) require.NoError(t, err) require.Equal(t, value, v) - }) } } + +func TestListValues(t *testing.T) { + for _, v := range valueScenarios { + _, err := s.WriteValue(v.value) + require.NoError(t, err) + } + + // empty accountid returns only values with empty accountud + vs, err := s.ListValues("", "") + require.NoError(t, err) + require.Len(t, vs, 1) + + // filled accountid returns matching and empty accountUUID values + vs, err = s.ListValues("", accountUUID1) + require.NoError(t, err) + require.Len(t, vs, 3) + + // filled bundleid only returns matching values + vs, err = s.ListValues(bundle3, accountUUID1) + require.NoError(t, err) + require.Len(t, vs, 1) + +}