github.com/kbehouse/nsc@v0.0.6/cmd/defaults_test.go (about) 1 /* 2 * Copyright 2018 The NATS Authors 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 package cmd 17 18 import ( 19 "fmt" 20 "os" 21 "path/filepath" 22 "testing" 23 24 "github.com/stretchr/testify/require" 25 ) 26 27 func TestDefault_LoadOrInit(t *testing.T) { 28 d := MakeTempDir(t) 29 dir := filepath.Join(d, "a") 30 require.NoError(t, os.Setenv("TEST_NAME", dir)) 31 32 ResetForTests() 33 tc, err := LoadOrInit("my/foo", "TEST_NAME") 34 require.NoError(t, err) 35 36 require.Equal(t, filepath.Join(dir, "nats"), tc.StoreRoot) 37 require.Equal(t, "", tc.Operator) 38 require.Equal(t, "", tc.Account) 39 require.Equal(t, "my/foo", tc.GithubUpdates) 40 } 41 42 func TestDefault_LoadNewOnExisting(t *testing.T) { 43 ts := NewTestStore(t, "operator") 44 require.NoError(t, os.Setenv("TEST_NAME", ts.Dir)) 45 ts.AddAccount(t, "A") 46 47 var cc ContextConfig 48 cc.StoreRoot = ts.GetStoresRoot() 49 fp := filepath.Join(ts.Dir, fmt.Sprintf("%s.json", GetToolName())) 50 require.NoError(t, WriteJson(fp, cc)) 51 52 ResetForTests() 53 tc, err := LoadOrInit("my/foo", "TEST_NAME") 54 require.NoError(t, err) 55 require.NotNil(t, tc) 56 57 require.Equal(t, ts.GetStoresRoot(), tc.StoreRoot) 58 require.Equal(t, "operator", tc.Operator) 59 require.Equal(t, "A", tc.Account) 60 } 61 62 func Test_isOperatorDir(t *testing.T) { 63 ts := NewTestStore(t, "O") 64 defer ts.Done(t) 65 66 ts.AddAccount(t, "A") 67 68 x := filepath.Join(ts.Dir, "X") 69 err := os.Mkdir(x, 0777) 70 require.NoError(t, err) 71 72 info, ok, err := isOperatorDir(x) 73 require.NoError(t, err) 74 require.False(t, ok) 75 require.Empty(t, info) 76 77 odir := filepath.Join(ts.GetStoresRoot(), "O") 78 info, ok, err = isOperatorDir(odir) 79 require.NoError(t, err) 80 require.True(t, ok) 81 require.NotEmpty(t, info) 82 require.Equal(t, "O", info.Name) 83 84 info, ok, err = isOperatorDir(filepath.Dir(odir)) 85 require.NoError(t, err) 86 require.False(t, ok) 87 require.Empty(t, info) 88 } 89 90 func Test_GetCwdStore(t *testing.T) { 91 ts := NewTestStore(t, "O") 92 defer ts.Done(t) 93 ts.AddAccount(t, "A") 94 ts.AddAccount(t, "B") 95 96 d, err := os.Getwd() 97 require.NoError(t, err) 98 defer os.Chdir(d) 99 100 // normalize the path representation 101 require.NoError(t, os.Chdir(ts.Dir)) 102 testDir, err := os.Getwd() 103 require.NoError(t, err) 104 105 require.Nil(t, GetCwdCtx()) 106 107 storeRoot := filepath.Join(testDir, "store") 108 require.NoError(t, err) 109 require.NoError(t, os.Chdir(storeRoot)) 110 111 require.NotNil(t, GetCwdCtx()) 112 require.Equal(t, storeRoot, GetCwdCtx().StoreRoot) 113 114 odir := filepath.Join(storeRoot, "O") 115 require.NoError(t, os.Chdir(odir)) 116 117 ctx := GetCwdCtx() 118 require.NotNil(t, ctx) 119 require.Equal(t, storeRoot, ctx.StoreRoot) 120 require.Equal(t, "O", ctx.Operator) 121 require.Equal(t, "", ctx.Account) 122 123 accounts := filepath.Join(odir, "accounts") 124 require.NoError(t, os.Chdir(accounts)) 125 126 ctx = GetCwdCtx() 127 require.NotNil(t, ctx) 128 require.Equal(t, storeRoot, ctx.StoreRoot) 129 require.Equal(t, "O", ctx.Operator) 130 require.Equal(t, "", ctx.Account) 131 132 actdir := filepath.Join(accounts, "A") 133 require.NoError(t, os.Chdir(actdir)) 134 135 ctx = GetCwdCtx() 136 require.NotNil(t, ctx) 137 require.Equal(t, storeRoot, ctx.StoreRoot) 138 require.Equal(t, "O", ctx.Operator) 139 require.Equal(t, "A", ctx.Account) 140 141 actdir = filepath.Join(accounts, "B") 142 require.NoError(t, os.Chdir(actdir)) 143 144 ctx = GetCwdCtx() 145 require.NotNil(t, ctx) 146 require.Equal(t, storeRoot, ctx.StoreRoot) 147 require.Equal(t, "O", ctx.Operator) 148 require.Equal(t, "B", ctx.Account) 149 }