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  }