Add client library test example
parent
773904b4f3
commit
f7da9d44ed
|
|
@ -2,6 +2,13 @@ module github.com/nautobot/go-nautobot
|
|||
|
||||
go 1.17
|
||||
|
||||
require github.com/deepmap/oapi-codegen v1.10.1
|
||||
require (
|
||||
github.com/deepmap/oapi-codegen v1.10.1
|
||||
github.com/tidwall/gjson v1.14.1
|
||||
)
|
||||
|
||||
require github.com/google/uuid v1.3.0 // indirect
|
||||
require (
|
||||
github.com/google/uuid v1.3.0 // indirect
|
||||
github.com/tidwall/match v1.1.1 // indirect
|
||||
github.com/tidwall/pretty v1.2.0 // indirect
|
||||
)
|
||||
|
|
|
|||
|
|
@ -83,6 +83,12 @@ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
|
|||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY=
|
||||
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/tidwall/gjson v1.14.1 h1:iymTbGkQBhveq21bEvAQ81I0LEBork8BFe1CUZXdyuo=
|
||||
github.com/tidwall/gjson v1.14.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
|
||||
github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
|
||||
github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
|
||||
github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs=
|
||||
github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
|
||||
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
|
||||
github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M=
|
||||
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
|
||||
|
|
|
|||
|
|
@ -0,0 +1,97 @@
|
|||
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())
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue