Skip to content
Snippets Groups Projects
tenancy_tenants_basic_test.go 7.51 KiB
Newer Older
  • Learn to ignore specific revisions
  • // Copyright 2017 The go-netbox Authors.
    //
    // Licensed under the Apache License, Version 2.0 (the "License");
    // you may not use this file except in compliance with the License.
    // You may obtain a copy of the License at
    //
    //   http://www.apache.org/licenses/LICENSE-2.0
    //
    // Unless required by applicable law or agreed to in writing, software
    // distributed under the License is distributed on an "AS IS" BASIS,
    // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    // See the License for the specific language governing permissions and
    // limitations under the License.
    
    
    // Code generated by generate_functions.go. DO NOT EDIT.
    
    
    package netbox
    
    import (
    	"encoding/json"
    	"errors"
    	"fmt"
    	"net/http"
    	"reflect"
    	"testing"
    )
    
    // Using this to override MarshalJSON
    // In all cases when posting data to netbox-API, the Tenant.MarshalJSON is what you want,
    // but not here as a return in testHandler
    type serverDataTenant Tenant
    
    func convertToServerDataTenant(data []*Tenant) []*serverDataTenant {
    	dataWant := make([]*serverDataTenant, len(data))
    	for i := range data {
    		tmp := serverDataTenant(*data[i])
    		dataWant[i] = &tmp
    	}
    	return dataWant
    }
    
    func TestBasicTenantGet(t *testing.T) {
    	var tests = []struct {
    		desc string
    		want *Tenant
    	}{
    		{
    			desc: "Simple Tenant",
    			want: testTenant(1),
    		},
    	}
    
    	for i, tt := range tests {
    		t.Run(fmt.Sprintf("[%d] %s", i, tt.desc), func(t *testing.T) {
    			serverData := serverDataTenant(*tt.want)
    
    			c, done := testClient(t, testHandler(t, http.MethodGet, "/api/tenancy/tenants/1/", &serverData))
    			defer done()
    
    			res, err := c.Tenancy.Tenants.Get(1)
    			if err != nil {
    				t.Fatalf("unexpected error from Client.Tenancy.Tenants.Get: %v", err)
    			}
    
    			if want, got := tt.want, res; !reflect.DeepEqual(want, got) {
    				t.Fatalf("unexpected Tenant:\n- want: %v\n-  got: %v", want, got)
    			}
    		})
    	}
    }
    
    func TestBasicTenantGet404(t *testing.T) {
    	c, done := testClient(t, testStatusHandler(t, http.MethodGet, "/api/tenancy/tenants/1/", &struct {
    		Detail string `json:"detail"`
    	}{
    		Detail: "Not found.",
    	},
    		http.StatusNotFound))
    	defer done()
    
    	res, err := c.Tenancy.Tenants.Get(1)
    	errstr := "404 - Not found."
    	if want, got := errors.New(errstr), err; !reflect.DeepEqual(want, got) {
    		t.Fatalf("unexpected error from Client.Tenancy.Tenants.Get:\n- want: %v\n-  got: %v", want, got)
    	}
    
    	if res != nil {
    		t.Fatalf("unexpected result:\n- want: %v\n-  got: %v", nil, res)
    	}
    }
    
    func TestBasicListExtractTenant(t *testing.T) {
    	want := []*Tenant{
    		testTenant(1),
    		testTenant(2),
    	}
    	serverWant := convertToServerDataTenant(want)
    	serverData, _ := json.Marshal(serverWant)
    	c, done := testClient(t, testHandler(t, http.MethodGet, "/api/tenancy/tenants/", &pageData{
    		Count:       2,
    		NextURL:     "",
    		PreviousURL: "",
    		Results:     serverData,
    	}))
    	defer done()
    
    	page := c.Tenancy.Tenants.List(nil)
    
    	if page == nil {
    		t.Fatalf("unexpexted result from c.Tenancy.Tenants.List.")
    	}
    
    	got := []*Tenant{}
    	counter := 0
    	for page.Next() {
    		var err error
    		got, err = c.Tenancy.Tenants.Extract(page)
    		if err != nil {
    			t.Fatalf("unexpected error from c.Tenancy.Tenants.Extract: %v", err)
    		}
    		counter = counter + 1
    		if counter > 2 { // Safe guard
    			break
    		}
    	}
    	if counter != 1 {
    		t.Fatalf("unexpected page count:\n- want: 1\n-  got: %d", counter)
    	}
    
    	if !reflect.DeepEqual(want, got) {
    		t.Fatalf("unexpected result:\n- want: %v\n-  got: %v", want, got)
    	}
    
    	if page.Err() != nil {
    		t.Fatalf("unexpected error from page:\n- want: %v\n-  got: %v", want, got)
    	}
    }
    
    func TestBasicCreateTenant(t *testing.T) {
    	var tests = []struct {
    		desc       string
    		data       *Tenant
    
    		serverData interface{}
    		status     int
    		errstr     string
    	}{
    		{
    			desc:       "Create with ID 0",
    			data:       testTenantCreate(1),
    
    			status:     0,
    			errstr:     "",
    			serverData: testTenant(1),
    		},
    		{
    			desc:   "Create duplicate",
    			data:   testTenantCreate(1),
    
    			status: http.StatusBadRequest,
    			errstr: "400 - {\"name\":[\"TenantsService with this name already exists.\"]}\n",
    			serverData: &struct {
    				Name []string `json:"name"`
    			}{
    				Name: []string{"TenantsService with this name already exists."},
    			},
    		},
    	}
    
    	for i, tt := range tests {
    		t.Run(fmt.Sprintf("[%d] %s", i, tt.desc), func(t *testing.T) {
    			c, done := testClient(t, testStatusHandler(t, http.MethodPost, "/api/tenancy/tenants/", tt.serverData, tt.status))
    			defer done()
    
    			var terr error
    			if tt.errstr != "" {
    				terr = errors.New(tt.errstr) // Using errstr and initialize real err here, to satisfy golint
    			}
    
    			res, err := c.Tenancy.Tenants.Create(tt.data)
    			if want, got := terr, err; !reflect.DeepEqual(want, got) {
    				t.Fatalf("unexpected error:\n- want: %v\n-  got: %v", want, got)
    			}
    			if want, got := tt.want, res; !reflect.DeepEqual(want, got) {
    				t.Fatalf("unexpected Tenant:\n- want: %v\n-  got: %v", want, got)
    			}
    		})
    	}
    }
    
    func TestBasicUpdateTenant(t *testing.T) {
    	var tests = []struct {
    		desc       string
    		data       *Tenant
    
    		serverData interface{}
    		status     int
    		errstr     string
    	}{
    		{
    
    			desc:       "Update with ID 1",
    
    			serverData: testTenant(1),
    			status:     0,
    			errstr:     "",
    		},
    		{
    			desc: "Update not found",
    			data: testTenant(1),
    
    			serverData: &struct {
    				Detail string
    			}{
    				Detail: "Not found.",
    			},
    			status: http.StatusNotFound,
    			errstr: "404 - Not found.",
    		},
    		{
    
    			desc: "Update to duplicate",
    
    			serverData: &struct {
    				Name []string `json:"name"`
    			}{
    				Name: []string{"TenantsService with this name already exists."},
    			},
    			status: http.StatusBadRequest,
    			errstr: "400 - {\"name\":[\"TenantsService with this name already exists.\"]}\n",
    		},
    	}
    
    	for i, tt := range tests {
    		t.Run(fmt.Sprintf("[%d] %s", i, tt.desc), func(t *testing.T) {
    			c, done := testClient(t, testStatusHandler(t, http.MethodPatch, "/api/tenancy/tenants/1/", tt.serverData, tt.status))
    			defer done()
    
    			var terr error
    			if tt.errstr != "" {
    				terr = errors.New(tt.errstr) // Using errstr and initialize real err here, to satisfy golint
    			}
    
    			res, err := c.Tenancy.Tenants.Update(tt.data)
    			if want, got := terr, err; !reflect.DeepEqual(want, got) {
    				t.Fatalf("unexpected error:\n- want: %v\n-  got: %v", want, got)
    			}
    			if want, got := tt.want, res; !reflect.DeepEqual(want, got) {
    				t.Fatalf("unexpected Tenant:\n- want: %v\n-  got: %v", want, got)
    			}
    		})
    	}
    }
    
    func TestBasicDeleteTenant(t *testing.T) {
    	var tests = []struct {
    		desc       string
    		data       *Tenant
    		serverData interface{}
    		status     int
    		errstr     string
    	}{
    		{
    			desc:       "Delete ID 1",
    			data:       testTenant(1),
    			serverData: testTenant(1),
    			status:     0,
    			errstr:     "",
    		},
    		{
    			desc: "Delete not Found",
    			data: testTenant(1),
    			serverData: &struct {
    				Detail string `json:"detail"`
    			}{
    				Detail: "Not found.",
    			},
    			status: http.StatusNotFound,
    			errstr: "404 - Not found.",
    		},
    	}
    
    	for i, tt := range tests {
    		t.Run(fmt.Sprintf("[%d] %s", i, tt.desc), func(t *testing.T) {
    			c, done := testClient(t, testStatusHandler(t, http.MethodDelete, "/api/tenancy/tenants/1/", tt.serverData, tt.status))
    			defer done()
    
    			var terr error
    			if tt.errstr != "" {
    				terr = errors.New(tt.errstr) // Using errstr and initialize real err here, to satisfy golint
    			}
    
    			err := c.Tenancy.Tenants.Delete(tt.data)
    			if want, got := terr, err; !reflect.DeepEqual(want, got) {
    				t.Fatalf("unexpected error:\n- want: %v\n-  got: %v", want, got)
    			}
    		})
    	}
    }