github.com/joey-fossa/fossa-cli@v0.7.34-0.20190708193710-569f1e8679f0/analyzers/ruby/ruby_test.go (about)

     1  package ruby_test
     2  
     3  import (
     4  	"path/filepath"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/assert"
     8  
     9  	"github.com/fossas/fossa-cli/analyzers/ruby"
    10  	"github.com/fossas/fossa-cli/buildtools/bundler"
    11  	"github.com/fossas/fossa-cli/module"
    12  	"github.com/fossas/fossa-cli/pkg"
    13  )
    14  
    15  func TestCustomGemfileLockPath(t *testing.T) {
    16  	buildTarget := "testdata"
    17  	m := module.Module{
    18  		Name:        "test",
    19  		Type:        pkg.Ruby,
    20  		BuildTarget: buildTarget,
    21  		Dir:         buildTarget,
    22  	}
    23  
    24  	gemModule := m
    25  	gemModule.Options = map[string]interface{}{
    26  		"strategy": "lockfile",
    27  	}
    28  	analyzer, err := ruby.New(gemModule)
    29  	assert.NoError(t, err)
    30  
    31  	customModule := m
    32  	customModule.Options = map[string]interface{}{
    33  		"strategy":          "lockfile",
    34  		"gemfile-lock-path": filepath.Join("testdata", "CustomGemfile.lock"),
    35  	}
    36  	customLockfileAnalyzer, err := ruby.New(customModule)
    37  	assert.NoError(t, err)
    38  
    39  	analyzed, err := analyzer.Analyze()
    40  	assert.NoError(t, err)
    41  
    42  	analyzedCustom, err := customLockfileAnalyzer.Analyze()
    43  	assert.NoError(t, err)
    44  
    45  	assert.NotEqual(t, analyzed, analyzedCustom)
    46  }
    47  
    48  func TestFallbackOnMissingBundler(t *testing.T) {
    49  	buildTarget := "testdata"
    50  	useLockfileOptions := map[string]interface{}{
    51  		"strategy": "lockfile",
    52  	}
    53  
    54  	useBundlerWithLockfilePathOptions := map[string]interface{}{}
    55  
    56  	gemModuleUsingLockfile := module.Module{
    57  		Name:        "test",
    58  		Type:        pkg.Ruby,
    59  		BuildTarget: buildTarget,
    60  		Dir:         buildTarget,
    61  		Options:     useLockfileOptions,
    62  	}
    63  
    64  	gemModuleUsingFallbackToLockfile := module.Module{
    65  		Name:        "test",
    66  		Type:        pkg.Ruby,
    67  		BuildTarget: buildTarget,
    68  		Options:     useBundlerWithLockfilePathOptions,
    69  		Dir:         buildTarget,
    70  	}
    71  
    72  	lockfileBasedAnalyzer, lockfileBasedAnalyzerErr := ruby.New(gemModuleUsingLockfile)
    73  	assert.NoError(t, lockfileBasedAnalyzerErr)
    74  
    75  	fallbackBasedAnalyzer, fallbackBasedAnalyzerErr := ruby.New(gemModuleUsingFallbackToLockfile)
    76  	assert.NoError(t, fallbackBasedAnalyzerErr)
    77  
    78  	fallbackBasedAnalyzer.Bundler = bundler.Bundler{
    79  		Cmd: "doesntWork",
    80  	}
    81  
    82  	lockfileBasedAnalyze, lockfileBasedAnalyzerErr := lockfileBasedAnalyzer.Analyze()
    83  	assert.NoError(t, lockfileBasedAnalyzerErr)
    84  
    85  	fallbackBasedAnalyze, fallbackBasedAnalyzerErr := fallbackBasedAnalyzer.Analyze()
    86  	assert.NoError(t, fallbackBasedAnalyzerErr)
    87  
    88  	// ensure that the arrays are actually populated and we aren't comparing equivalent empty results
    89  	assert.NotEmpty(t, fallbackBasedAnalyze.Direct)
    90  	assert.NotEmpty(t, lockfileBasedAnalyze.Direct)
    91  	assert.Equal(t, fallbackBasedAnalyze, lockfileBasedAnalyze)
    92  }