github.com/wawandco/oxpecker@v1.5.7-0.20210910201653-5958d4afdd89/internal/info/info_test.go (about)

     1  package info
     2  
     3  import (
     4  	"io/ioutil"
     5  	"os"
     6  	"testing"
     7  )
     8  
     9  func TestBuildName(t *testing.T) {
    10  
    11  	t.Run("Success", func(t *testing.T) {
    12  		td := t.TempDir()
    13  		err := os.Chdir(td)
    14  		if err != nil {
    15  			t.Fatal(err)
    16  		}
    17  
    18  		file := `module wawandco/something`
    19  		err = ioutil.WriteFile("go.mod", []byte(file), 0444)
    20  		if err != nil {
    21  			t.Fatal(err)
    22  		}
    23  
    24  		name, err := BuildName()
    25  		if err != nil {
    26  			t.Fail()
    27  		}
    28  
    29  		if name != "something" {
    30  			t.Fail()
    31  		}
    32  	})
    33  
    34  	t.Run("Failed", func(t *testing.T) {
    35  		err := os.Chdir(t.TempDir())
    36  		if err != nil {
    37  			t.Fatal(err)
    38  		}
    39  
    40  		err = os.Remove("go.mod")
    41  		if err != nil && !os.IsNotExist(err) {
    42  			t.Fatal(err)
    43  		}
    44  
    45  		name, err := BuildName()
    46  		if err == nil {
    47  			t.Fail()
    48  		}
    49  
    50  		if name != "" {
    51  			t.Fail()
    52  		}
    53  	})
    54  
    55  	t.Run("ModuleCases", func(t *testing.T) {
    56  		tcases := []struct {
    57  			content      string
    58  			nameExpected string
    59  			errExpected  error
    60  		}{
    61  			{
    62  				content:      "random module content",
    63  				nameExpected: "",
    64  				errExpected:  ErrModuleNameNotFound,
    65  			},
    66  			{
    67  				content:      "module moduleFixer",
    68  				nameExpected: "moduleFixer",
    69  			},
    70  
    71  			{
    72  				content:      "module my/large/module/name",
    73  				nameExpected: "name",
    74  			},
    75  
    76  			{
    77  				content:      "module github.com/some/cool/package",
    78  				nameExpected: "package",
    79  			},
    80  			// TO DO:
    81  			{
    82  				content: `//One with comment
    83  						  module github.com/some/cool/comment`,
    84  				nameExpected: "comment",
    85  			},
    86  			{
    87  				content:      "",
    88  				nameExpected: "",
    89  				errExpected:  ErrModuleNameNotFound,
    90  			},
    91  
    92  			{
    93  				content:      "// module name tricky in comment",
    94  				nameExpected: "",
    95  				errExpected:  ErrModuleNameNotFound,
    96  			},
    97  		}
    98  
    99  		for _, tcase := range tcases {
   100  			t.Run(tcase.content, func(t *testing.T) {
   101  				err := os.Chdir(t.TempDir())
   102  				if err != nil {
   103  					t.Fatal("could not move to tmp folder")
   104  				}
   105  
   106  				content := []byte(tcase.content)
   107  				err = ioutil.WriteFile("go.mod", content, 0600)
   108  				if err != nil {
   109  					t.Fatalf("could not create go.mod file: %v", err)
   110  				}
   111  
   112  				name, err := BuildName()
   113  				if err != tcase.errExpected {
   114  					t.Fatalf("error should be %v got %v", tcase.errExpected, err)
   115  				}
   116  
   117  				if name != tcase.nameExpected {
   118  					t.Fatalf("module name should be %v got %v", tcase.nameExpected, name)
   119  				}
   120  			})
   121  
   122  		}
   123  	})
   124  
   125  }