github.com/sergiusens/goreleaser@v0.34.3-0.20171009111917-ae6f7c157c5c/pipeline/release/release_test.go (about) 1 package release 2 3 import ( 4 "bytes" 5 "errors" 6 "io/ioutil" 7 "os" 8 "path/filepath" 9 "testing" 10 11 "github.com/goreleaser/goreleaser/config" 12 "github.com/goreleaser/goreleaser/context" 13 "github.com/goreleaser/goreleaser/internal/testlib" 14 "github.com/stretchr/testify/assert" 15 ) 16 17 func TestPipeDescription(t *testing.T) { 18 assert.NotEmpty(t, Pipe{}.Description()) 19 } 20 21 func TestRunPipe(t *testing.T) { 22 folder, err := ioutil.TempDir("", "goreleasertest") 23 assert.NoError(t, err) 24 tarfile, err := os.Create(filepath.Join(folder, "bin.tar.gz")) 25 assert.NoError(t, err) 26 debfile, err := os.Create(filepath.Join(folder, "bin.deb")) 27 assert.NoError(t, err) 28 var config = config.Project{ 29 Dist: folder, 30 Release: config.Release{ 31 GitHub: config.Repo{ 32 Owner: "test", 33 Name: "test", 34 }, 35 }, 36 } 37 var ctx = context.New(config) 38 ctx.Git = context.GitInfo{CurrentTag: "v1.0.0"} 39 ctx.Publish = true 40 ctx.AddArtifact(tarfile.Name()) 41 ctx.AddArtifact(debfile.Name()) 42 client := &DummyClient{} 43 assert.NoError(t, doRun(ctx, client)) 44 assert.True(t, client.CreatedRelease) 45 assert.True(t, client.UploadedFile) 46 assert.Contains(t, client.UploadedFileNames, "bin.deb") 47 assert.Contains(t, client.UploadedFileNames, "bin.tar.gz") 48 } 49 50 func TestRunPipeReleaseCreationFailed(t *testing.T) { 51 var config = config.Project{ 52 Release: config.Release{ 53 GitHub: config.Repo{ 54 Owner: "test", 55 Name: "test", 56 }, 57 }, 58 } 59 var ctx = context.New(config) 60 ctx.Git = context.GitInfo{CurrentTag: "v1.0.0"} 61 ctx.Publish = true 62 client := &DummyClient{ 63 FailToCreateRelease: true, 64 } 65 assert.Error(t, doRun(ctx, client)) 66 assert.False(t, client.CreatedRelease) 67 assert.False(t, client.UploadedFile) 68 } 69 70 func TestRunPipeWithFileThatDontExist(t *testing.T) { 71 var config = config.Project{ 72 Release: config.Release{ 73 GitHub: config.Repo{ 74 Owner: "test", 75 Name: "test", 76 }, 77 }, 78 } 79 var ctx = context.New(config) 80 ctx.Git = context.GitInfo{CurrentTag: "v1.0.0"} 81 ctx.Publish = true 82 ctx.AddArtifact("this-file-wont-exist-hopefully") 83 client := &DummyClient{} 84 assert.Error(t, doRun(ctx, client)) 85 assert.True(t, client.CreatedRelease) 86 assert.False(t, client.UploadedFile) 87 } 88 89 func TestRunPipeUploadFailure(t *testing.T) { 90 folder, err := ioutil.TempDir("", "goreleasertest") 91 assert.NoError(t, err) 92 tarfile, err := os.Create(filepath.Join(folder, "bin.tar.gz")) 93 assert.NoError(t, err) 94 var config = config.Project{ 95 Release: config.Release{ 96 GitHub: config.Repo{ 97 Owner: "test", 98 Name: "test", 99 }, 100 }, 101 } 102 var ctx = context.New(config) 103 ctx.Git = context.GitInfo{CurrentTag: "v1.0.0"} 104 ctx.Publish = true 105 ctx.AddArtifact(tarfile.Name()) 106 client := &DummyClient{ 107 FailToUpload: true, 108 } 109 assert.Error(t, doRun(ctx, client)) 110 assert.True(t, client.CreatedRelease) 111 assert.False(t, client.UploadedFile) 112 } 113 114 func TestSkipPublish(t *testing.T) { 115 var ctx = &context.Context{ 116 Publish: false, 117 Parallelism: 1, 118 } 119 client := &DummyClient{} 120 testlib.AssertSkipped(t, doRun(ctx, client)) 121 assert.False(t, client.CreatedRelease) 122 assert.False(t, client.UploadedFile) 123 } 124 125 type DummyClient struct { 126 FailToCreateRelease bool 127 FailToUpload bool 128 CreatedRelease bool 129 UploadedFile bool 130 UploadedFileNames []string 131 } 132 133 func (client *DummyClient) CreateRelease(ctx *context.Context, body string) (releaseID int, err error) { 134 if client.FailToCreateRelease { 135 return 0, errors.New("release failed") 136 } 137 client.CreatedRelease = true 138 return 139 } 140 141 func (client *DummyClient) CreateFile(ctx *context.Context, content bytes.Buffer, path string) (err error) { 142 return 143 } 144 145 func (client *DummyClient) Upload(ctx *context.Context, releaseID int, name string, file *os.File) (err error) { 146 if client.FailToUpload { 147 return errors.New("upload failed") 148 } 149 client.UploadedFile = true 150 client.UploadedFileNames = append(client.UploadedFileNames, name) 151 return 152 }