package metrics

import (
	"testing"
)

func TestGaugeInfoJsonString(t *testing.T) {
	g := NewGaugeInfo()
	g.Update(GaugeInfoValue{
		"chain_id":   "5",
		"anotherKey": "any_string_value",
		"third_key":  "anything",
	},
	)
	want := `{"anotherKey":"any_string_value","chain_id":"5","third_key":"anything"}`

	original := g.Snapshot()
	g.Update(GaugeInfoValue{"value": "updated"})

	if have := original.Value().String(); have != want {
		t.Errorf("\nhave: %v\nwant: %v\n", have, want)
	}
	if have, want := g.Snapshot().Value().String(), `{"value":"updated"}`; have != want {
		t.Errorf("\nhave: %v\nwant: %v\n", have, want)
	}
}

func TestGetOrRegisterGaugeInfo(t *testing.T) {
	r := NewRegistry()
	NewRegisteredGaugeInfo("foo", r).Update(
		GaugeInfoValue{"chain_id": "5"})
	g := GetOrRegisterGaugeInfo("foo", r).Snapshot()
	if have, want := g.Value().String(), `{"chain_id":"5"}`; have != want {
		t.Errorf("have\n%v\nwant\n%v\n", have, want)
	}
}