blob: f200f4700107592752107caf9ebd936419f94497 [file] [log] [blame]
// Package alertstest contains test utils for the alerts package.
package alertstest
import (
"context"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.skia.org/infra/perf/go/alerts"
)
// Store_SaveListDelete tests that an alerts.Store instance operates as expected.
func Store_SaveListDelete(t *testing.T, a alerts.Store) {
ctx := context.Background()
// TODO(jcgregorio) Break up into finer grained tests.
cfg := alerts.NewConfig()
cfg.Query = "source_type=svg"
cfg.DisplayName = "bar"
err := a.Save(ctx, cfg)
assert.NoError(t, err)
require.NotEqual(t, alerts.BadAlertIDAsAsString, cfg.IDAsString)
// Confirm it appears in the list.
cfgs, err := a.List(ctx, false)
require.NoError(t, err)
require.Len(t, cfgs, 1)
// Delete it.
err = a.Delete(ctx, int(cfgs[0].IDAsStringToInt()))
assert.NoError(t, err)
// Confirm it is still there if we list deleted configs.
cfgs, err = a.List(ctx, true)
assert.NoError(t, err)
assert.Len(t, cfgs, 1)
require.NotEqual(t, alerts.BadAlertIDAsAsString, cfgs[0].IDAsString)
// Confirm it is not there if we don't list deleted configs.
cfgs, err = a.List(ctx, false)
assert.NoError(t, err)
assert.Len(t, cfgs, 0)
// Store a second config.
cfg = alerts.NewConfig()
cfg.Query = "source_type=skp"
cfg.DisplayName = "foo"
err = a.Save(ctx, cfg)
assert.NoError(t, err)
// Confirm they are both listed when including deleted configs, and they are
// ordered by DisplayName.
cfgs, err = a.List(ctx, true)
assert.NoError(t, err)
assert.Len(t, cfgs, 2)
assert.Equal(t, "bar", cfgs[0].DisplayName)
assert.Equal(t, "foo", cfgs[1].DisplayName)
}
// Store_SaveWithID tests we can save a new Alert with a given ID.
func Store_SaveWithID(t *testing.T, a alerts.Store) {
ctx := context.Background()
cfg := alerts.NewConfig()
// Add some data to the empty config.
cfg.Query = "source_type=svg"
cfg.DisplayName = "bar"
cfg.IDAsString = "12"
err := a.Save(ctx, cfg)
require.NoError(t, err)
// Confirm it appears in the list.
cfgs, err := a.List(ctx, false)
require.NoError(t, err)
assert.Len(t, cfgs, 1)
assert.Equal(t, cfg, cfgs[0])
}
// SubTestFunction is a func we will call to test one aspect of an
// implementation of regression.Store.
type SubTestFunction func(t *testing.T, store alerts.Store)
// SubTests are all the subtests we have for regression.Store.
var SubTests = map[string]SubTestFunction{
"Store_SaveListDelete": Store_SaveListDelete,
"Store_SaveWithID": Store_SaveWithID,
}