github.com/devcamcar/cli@v0.0.0-20181107134215-706a05759d18/config/context_file_test.go (about)

     1  package config
     2  
     3  import (
     4  	"os"
     5  	"path"
     6  	"testing"
     7  )
     8  
     9  type testCase struct {
    10  	name     string
    11  	file     string
    12  	contents string
    13  	expected *ContextFile
    14  }
    15  
    16  func TestContextFile(t *testing.T) {
    17  	folder := path.Join(os.TempDir(), "fn-tests")
    18  	err := os.Mkdir(folder, 0755)
    19  	if err != nil {
    20  		t.Fatalf("failed to create test folder %s: %v", folder, err)
    21  	}
    22  	defer cleanup(folder)
    23  
    24  	tests, err := prepareTestFiles(folder)
    25  	if err != nil {
    26  		t.Fatalf("failed to prepare test files in %s", folder)
    27  	}
    28  
    29  	for _, tst := range tests {
    30  		t.Run(tst.name, func(t *testing.T) {
    31  			actual, err := NewContextFile(tst.file)
    32  			if err != nil {
    33  				t.Fatalf("failed to create a context file: %v", err)
    34  			}
    35  
    36  			if actual.ContextProvider != tst.expected.ContextProvider {
    37  				t.Fatalf("ContextProvider: expected '%s', but got '%s'", tst.expected.ContextProvider, actual.ContextProvider)
    38  			}
    39  
    40  			if actual.EnvFnAPIURL != tst.expected.EnvFnAPIURL {
    41  				t.Fatalf("EnvFnAPIURL: expected '%s', but got '%s'", tst.expected.EnvFnAPIURL, actual.EnvFnAPIURL)
    42  			}
    43  
    44  			if actual.EnvFnRegistry != tst.expected.EnvFnRegistry {
    45  				t.Fatalf("EnvFnRegistry: expected '%s', but got '%s'", tst.expected.EnvFnRegistry, actual.EnvFnRegistry)
    46  			}
    47  		})
    48  	}
    49  }
    50  
    51  // prepareTestFiles creates YAML files in a temporary test folder
    52  func prepareTestFiles(folder string) ([]testCase, error) {
    53  	var tests = []testCase{
    54  		{
    55  			name: "Simple context file",
    56  			file: path.Join(folder, "default.yaml"),
    57  			contents: `
    58  api-url: http://localhost:8080
    59  provider: default
    60  registry: "someregistry"`,
    61  			expected: &ContextFile{
    62  				ContextProvider: "default",
    63  				EnvFnAPIURL:     "http://localhost:8080",
    64  				EnvFnRegistry:   "someregistry",
    65  			},
    66  		},
    67  	}
    68  
    69  	for _, tf := range tests {
    70  		f, err := os.Create(tf.file)
    71  		if err != nil {
    72  			return nil, err
    73  		}
    74  		defer f.Close()
    75  		f.WriteString(tf.contents)
    76  	}
    77  	return tests, nil
    78  }
    79  
    80  // cleanup removes the temporary folder
    81  func cleanup(folder string) error {
    82  	return os.RemoveAll(folder)
    83  }