98 lines
2.0 KiB
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())
|
|
}
|
|
})
|
|
}
|
|
|
|
}
|