github.com/gofiber/fiber-cli@v0.0.3/cmd/version_test.go (about)

     1  package cmd
     2  
     3  import (
     4  	"errors"
     5  	"io/ioutil"
     6  	"net/http"
     7  	"os"
     8  	"testing"
     9  
    10  	"github.com/jarcoal/httpmock"
    11  	"github.com/stretchr/testify/assert"
    12  )
    13  
    14  func Test_Version_Printer(t *testing.T) {
    15  	at := assert.New(t)
    16  	t.Run("success", func(t *testing.T) {
    17  		httpmock.Activate()
    18  		defer httpmock.DeactivateAndReset()
    19  
    20  		httpmock.RegisterResponder(http.MethodGet, latestVersionUrl, httpmock.NewBytesResponder(200, fakeVersionResponse))
    21  
    22  		out, err := runCobraCmd(versionCmd)
    23  		at.Nil(err)
    24  		at.Contains(out, "2.0.6")
    25  	})
    26  
    27  	t.Run("latest err", func(t *testing.T) {
    28  		httpmock.Activate()
    29  		defer httpmock.DeactivateAndReset()
    30  
    31  		httpmock.RegisterResponder(http.MethodGet, latestVersionUrl, httpmock.NewBytesResponder(200, []byte("no version")))
    32  
    33  		out, err := runCobraCmd(versionCmd)
    34  		at.Nil(err)
    35  		at.Contains(out, "no version")
    36  	})
    37  }
    38  
    39  func Test_Version_Current(t *testing.T) {
    40  	at := assert.New(t)
    41  
    42  	t.Run("file not found", func(t *testing.T) {
    43  		setupCurrentVersionFile()
    44  		defer teardownCurrentVersionFile()
    45  
    46  		_, err := currentVersion()
    47  		at.NotNil(err)
    48  	})
    49  
    50  	t.Run("match version", func(t *testing.T) {
    51  		content := `module fiber-demo
    52  go 1.14
    53  require (
    54  	github.com/gofiber/fiber/v2 v2.0.6
    55  	github.com/jarcoal/httpmock v1.0.6
    56  )`
    57  
    58  		setupCurrentVersionFile(content)
    59  		defer teardownCurrentVersionFile()
    60  
    61  		v, err := currentVersion()
    62  		at.Nil(err)
    63  		at.Equal("v2.0.6", v)
    64  	})
    65  
    66  	t.Run("match master", func(t *testing.T) {
    67  		content := `module fiber-demo
    68  go 1.14
    69  require (
    70  	github.com/gofiber/fiber v0.0.0-20200926082917-55763e7e6ee3
    71  	github.com/jarcoal/httpmock v1.0.6
    72  )`
    73  
    74  		setupCurrentVersionFile(content)
    75  		defer teardownCurrentVersionFile()
    76  
    77  		v, err := currentVersion()
    78  		at.Nil(err)
    79  		at.Equal("v0.0.0-20200926082917-55763e7e6ee3", v)
    80  	})
    81  
    82  	t.Run("package not found", func(t *testing.T) {
    83  		content := `module fiber-demo
    84  go 1.14
    85  require (
    86  	github.com/jarcoal/httpmock v1.0.6
    87  )`
    88  
    89  		setupCurrentVersionFile(content)
    90  		defer teardownCurrentVersionFile()
    91  
    92  		_, err := currentVersion()
    93  		at.NotNil(err)
    94  	})
    95  }
    96  
    97  func setupCurrentVersionFile(content ...string) {
    98  	currentVersionFile = "current-version"
    99  	if len(content) > 0 {
   100  		_ = ioutil.WriteFile(currentVersionFile, []byte(content[0]), 0600)
   101  	}
   102  }
   103  
   104  func teardownCurrentVersionFile() {
   105  	_ = os.Remove(currentVersionFile)
   106  }
   107  
   108  func Test_Version_Latest(t *testing.T) {
   109  	at := assert.New(t)
   110  	t.Run("http get error", func(t *testing.T) {
   111  		httpmock.Activate()
   112  		defer httpmock.DeactivateAndReset()
   113  
   114  		httpmock.RegisterResponder(http.MethodGet, latestVersionUrl, httpmock.NewErrorResponder(errors.New("network error")))
   115  
   116  		_, err := latestVersion(false)
   117  		at.NotNil(err)
   118  	})
   119  
   120  	t.Run("version matched", func(t *testing.T) {
   121  		httpmock.Activate()
   122  		defer httpmock.DeactivateAndReset()
   123  
   124  		httpmock.RegisterResponder(http.MethodGet, latestVersionUrl, httpmock.NewBytesResponder(200, fakeVersionResponse))
   125  
   126  		v, err := latestVersion(false)
   127  		at.Nil(err)
   128  		at.Equal("2.0.6", v)
   129  	})
   130  
   131  	t.Run("no version matched", func(t *testing.T) {
   132  		httpmock.Activate()
   133  		defer httpmock.DeactivateAndReset()
   134  
   135  		httpmock.RegisterResponder(http.MethodGet, latestVersionUrl, httpmock.NewBytesResponder(200, []byte("no version")))
   136  
   137  		_, err := latestVersion(false)
   138  		at.NotNil(err)
   139  	})
   140  }
   141  
   142  var latestVersionUrl = "https://api.github.com/repos/gofiber/fiber/releases/latest"
   143  
   144  var fakeVersionResponse = []byte(`{ "url": "https://api.github.com/repos/gofiber/fiber/releases/32189569", "assets_url": "https://api.github.com/repos/gofiber/fiber/releases/32189569/assets", "upload_url": "https://uploads.github.com/repos/gofiber/fiber/releases/32189569/assets{?name,label}", "html_url": "https://github.com/gofiber/fiber/releases/tag/v2.0.6", "id": 32189569, "node_id": "MDc6UmVsZWFzZTMyMTg5NTY5", "tag_name": "v2.0.6", "target_commitish": "master", "name": "v2.0.6", "draft": false, "author": { "login": "Fenny", "id": 25108519, "node_id": "MDQ6VXNlcjI1MTA4NTE5", "avatar_url": "https://avatars1.githubusercontent.com/u/25108519?v=4", "gravatar_id": "", "url": "https://api.github.com/users/Fenny", "html_url": "https://github.com/Fenny", "followers_url": "https://api.github.com/users/Fenny/followers", "following_url": "https://api.github.com/users/Fenny/following{/other_user}", "gists_url": "https://api.github.com/users/Fenny/gists{/gist_id}", "starred_url": "https://api.github.com/users/Fenny/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/Fenny/subscriptions", "organizations_url": "https://api.github.com/users/Fenny/orgs", "repos_url": "https://api.github.com/users/Fenny/repos", "events_url": "https://api.github.com/users/Fenny/events{/privacy}", "received_events_url": "https://api.github.com/users/Fenny/received_events", "type": "User", "site_admin": false }, "prerelease": false, "created_at": "2020-10-05T19:54:02Z", "published_at": "2020-10-05T22:10:27Z", "assets": [], "tarball_url": "https://api.github.com/repos/gofiber/fiber/tarball/v2.0.6", "zipball_url": "https://api.github.com/repos/gofiber/fiber/zipball/v2.0.6" }`)