github.com/go-chef/chef@v0.30.1/environment_test.go (about)

     1  package chef
     2  
     3  import (
     4  	"encoding/json"
     5  	"fmt"
     6  	"io"
     7  	"log"
     8  	"net/http"
     9  	"os"
    10  	"reflect"
    11  	"testing"
    12  
    13  	_ "github.com/davecgh/go-spew/spew"
    14  )
    15  
    16  var (
    17  	testEnvironmentJSON = "test/environment.json"
    18  )
    19  
    20  // BUG(fujin): re-do with goconvey
    21  func TestEnvironmentFromJSONDecoder(t *testing.T) {
    22  	if file, err := os.Open(testEnvironmentJSON); err != nil {
    23  		t.Error("unexpected error", err, "during os.Open on", testEnvironmentJSON)
    24  	} else {
    25  		dec := json.NewDecoder(file)
    26  		var e Environment
    27  		if err := dec.Decode(&e); err == io.EOF {
    28  			log.Println(e)
    29  		} else if err != nil {
    30  			log.Fatal(err)
    31  		}
    32  	}
    33  }
    34  
    35  func TestEnvironmentsService_List(t *testing.T) {
    36  	setup()
    37  	defer teardown()
    38  
    39  	mux.HandleFunc("/environments", func(w http.ResponseWriter, r *http.Request) {
    40  		fmt.Fprintf(w, `{"_default":"blah", "development":"blah"}`)
    41  	})
    42  
    43  	environments, err := client.Environments.List()
    44  	if err != nil {
    45  		t.Errorf("Environments.List returned error: %v", err)
    46  	}
    47  
    48  	want := &EnvironmentResult{"_default": "blah", "development": "blah"}
    49  	if !reflect.DeepEqual(environments, want) {
    50  		//spew.Dump(environments)
    51  		//spew.Dump(want)
    52  		t.Errorf("Environments.List returned %+v, want %+v", environments, want)
    53  	}
    54  }
    55  
    56  func TestEnvironmentsService_Get(t *testing.T) {
    57  	setup()
    58  	defer teardown()
    59  
    60  	mux.HandleFunc("/environments/testenvironment", func(w http.ResponseWriter, r *http.Request) {
    61  		fmt.Fprintf(w, `{
    62  	    "name": "testenvironment",
    63  	    "json_class": "Chef::Environment",
    64  	    "chef_type": "environment"
    65  		}`)
    66  	})
    67  
    68  	environments, err := client.Environments.Get("testenvironment")
    69  	if err != nil {
    70  		t.Errorf("Environments.Get returned error: %v", err)
    71  	}
    72  
    73  	want := &Environment{
    74  		Name:      "testenvironment",
    75  		JsonClass: "Chef::Environment",
    76  		ChefType:  "environment",
    77  	}
    78  
    79  	if !reflect.DeepEqual(environments, want) {
    80  		t.Errorf("Environments.Get returned %+v, want %+v", environments, want)
    81  	}
    82  }
    83  
    84  func TestEnvironmentsService_Create(t *testing.T) {
    85  	setup()
    86  	defer teardown()
    87  
    88  	mux.HandleFunc("/environments", func(w http.ResponseWriter, r *http.Request) {
    89  		fmt.Fprintf(w, `{ "uri": "http://localhost:4000/environments/dev" }`)
    90  	})
    91  
    92  	role := &Environment{
    93  		Name:             "dev",
    94  		ChefType:         "environment",
    95  		JsonClass:        "Chef::Environment",
    96  		Attributes:       "",
    97  		Description:      "",
    98  		CookbookVersions: map[string]string{},
    99  	}
   100  
   101  	uri, err := client.Environments.Create(role)
   102  	if err != nil {
   103  		t.Errorf("Environments.Create returned error: %v", err)
   104  	}
   105  
   106  	want := &EnvironmentResult{"uri": "http://localhost:4000/environments/dev"}
   107  
   108  	if !reflect.DeepEqual(uri, want) {
   109  		t.Errorf("Environments.Create returned %+v, want %+v", uri, want)
   110  	}
   111  }
   112  
   113  func TestEnvironmentsService_Put(t *testing.T) {
   114  	setup()
   115  	defer teardown()
   116  
   117  	mux.HandleFunc("/environments/dev", func(w http.ResponseWriter, r *http.Request) {
   118  		fmt.Fprintf(w, `{
   119  		  "name": "dev",
   120  		  "json_class": "Chef::Environment",
   121  		  "description": "The Dev Environment",
   122  		  "cookbook_versions": {},
   123  		  "chef_type": "environment"
   124  		}`)
   125  	})
   126  
   127  	environment := &Environment{
   128  		Name:             "dev",
   129  		ChefType:         "environment",
   130  		JsonClass:        "Chef::Environment",
   131  		Description:      "The Dev Environment",
   132  		CookbookVersions: map[string]string{},
   133  	}
   134  
   135  	updatedEnvironment, err := client.Environments.Put(environment)
   136  	if err != nil {
   137  		t.Errorf("Environments.Put returned error: %v", err)
   138  	}
   139  
   140  	if !reflect.DeepEqual(updatedEnvironment, environment) {
   141  		t.Errorf("Environments.Put returned %+v, want %+v", updatedEnvironment, environment)
   142  	}
   143  }
   144  
   145  func TestEnvironmentsService_EnvironmentListResultString(t *testing.T) {
   146  	e := &EnvironmentResult{"_default": "https://api.opscode.com/organizations/org_name/environments/_default", "webserver": "https://api.opscode.com/organizations/org_name/environments/webserver"}
   147  	estr := e.String()
   148  	want := "_default => https://api.opscode.com/organizations/org_name/environments/_default\nwebserver => https://api.opscode.com/organizations/org_name/environments/webserver\n"
   149  	want2 := "webserver => https://api.opscode.com/organizations/org_name/environments/webserver\n_default => https://api.opscode.com/organizations/org_name/environments/_default\n"
   150  	if estr != want && estr != want2 {
   151  		t.Errorf("EnvironmentResult.String returned:\n%+v\nwant:\n%+v\n", estr, want)
   152  	}
   153  }
   154  
   155  func TestEnvironmentsService_EnvironmentCreateResultString(t *testing.T) {
   156  	e := &EnvironmentResult{"uri": "http://localhost:4000/environments/dev"}
   157  	estr := e.String()
   158  	want := "uri => http://localhost:4000/environments/dev\n"
   159  	if estr != want {
   160  		t.Errorf("EnvironmentResult.String returned %+v, want %+v", estr, want)
   161  	}
   162  }
   163  
   164  func TestEnvironmentsService_ListRecipes(t *testing.T) {
   165  	setup()
   166  	defer teardown()
   167  
   168  	mux.HandleFunc("/environments/_default/recipes", func(w http.ResponseWriter, r *http.Request) {
   169  		fmt.Fprintf(w, `["audit::default", "chef-client::default"]`)
   170  	})
   171  
   172  	environments, err := client.Environments.ListRecipes("_default")
   173  	if err != nil {
   174  		t.Errorf("Environments.ListRecipes returned error: %v", err)
   175  	}
   176  
   177  	want := EnvironmentRecipesResult{"audit::default", "chef-client::default"}
   178  	if !reflect.DeepEqual(environments, want) {
   179  		t.Errorf("Environments.ListRecipes returned %+v, want %+v", environments, want)
   180  	}
   181  }