github.com/joey-fossa/fossa-cli@v0.7.34-0.20190708193710-569f1e8679f0/config/keys_test.go (about) 1 package config_test 2 3 import ( 4 "flag" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 "github.com/urfave/cli" 9 10 "github.com/fossas/fossa-cli/cmd/fossa/flags" 11 "github.com/fossas/fossa-cli/config" 12 "github.com/fossas/fossa-cli/pkg" 13 ) 14 15 func TestModulesCommandLineOptions(t *testing.T) { 16 // Set the expected flags. 17 flagSet := flag.NewFlagSet("test", 0) 18 flags.ConfigF.Apply(flagSet) 19 flags.OptionF.Apply(flagSet) 20 21 // Set the flag values. 22 ctx := cli.NewContext(cli.NewApp(), flagSet, nil) 23 err := ctx.Set(flags.Config, "testdata/test.yml") 24 assert.NoError(t, err) 25 err = ctx.Set(flags.Option, "allow-unresolved:true") 26 assert.NoError(t, err) 27 28 // Finalize the context. 29 err = config.SetContext(ctx) 30 assert.NoError(t, err) 31 32 modules, err := config.Modules() 33 assert.NoError(t, err) 34 35 // Test that command line options are set. 36 assert.Equal(t, 1, len(modules[0].Options)) 37 assert.Equal(t, true, modules[0].Options["allow-unresolved"]) 38 39 // Test that config file options are not overwritten. 40 assert.Equal(t, 2, len(modules[1].Options)) 41 assert.Equal(t, true, modules[1].Options["allow-unresolved"]) 42 assert.Equal(t, "linux", modules[1].Options["os"]) 43 44 // Test that command line options are preferred when they conflict config options. 45 assert.Equal(t, 1, len(modules[2].Options)) 46 assert.Equal(t, true, modules[2].Options["allow-unresolved"]) 47 } 48 49 func TestModulesWithAnArgumentAndOptions(t *testing.T) { 50 // Set the expected flags. 51 flagSet := flag.NewFlagSet("test", 0) 52 flags.ConfigF.Apply(flagSet) 53 flags.OptionF.Apply(flagSet) 54 err := flagSet.Parse([]string{"gradle:argumentmodule"}) 55 assert.NoError(t, err) 56 57 // Set the flag values. 58 ctx := cli.NewContext(cli.NewApp(), flagSet, nil) 59 err = ctx.Set(flags.Config, "testdata/test.yml") 60 assert.NoError(t, err) 61 err = ctx.Set(flags.Option, "allsubmodules:true") 62 assert.NoError(t, err) 63 64 // Finalize the context. 65 err = config.SetContext(ctx) 66 assert.NoError(t, err) 67 68 // Assert that only argument modules are detected, not conifg modules. 69 modules, err := config.Modules() 70 assert.NoError(t, err) 71 assert.Equal(t, modules[0].Type, pkg.Gradle) 72 assert.Equal(t, modules[0].BuildTarget, "argumentmodule") 73 assert.Len(t, modules, 1) 74 75 // Test that command line options are set and no other options exist. 76 assert.Equal(t, 1, len(modules[0].Options)) 77 assert.Equal(t, true, modules[0].Options["allsubmodules"]) 78 } 79 80 func TestNoModulesError(t *testing.T) { 81 // Set the expected flags. 82 flagSet := flag.NewFlagSet("test", 0) 83 flags.ConfigF.Apply(flagSet) 84 85 // Set the flag values. 86 ctx := cli.NewContext(cli.NewApp(), flagSet, nil) 87 err := ctx.Set(flags.Config, "testdata/test_no_modules.yml") 88 assert.NoError(t, err) 89 90 // Finalize the context. 91 err = config.SetContext(ctx) 92 assert.NoError(t, err) 93 94 modules, err := config.Modules() 95 assert.EqualError(t, err, "No modules provided") 96 assert.Equal(t, 0, len(modules)) 97 }