diff --git a/settings/pkg/store/metadata/bundles.go b/settings/pkg/store/metadata/bundles.go index c9099c843..8a49bfae9 100644 --- a/settings/pkg/store/metadata/bundles.go +++ b/settings/pkg/store/metadata/bundles.go @@ -60,10 +60,30 @@ func (s *Store) ReadBundle(bundleID string) (*settingsmsg.Bundle, error) { return bundle, json.Unmarshal(b, bundle) } -// ReadSetting tries to find a setting by the given id within the dataPath. +// ReadSetting tries to find a setting by the given id from the metadata service func (s *Store) ReadSetting(settingID string) (*settingsmsg.Setting, error) { - fmt.Println("ReadSetting not implemented") - return nil, errors.New("not implemented") + s.Init() + + ids, err := s.mdc.ReadDir(nil, bundleFolderLocation) + if err != nil { + return nil, err + } + + // TODO: avoid spamming metadata service + for _, id := range ids { + b, err := s.ReadBundle(id) + if err != nil { + return nil, err + } + + for _, setting := range b.Settings { + if setting.Id == settingID { + return setting, nil + } + } + + } + return nil, fmt.Errorf("setting '%s' not found", settingID) } // WriteBundle sends the givens record to the metadataclient. returns `record` for legacy reasons diff --git a/settings/pkg/store/metadata/bundles_test.go b/settings/pkg/store/metadata/bundles_test.go index c557dfcc6..0aadbd3b7 100644 --- a/settings/pkg/store/metadata/bundles_test.go +++ b/settings/pkg/store/metadata/bundles_test.go @@ -138,18 +138,6 @@ var ( ) func TestBundles(t *testing.T) { - //s := &Store{ - //Logger: olog.NewLogger( - //olog.Color(true), - //olog.Pretty(true), - //olog.Level("info"), - //), - - //l: &sync.Mutex{}, - //} - //NewMDC(s) - - // write bundles for i := range bundleScenarios { b := bundleScenarios[i] t.Run(b.name, func(t *testing.T) { @@ -182,6 +170,11 @@ func TestBundles(t *testing.T) { for i := range roles { require.Equal(t, settingsmsg.Bundle_TYPE_ROLE, roles[i].Type) } + + // check that ReadSetting works + setting, err := s.ReadSetting(setting1) + require.NoError(t, err) + require.Equal(t, "test-desc-1", setting.Description) // could be tested better ;) } func TestAppendSetting(t *testing.T) {