github.com/wawandco/oxpecker-plugins@v0.1.1/internal/info/info_test.go (about)

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