-
Notifications
You must be signed in to change notification settings - Fork 4
/
precompile_process_test.go
113 lines (94 loc) · 3.52 KB
/
precompile_process_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package railsassets_test
import (
"bytes"
"errors"
"os"
"testing"
"github.com/paketo-buildpacks/packit/v2/pexec"
"github.com/paketo-buildpacks/packit/v2/scribe"
railsassets "github.com/paketo-buildpacks/rails-assets"
"github.com/paketo-buildpacks/rails-assets/fakes"
"github.com/sclevine/spec"
. "github.com/onsi/gomega"
)
func testPrecompileProcess(t *testing.T, context spec.G, it spec.S) {
var Expect = NewWithT(t).Expect
context("Execute", func() {
var (
workingDir string
executions []pexec.Execution
executable *fakes.Executable
precompileProcess railsassets.PrecompileProcess
)
it.Before(func() {
var err error
workingDir, err = os.MkdirTemp("", "working-dir")
Expect(err).NotTo(HaveOccurred())
executions = []pexec.Execution{}
executable = &fakes.Executable{}
executable.ExecuteCall.Stub = func(execution pexec.Execution) error {
executions = append(executions, execution)
return nil
}
logger := scribe.NewEmitter(bytes.NewBuffer(nil))
precompileProcess = railsassets.NewPrecompileProcess(executable, logger)
})
it.After(func() {
Expect(os.RemoveAll(workingDir)).To(Succeed())
})
it("runs the bundle exec assets:precompile process", func() {
err := precompileProcess.Execute(workingDir)
Expect(err).NotTo(HaveOccurred())
Expect(executions).To(HaveLen(1))
Expect(executions[0].Args).To(Equal([]string{"exec", "rails", "assets:precompile", "assets:clean"}))
Expect(executions[0].Env).To(ContainElement("RAILS_ENV=production"))
Expect(executions[0].Env).To(ContainElement("SECRET_KEY_BASE=dummy"))
})
context("when a user sets their own RAILS_ENV", func() {
it.Before(func() {
Expect(os.Setenv("RAILS_ENV", "staging")).To(Succeed())
})
it.After(func() {
Expect(os.Unsetenv("RAILS_ENV")).To(Succeed())
})
it("runs the bundle exec assets:precompile process while respecting RAILS_ENV", func() {
err := precompileProcess.Execute(workingDir)
Expect(err).NotTo(HaveOccurred())
Expect(executions).To(HaveLen(1))
Expect(executions[0].Args).To(Equal([]string{"exec", "rails", "assets:precompile", "assets:clean"}))
Expect(executions[0].Env).To(ContainElement("RAILS_ENV=staging"))
Expect(executions[0].Env).To(ContainElement("SECRET_KEY_BASE=dummy"))
})
})
context("when a user sets their own SECRET_KEY_BASE", func() {
it.Before(func() {
Expect(os.Setenv("SECRET_KEY_BASE", "dummy2")).To(Succeed())
})
it.After(func() {
Expect(os.Unsetenv("SECRET_KEY_BASE")).To(Succeed())
})
it("runs the bundle exec assets:precompile process while respecting SECRET_KEY_BASE", func() {
err := precompileProcess.Execute(workingDir)
Expect(err).NotTo(HaveOccurred())
Expect(executions).To(HaveLen(1))
Expect(executions[0].Args).To(Equal([]string{"exec", "rails", "assets:precompile", "assets:clean"}))
Expect(executions[0].Env).To(ContainElement("RAILS_ENV=production"))
Expect(executions[0].Env).To(ContainElement("SECRET_KEY_BASE=dummy2"))
})
})
context("failure cases", func() {
context("when bundle exec fails", func() {
it.Before(func() {
executable.ExecuteCall.Stub = func(execution pexec.Execution) error {
return errors.New("bundle exec failed")
}
})
it("prints the execution output and returns an error", func() {
err := precompileProcess.Execute(workingDir)
Expect(err).To(MatchError(ContainSubstring("failed to execute bundle exec")))
Expect(err).To(MatchError(ContainSubstring("bundle exec failed")))
})
})
})
})
}