package netbox import ( "context" "fmt" "net/http" "net/http/httptest" "testing" ) func TestSearchAllByCluster(t *testing.T) { var deviceQuery, vmQuery string srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") switch r.URL.Path { case "/api/virtualization/clusters/": if r.URL.Query().Get("name__ie") == "PVE" { fmt.Fprint(w, `{"count":2,"results":[{"id":3,"name":"pve"},{"id":4,"name":"pve"}]}`) return } fmt.Fprint(w, `{"count":0,"results":[]}`) case "/api/dcim/devices/": deviceQuery = r.URL.RawQuery fmt.Fprint(w, `{"count":1,"results":[{"id":1,"name":"node1","cluster":{"id":3,"name":"pve"}}]}`) case "/api/virtualization/virtual-machines/": vmQuery = r.URL.RawQuery fmt.Fprint(w, `{"count":1,"results":[{"id":2,"name":"vm1","cluster":{"id":4,"name":"pve"}}]}`) } })) defer srv.Close() c := NewClient(srv.URL, "t", 1) hosts, err := c.SearchAll(context.Background(), "", SearchOptions{Cluster: "PVE", Kind: "device"}) if err != nil || len(hosts) != 1 || hosts[0].Name != "node1" || hosts[0].Cluster != "pve" { t.Fatalf("got %+v %v", hosts, err) } if want := "name__ic=&limit=50&offset=0&cluster_id=3&cluster_id=4"; deviceQuery != want { t.Errorf("device query %q, want %q", deviceQuery, want) } if vmQuery != "" { t.Error("VMs queried for kind device") } all, err := c.SearchAll(context.Background(), "", SearchOptions{Cluster: "PVE"}) if err != nil || len(all) != 2 { t.Fatalf("all kinds: %+v %v", all, err) } none, err := c.SearchAll(context.Background(), "", SearchOptions{Cluster: "missing"}) if err != nil || len(none) != 0 { t.Fatalf("unknown cluster: %+v %v", none, err) } }