github.com/engineyard/workflow-cli@v2.21.6+incompatible/settings/settings_test.go (about)

     1  package settings
     2  
     3  import (
     4  	"fmt"
     5  	"io/ioutil"
     6  	"net/url"
     7  	"os"
     8  	"path/filepath"
     9  	"strings"
    10  	"testing"
    11  
    12  	"github.com/arschles/assert"
    13  	"github.com/teamhephy/workflow-cli/version"
    14  )
    15  
    16  const sFile string = `{"username":"t","ssl_verify":false,"controller":"http://foo.bar","token":"a"}`
    17  
    18  func createTempProfile(contents string) (string, error) {
    19  	name, err := ioutil.TempDir("", "client")
    20  
    21  	if err != nil {
    22  		return "", err
    23  	}
    24  
    25  	file := filepath.Join(name, "test.json")
    26  
    27  	return file, ioutil.WriteFile(file, []byte(contents), 0775)
    28  }
    29  
    30  type comparison struct {
    31  	key      interface{}
    32  	expected interface{}
    33  }
    34  
    35  func TestLoadSave(t *testing.T) {
    36  	t.Parallel()
    37  	// Load profile from file and confirm it is correctly parsed.
    38  	file, err := createTempProfile(sFile)
    39  	if err != nil {
    40  		t.Fatal(err)
    41  	}
    42  
    43  	s, err := Load(file)
    44  
    45  	if err != nil {
    46  		t.Fatal(err)
    47  	}
    48  
    49  	tests := []comparison{
    50  		{
    51  			key:      false,
    52  			expected: s.Client.VerifySSL,
    53  		},
    54  		{
    55  			key:      "a",
    56  			expected: s.Client.Token,
    57  		},
    58  		{
    59  			key:      "t",
    60  			expected: s.Username,
    61  		},
    62  		{
    63  			key:      "http://foo.bar",
    64  			expected: s.Client.ControllerURL.String(),
    65  		},
    66  		{
    67  			key:      100,
    68  			expected: s.Limit,
    69  		},
    70  		{
    71  			key:      "Deis Client " + version.Version,
    72  			expected: s.Client.UserAgent,
    73  		},
    74  	}
    75  
    76  	if err := checkComparisons(tests); err != nil {
    77  		t.Error(err)
    78  	}
    79  
    80  	// Modify profile and confirm it is correctly saved
    81  	s.Client.VerifySSL = true
    82  	s.Client.Token = "b"
    83  	s.Username = "c"
    84  	s.Limit = 10
    85  
    86  	u, err := url.Parse("http://deis.test")
    87  
    88  	if err != nil {
    89  		t.Fatal(err)
    90  	}
    91  
    92  	s.Client.ControllerURL = u
    93  
    94  	// Create a tempdir and set as HOME.
    95  	dir, err := ioutil.TempDir("", "deishome")
    96  	if err != nil {
    97  		t.Fatal(err)
    98  	}
    99  	defer os.RemoveAll(dir)
   100  	SetHome(dir)
   101  
   102  	if _, err = s.Save(file); err != nil {
   103  		t.Fatal(err)
   104  	}
   105  
   106  	s, err = Load(file)
   107  
   108  	if err != nil {
   109  		t.Fatal(err)
   110  	}
   111  
   112  	tests = []comparison{
   113  		{
   114  			key:      true,
   115  			expected: s.Client.VerifySSL,
   116  		},
   117  		{
   118  			key:      "b",
   119  			expected: s.Client.Token,
   120  		},
   121  		{
   122  			key:      "c",
   123  			expected: s.Username,
   124  		},
   125  		{
   126  			key:      "http://deis.test",
   127  			expected: s.Client.ControllerURL.String(),
   128  		},
   129  		{
   130  			key:      10,
   131  			expected: s.Limit,
   132  		},
   133  		{
   134  			key:      "Deis Client " + version.Version,
   135  			expected: s.Client.UserAgent,
   136  		},
   137  	}
   138  
   139  	if err := checkComparisons(tests); err != nil {
   140  		t.Error(err)
   141  	}
   142  }
   143  
   144  func checkComparisons(tests []comparison) error {
   145  	for _, check := range tests {
   146  		if check.key != check.expected {
   147  			return fmt.Errorf("Expected %v, Got %v", check.key, check.expected)
   148  		}
   149  	}
   150  
   151  	return nil
   152  }
   153  
   154  func TestDeleteSettings(t *testing.T) {
   155  	t.Parallel()
   156  
   157  	file, err := createTempProfile("")
   158  	if err != nil {
   159  		t.Fatal(err)
   160  	}
   161  
   162  	if err := Delete(file); err != nil {
   163  		t.Fatal(err)
   164  	}
   165  
   166  	if _, err := os.Stat(file); err == nil {
   167  		t.Errorf("File %s exists, supposed to have been deleted.", file)
   168  	}
   169  
   170  	// Test the deleting an nonexistent settings file isn't an error.
   171  	if err := Delete(file); err != nil {
   172  		t.Fatal(err)
   173  	}
   174  }
   175  
   176  func TestNotLoggedIn(t *testing.T) {
   177  	t.Parallel()
   178  
   179  	name, err := ioutil.TempDir("", "client")
   180  
   181  	if err != nil {
   182  		t.Fatal(err)
   183  	}
   184  
   185  	_, err = Load(filepath.Join(name, "test.json"))
   186  	assert.ExistsErr(t, err, "load error")
   187  	if !strings.Contains(err.Error(), "Client configuration file not found") {
   188  		t.Error("Expected configuration error, Got:", err.Error())
   189  	}
   190  }