grafana/pkg/services/ngalert/store/provisioning_store_test.go
Alexander Weaver 935059a376
Alerting: Create basic storage layer for provisioning (#44679)
* Simplistic store API for provenance lookups on arbitrary types

* Add a few notes in comments

* Improved type safety for provisioned objects

* Clean-up TODOs for future PRs

* Clean up provisioning model

* Clean up tests

* Restrict allowable types in interface

* Fix linter error

* Move AlertRule domain methods to same file as AlertRule definition

* Update pkg/services/ngalert/models/provisioning.go

Co-authored-by: George Robinson <george.robinson@grafana.com>

* Complete interface rename

* Pass context through store API

* More idiomatic method names

* Better error description

* Improve code-docs

* Use ORM language instead of raw sql

* Add support for records in different orgs

* ResourceTypeID -> ResourceType since it's not an ID

Co-authored-by: George Robinson <george.robinson@grafana.com>
2022-02-04 13:23:19 -06:00

84 lines
2.3 KiB
Go

package store_test
import (
"context"
"testing"
"github.com/grafana/grafana/pkg/services/ngalert/models"
"github.com/grafana/grafana/pkg/services/ngalert/tests"
"github.com/stretchr/testify/require"
)
const testAlertingIntervalSeconds = 10
func TestProvisioningStore(t *testing.T) {
_, dbstore := tests.SetupTestEnv(t, testAlertingIntervalSeconds)
t.Run("Default provenance of a known type is None", func(t *testing.T) {
rule := models.AlertRule{
UID: "asdf",
}
provenance, err := dbstore.GetProvenance(context.Background(), &rule)
require.NoError(t, err)
require.Equal(t, models.ProvenanceNone, provenance)
})
t.Run("Store returns saved provenance type", func(t *testing.T) {
rule := models.AlertRule{
UID: "123",
}
err := dbstore.SetProvenance(context.Background(), &rule, models.ProvenanceFile)
require.NoError(t, err)
p, err := dbstore.GetProvenance(context.Background(), &rule)
require.NoError(t, err)
require.Equal(t, models.ProvenanceFile, p)
})
t.Run("Store does not get provenance of record with different org ID", func(t *testing.T) {
ruleOrg2 := models.AlertRule{
UID: "456",
OrgID: 2,
}
ruleOrg3 := models.AlertRule{
UID: "456",
OrgID: 3,
}
err := dbstore.SetProvenance(context.Background(), &ruleOrg2, models.ProvenanceFile)
require.NoError(t, err)
p, err := dbstore.GetProvenance(context.Background(), &ruleOrg3)
require.NoError(t, err)
require.Equal(t, models.ProvenanceNone, p)
})
t.Run("Store only updates provenance of record with given org ID", func(t *testing.T) {
ruleOrg2 := models.AlertRule{
UID: "789",
OrgID: 2,
}
ruleOrg3 := models.AlertRule{
UID: "789",
OrgID: 3,
}
err := dbstore.SetProvenance(context.Background(), &ruleOrg2, models.ProvenanceFile)
require.NoError(t, err)
err = dbstore.SetProvenance(context.Background(), &ruleOrg3, models.ProvenanceFile)
require.NoError(t, err)
err = dbstore.SetProvenance(context.Background(), &ruleOrg2, models.ProvenanceApi)
require.NoError(t, err)
p, err := dbstore.GetProvenance(context.Background(), &ruleOrg2)
require.NoError(t, err)
require.Equal(t, models.ProvenanceApi, p)
p, err = dbstore.GetProvenance(context.Background(), &ruleOrg3)
require.NoError(t, err)
require.Equal(t, models.ProvenanceFile, p)
})
}