41bf189e6b
* Read local queries from pgweb home directory * Refactor local query functionality * Allow picking local query in the query tab * WIP * Disable local query dropdown during execution * Only allow local queries running in a single session mode * Add middleware to enforce local query endpoint availability * Fix query check * Add query store tests * Make query store errors portable * Skip building specific tests on windows
78 lines
1.7 KiB
Go
78 lines
1.7 KiB
Go
package queries
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestQueryIsPermitted(t *testing.T) {
|
|
examples := []struct {
|
|
name string
|
|
query Query
|
|
args []string
|
|
expected bool
|
|
}{
|
|
{
|
|
name: "no input provided",
|
|
query: makeQuery("localhost", "someuser", "somedb", "default"),
|
|
args: makeArgs("", "", "", ""),
|
|
expected: false,
|
|
},
|
|
{
|
|
name: "match on host",
|
|
query: makeQuery("localhost", "*", "*", "*"),
|
|
args: makeArgs("localhost", "user", "db", "default"),
|
|
expected: true,
|
|
},
|
|
{
|
|
name: "match on full set",
|
|
query: makeQuery("localhost", "user", "database", "mode"),
|
|
args: makeArgs("localhost", "someuser", "somedb", "default"),
|
|
expected: false,
|
|
},
|
|
{
|
|
name: "match on partial database",
|
|
query: makeQuery("localhost", "*", "myapp_*", "*"),
|
|
args: makeArgs("localhost", "user", "myapp_development", "default"),
|
|
expected: true,
|
|
},
|
|
{
|
|
name: "match on full set but not mode",
|
|
query: makeQuery("localhost", "*", "*", "readonly"),
|
|
args: makeArgs("localhost", "user", "db", "default"),
|
|
expected: false,
|
|
},
|
|
}
|
|
|
|
for _, ex := range examples {
|
|
t.Run(ex.name, func(t *testing.T) {
|
|
result := ex.query.IsPermitted(ex.args[0], ex.args[1], ex.args[2], ex.args[3])
|
|
assert.Equal(t, ex.expected, result)
|
|
})
|
|
}
|
|
}
|
|
|
|
func makeArgs(vals ...string) []string {
|
|
return vals
|
|
}
|
|
|
|
func makeQuery(host, user, database, mode string) Query {
|
|
mustfield := func(input string) field {
|
|
f, err := newField(input)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
return f
|
|
}
|
|
|
|
return Query{
|
|
Meta: &Metadata{
|
|
Host: mustfield(host),
|
|
User: mustfield(user),
|
|
Database: mustfield(database),
|
|
Mode: mustfield(mode),
|
|
},
|
|
}
|
|
}
|