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" }`)