github.com/drycc/workflow-cli@v1.5.3-0.20240322092846-d4ee25983af9/settings/settings_test.go (about)

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