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  }