terraform-provider-nautobot/client/nautobot_test.go

98 lines
2.0 KiB
Go

package nautobot_test
import (
"context"
"fmt"
"net/http"
"os"
"testing"
nb "github.com/nautobot/go-nautobot"
"github.com/tidwall/gjson"
)
const (
deviceExist = "manufacturer with this name already exists."
)
func NewSecurityProviderNautobotToken(t string) (*SecurityProviderNautobotToken, error) {
return &SecurityProviderNautobotToken{
token: t,
}, nil
}
type SecurityProviderNautobotToken struct {
token string
}
func (s *SecurityProviderNautobotToken) Intercept(ctx context.Context, req *http.Request) error {
req.Header.Set("Authorization", fmt.Sprintf("Token %s", s.token))
return nil
}
func getenv(name string) (string, error) {
v := os.Getenv(name)
if v == "" {
return v, fmt.Errorf("%s environment variable not set", name)
}
return v, nil
}
func TestDcimManufacturersCreateWithResponse(t *testing.T) {
server, err := getenv("NAUTOBOT_URL")
if err != nil {
t.Fatal(err)
}
token, err := getenv("NAUTOBOT_TOKEN")
if err != nil {
t.Fatal(err)
}
tk, err := NewSecurityProviderNautobotToken(token)
if err != nil {
t.Fatalf("could not create a Nautobot token for %s", server)
}
c, err := nb.NewClientWithResponses(
server,
nb.WithRequestEditorFn(tk.Intercept),
)
if err != nil {
t.Fatalf("could not setup a client connection to %s", server)
}
// Test table
tt := []struct {
name string
vendor string
err string
}{
{name: "New Vendor", vendor: "new vendor 1"},
{name: "Existing Vendor", vendor: "Cisco", err: deviceExist},
}
for _, tc := range tt {
t.Run(tc.name, func(t *testing.T) {
var m nb.Manufacturer
m.Name = tc.vendor
rsp, err := c.DcimManufacturersCreateWithResponse(
context.Background(),
nb.DcimManufacturersCreateJSONRequestBody(m))
data := string(rsp.Body)
dataName := gjson.Get(data, "name.0")
if dataName.String() == deviceExist && tc.err == deviceExist {
return
}
if err != nil {
t.Fatalf("failed to create manufacturer %s on %s: %s", tc.vendor, server, err.Error())
}
})
}
}