mirror of
https://github.com/coder/coder.git
synced 2025-07-06 15:41:45 +00:00
feat: workspace filter query supported in backend (#2232)
* feat: add support for template in workspace filter * feat: Implement workspace search filter to support names * Use new query param parser for pagination fields * Remove excessive calls, use filters on a single query Co-authored-by: Garrett <garrett@coder.com>
This commit is contained in:
61
coderd/database/databasefake/databasefake_test.go
Normal file
61
coderd/database/databasefake/databasefake_test.go
Normal file
@ -0,0 +1,61 @@
|
||||
package databasefake_test
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"reflect"
|
||||
"testing"
|
||||
|
||||
"github.com/coder/coder/coderd/database"
|
||||
|
||||
"github.com/coder/coder/coderd/database/databasefake"
|
||||
)
|
||||
|
||||
// TestExactMethods will ensure the fake database does not hold onto excessive
|
||||
// functions. The fake database is a manual implementation, so it is possible
|
||||
// we forget to delete functions that we remove. This unit test just ensures
|
||||
// we remove the extra methods.
|
||||
func TestExactMethods(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
// extraFakeMethods contains the extra allowed methods that are not a part
|
||||
// of the database.Store interface.
|
||||
extraFakeMethods := map[string]string{
|
||||
// Example
|
||||
// "SortFakeLists": "Helper function used",
|
||||
}
|
||||
|
||||
fake := reflect.TypeOf(databasefake.New())
|
||||
fakeMethods := methods(fake)
|
||||
|
||||
store := reflect.TypeOf((*database.Store)(nil)).Elem()
|
||||
storeMethods := methods(store)
|
||||
|
||||
// Store should be a subset
|
||||
for k := range storeMethods {
|
||||
_, ok := fakeMethods[k]
|
||||
if !ok {
|
||||
panic(fmt.Sprintf("This should never happen. FakeDB missing method %s, so doesn't fit the interface", k))
|
||||
}
|
||||
delete(storeMethods, k)
|
||||
delete(fakeMethods, k)
|
||||
}
|
||||
|
||||
for k := range fakeMethods {
|
||||
_, ok := extraFakeMethods[k]
|
||||
if ok {
|
||||
continue
|
||||
}
|
||||
// If you are seeing this error, you have an extra function not required
|
||||
// for the database.Store. If you still want to keep it, add it to
|
||||
// 'extraFakeMethods' to allow it.
|
||||
t.Errorf("Fake method '%s()' is excessive and not needed to fit interface, delete it", k)
|
||||
}
|
||||
}
|
||||
|
||||
func methods(rt reflect.Type) map[string]bool {
|
||||
methods := make(map[string]bool)
|
||||
for i := 0; i < rt.NumMethod(); i++ {
|
||||
methods[rt.Method(i).Name] = true
|
||||
}
|
||||
return methods
|
||||
}
|
Reference in New Issue
Block a user