package msgbus

import (
	"net/http"
	"net/http/httptest"
	"testing"

	"github.com/stretchr/testify/assert"
)

func TestMetrics(t *testing.T) {
	assert := assert.New(t)

	m := NewMetrics("test")
	m.NewCounter("foo", "counter", "help")
	m.NewCounterFunc("foo", "counter_func", "help", func() float64 { return 1.0 })
	m.NewCounterVec("foo", "counter_vec", "help", []string{"test"})
	m.NewGauge("foo", "gauge", "help")
	m.NewGaugeFunc("foo", "gauge_func", "help", func() float64 { return 1.0 })
	m.NewGaugeVec("foo", "gauge_vec", "help", []string{"test"})

	m.Counter("foo", "counter").Inc()
	m.CounterVec("foo", "counter_vec").WithLabelValues("test").Add(1)
	m.Gauge("foo", "gauge").Add(1)
	m.GaugeVec("foo", "gauge_vec").WithLabelValues("test").Add(1)

	w := httptest.NewRecorder()
	r, _ := http.NewRequest("GET", "/", nil)

	m.Handler().ServeHTTP(w, r)
	assert.Equal(w.Code, http.StatusOK)

	assert.Regexp(
		`
# HELP test_foo_counter help
# TYPE test_foo_counter counter
test_foo_counter 1
# HELP test_foo_counter_func help
# TYPE test_foo_counter_func counter
test_foo_counter_func 1
# HELP test_foo_counter_vec help
# TYPE test_foo_counter_vec counter
test_foo_counter_vec{test="test"} 1
# HELP test_foo_gauge help
# TYPE test_foo_gauge gauge
test_foo_gauge 1
# HELP test_foo_gauge_func help
# TYPE test_foo_gauge_func gauge
test_foo_gauge_func 1
# HELP test_foo_gauge_vec help
# TYPE test_foo_gauge_vec gauge
test_foo_gauge_vec{test="test"} 1
`,
		w.Body.String(),
	)
}
