Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions cmd/completion_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ func newFakeKoolCompletion() *KoolCompletion {
&shell.FakeExiter{},
&shell.DefaultOutputWriter{},
&shell.FakeInputReader{},
&shell.FakeTerminalChecker{MockIsTerminal: true},
},
rootCmd,
}
Expand Down
5 changes: 1 addition & 4 deletions cmd/docker.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package cmd

import (
"kool-dev/kool/cmd/builder"
"kool-dev/kool/cmd/shell"
"kool-dev/kool/environment"
"os"
"strings"
Expand All @@ -23,7 +22,6 @@ type KoolDocker struct {
DefaultKoolService
Flags *KoolDockerFlags

terminal shell.TerminalChecker
envStorage environment.EnvStorage
dockerRun builder.Command
}
Expand All @@ -42,7 +40,6 @@ func NewKoolDocker() *KoolDocker {
return &KoolDocker{
*newDefaultKoolService(),
&KoolDockerFlags{false, []string{}, []string{}, []string{}},
shell.NewTerminalChecker(),
environment.NewEnvStorage(),
builder.NewCommand("docker", "run", "--init", "--rm", "-w", "/app", "-i"),
}
Expand All @@ -53,7 +50,7 @@ func (d *KoolDocker) Execute(args []string) (err error) {
image := args[0]
workDir, _ := os.Getwd()

if d.terminal.IsTerminal(d.GetReader(), d.GetWriter()) {
if d.IsTerminal() {
d.dockerRun.AppendArgs("-t")
}

Expand Down
14 changes: 10 additions & 4 deletions cmd/docker_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ func newFakeKoolDocker() *KoolDocker {
return &KoolDocker{
*newFakeKoolService(),
&KoolDockerFlags{false, []string{}, []string{}, []string{}},
&shell.FakeTerminalChecker{MockIsTerminal: false},
environment.NewFakeEnvStorage(),
&builder.FakeCommand{},
}
Expand All @@ -24,7 +23,6 @@ func newFailedFakeKoolDocker() *KoolDocker {
return &KoolDocker{
*newFakeKoolService(),
&KoolDockerFlags{false, []string{}, []string{}, []string{}},
&shell.FakeTerminalChecker{MockIsTerminal: false},
environment.NewFakeEnvStorage(),
&builder.FakeCommand{MockError: errors.New("error docker")},
}
Expand Down Expand Up @@ -72,7 +70,6 @@ func TestNewKoolDocker(t *testing.T) {

func TestNewDockerCommand(t *testing.T) {
f := newFakeKoolDocker()
f.terminal.(*shell.FakeTerminalChecker).MockIsTerminal = true

cmd := NewDockerCommand(f)
workDir, _ := os.Getwd()
Expand Down Expand Up @@ -110,6 +107,8 @@ func TestNewDockerCommand(t *testing.T) {

func TestNoArgsNewDockerCommand(t *testing.T) {
f := newFakeKoolDocker()
f.term.(*shell.FakeTerminalChecker).MockIsTerminal = false

cmd := NewDockerCommand(f)

cmd.SetOut(bytes.NewBufferString(""))
Expand All @@ -121,6 +120,7 @@ func TestNoArgsNewDockerCommand(t *testing.T) {

func TestAsUserEnvKoolImageNewDockerCommand(t *testing.T) {
f := newFakeKoolDocker()
f.term.(*shell.FakeTerminalChecker).MockIsTerminal = false
cmd := NewDockerCommand(f)

f.envStorage.(*environment.FakeEnvStorage).Envs["KOOL_ASUSER"] = "kooldev_user_test"
Expand All @@ -140,6 +140,7 @@ func TestAsUserEnvKoolImageNewDockerCommand(t *testing.T) {

func TestAsUserEnvFireworkImageNewDockerCommand(t *testing.T) {
f := newFakeKoolDocker()
f.term.(*shell.FakeTerminalChecker).MockIsTerminal = false
cmd := NewDockerCommand(f)

f.envStorage.(*environment.FakeEnvStorage).Envs["KOOL_ASUSER"] = "kooldev_user_test"
Expand All @@ -159,6 +160,7 @@ func TestAsUserEnvFireworkImageNewDockerCommand(t *testing.T) {

func TestEnvFlagNewDockerCommand(t *testing.T) {
f := newFakeKoolDocker()
f.term.(*shell.FakeTerminalChecker).MockIsTerminal = false
cmd := NewDockerCommand(f)

cmd.SetArgs([]string{"--env=VAR_TEST=1", "image"})
Expand All @@ -176,6 +178,7 @@ func TestEnvFlagNewDockerCommand(t *testing.T) {

func TestVolumesFlagNewDockerCommand(t *testing.T) {
f := newFakeKoolDocker()
f.term.(*shell.FakeTerminalChecker).MockIsTerminal = false
cmd := NewDockerCommand(f)

cmd.SetArgs([]string{"--volume=volume_test", "image"})
Expand All @@ -193,6 +196,7 @@ func TestVolumesFlagNewDockerCommand(t *testing.T) {

func TestPublishFlagNewDockerCommand(t *testing.T) {
f := newFakeKoolDocker()
f.term.(*shell.FakeTerminalChecker).MockIsTerminal = false
cmd := NewDockerCommand(f)

cmd.SetArgs([]string{"--publish=publish_test", "image"})
Expand All @@ -210,6 +214,7 @@ func TestPublishFlagNewDockerCommand(t *testing.T) {

func TestImageCommandsNewDockerCommand(t *testing.T) {
f := newFakeKoolDocker()
f.term.(*shell.FakeTerminalChecker).MockIsTerminal = false
cmd := NewDockerCommand(f)

cmd.SetArgs([]string{"image", "command1", "command2"})
Expand All @@ -227,6 +232,7 @@ func TestImageCommandsNewDockerCommand(t *testing.T) {

func TestFailingNewDockerCommand(t *testing.T) {
f := newFailedFakeKoolDocker()
f.term.(*shell.FakeTerminalChecker).MockIsTerminal = false
cmd := NewDockerCommand(f)

cmd.SetArgs([]string{"image"})
Expand All @@ -246,7 +252,7 @@ func TestFailingNewDockerCommand(t *testing.T) {

func TestNonTerminalNewDockerCommand(t *testing.T) {
f := newFakeKoolDocker()
f.terminal.(*shell.FakeTerminalChecker).MockIsTerminal = false
f.term.(*shell.FakeTerminalChecker).MockIsTerminal = false

cmd := NewDockerCommand(f)

Expand Down
5 changes: 1 addition & 4 deletions cmd/exec.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package cmd

import (
"kool-dev/kool/cmd/builder"
"kool-dev/kool/cmd/shell"
"kool-dev/kool/environment"

"github.com/spf13/cobra"
Expand All @@ -20,7 +19,6 @@ type KoolExec struct {
DefaultKoolService
Flags *KoolExecFlags

terminal shell.TerminalChecker
envStorage environment.EnvStorage
composeExec builder.Command
}
Expand All @@ -39,15 +37,14 @@ func NewKoolExec() *KoolExec {
return &KoolExec{
*newDefaultKoolService(),
&KoolExecFlags{false, []string{}, false},
shell.NewTerminalChecker(),
environment.NewEnvStorage(),
builder.NewCommand("docker-compose", "exec"),
}
}

// Execute runs the exec logic with incoming arguments.
func (e *KoolExec) Execute(args []string) (err error) {
if !e.terminal.IsTerminal(e.GetReader(), e.GetWriter()) {
if !e.IsTerminal() {
e.composeExec.AppendArgs("-T")
}

Expand Down
4 changes: 1 addition & 3 deletions cmd/exec_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ func newFakeKoolExec() *KoolExec {
return &KoolExec{
*newFakeKoolService(),
&KoolExecFlags{false, []string{}, false},
&shell.FakeTerminalChecker{MockIsTerminal: true},
environment.NewFakeEnvStorage(),
&builder.FakeCommand{},
}
Expand All @@ -23,7 +22,6 @@ func newFailedFakeKoolExec() *KoolExec {
return &KoolExec{
*newFakeKoolService(),
&KoolExecFlags{false, []string{}, false},
&shell.FakeTerminalChecker{MockIsTerminal: true},
environment.NewFakeEnvStorage(),
&builder.FakeCommand{MockError: errors.New("error exec")},
}
Expand Down Expand Up @@ -187,7 +185,7 @@ func TestFailingNewExecCommand(t *testing.T) {

func TestNonTerminalNewExecCommand(t *testing.T) {
f := newFakeKoolExec()
f.terminal.(*shell.FakeTerminalChecker).MockIsTerminal = false
f.term.(*shell.FakeTerminalChecker).MockIsTerminal = false

cmd := NewExecCommand(f)

Expand Down
39 changes: 26 additions & 13 deletions cmd/fake_kool_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,21 @@ import "io"

// FakeKoolService is a mock to be used on testing/replacement for KoolService interface
type FakeKoolService struct {
ArgsExecute []string
ExitCode int
CalledExecute bool
CalledExit bool
CalledGetWriter bool
CalledSetWriter bool
CalledGetReader bool
CalledSetReader bool
CalledPrintln bool
CalledError bool
CalledWarning bool
CalledSuccess bool
MockExecError error
ArgsExecute []string
ExitCode int
CalledExecute bool
CalledExit bool
CalledGetWriter bool
CalledSetWriter bool
CalledGetReader bool
CalledSetReader bool
CalledPrintln bool
CalledPrintf bool
CalledError bool
CalledWarning bool
CalledSuccess bool
CalledIsTerminal bool
MockExecError error
}

// Execute mocks the function for testing
Expand Down Expand Up @@ -60,6 +62,11 @@ func (f *FakeKoolService) Println(out ...interface{}) {
f.CalledPrintln = true
}

// Printf mocks the function for testing
func (f *FakeKoolService) Printf(format string, a ...interface{}) {
f.CalledPrintf = true
}

// Error mocks the function for testing
func (f *FakeKoolService) Error(err error) {
f.CalledError = true
Expand All @@ -74,3 +81,9 @@ func (f *FakeKoolService) Warning(out ...interface{}) {
func (f *FakeKoolService) Success(out ...interface{}) {
f.CalledSuccess = true
}

// IsTerminal mocks the function for testing
func (f *FakeKoolService) IsTerminal() (isTerminal bool) {
f.CalledIsTerminal = true
return
}
12 changes: 12 additions & 0 deletions cmd/fake_kool_service_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,12 @@ func TestFakeKoolService(t *testing.T) {
t.Errorf("failed to assert calling method Println on FakeKoolService")
}

f.Printf("")

if !f.CalledPrintf {
t.Errorf("failed to assert calling method Printf on FakeKoolService")
}

f.Error(nil)

if !f.CalledError {
Expand All @@ -76,4 +82,10 @@ func TestFakeKoolService(t *testing.T) {
if err == nil || err.Error() != f.MockExecError.Error() {
t.Errorf("failed to assert returning Execute mocked error on FakeKoolService")
}

f.IsTerminal()

if !f.CalledIsTerminal {
t.Errorf("failed to assert calling method IsTerminal on FakeKoolService")
}
}
13 changes: 13 additions & 0 deletions cmd/kool_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
// of logic usually linked to a command.
type KoolService interface {
Execute([]string) error
IsTerminal() bool

shell.Exiter
shell.OutputWriter
Expand All @@ -22,13 +23,15 @@ type DefaultKoolService struct {
exiter shell.Exiter
out shell.OutputWriter
in shell.InputReader
term shell.TerminalChecker
}

func newDefaultKoolService() *DefaultKoolService {
return &DefaultKoolService{
shell.NewExiter(),
shell.NewOutputWriter(),
shell.NewInputReader(),
shell.NewTerminalChecker(),
}
}

Expand Down Expand Up @@ -64,6 +67,11 @@ func (k *DefaultKoolService) Println(out ...interface{}) {
k.out.Println(out...)
}

// Printf proxies the call to the given OutputWriter
func (k *DefaultKoolService) Printf(format string, a ...interface{}) {
k.out.Printf(format, a...)
}

// Error proxies the call to the given OutputWriter
func (k *DefaultKoolService) Error(err error) {
k.out.Error(err)
Expand All @@ -78,3 +86,8 @@ func (k *DefaultKoolService) Warning(out ...interface{}) {
func (k *DefaultKoolService) Success(out ...interface{}) {
k.out.Success(out...)
}

// IsTerminal checks if input/output is a terminal
func (k *DefaultKoolService) IsTerminal() bool {
return k.term.IsTerminal(k.GetReader(), k.GetWriter())
}
26 changes: 26 additions & 0 deletions cmd/kool_service_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@ package cmd

import (
"errors"
"fmt"
"kool-dev/kool/cmd/shell"
"strings"
"testing"
)

Expand All @@ -11,6 +13,7 @@ func newFakeKoolService() *DefaultKoolService {
&shell.FakeExiter{},
&shell.FakeOutputWriter{},
&shell.FakeInputReader{},
&shell.FakeTerminalChecker{MockIsTerminal: true},
}
}

Expand Down Expand Up @@ -61,6 +64,29 @@ func TestKoolServiceProxies(t *testing.T) {
t.Errorf("Success did not proxy the proper output on DefaultKoolService; expected %v got %v", out, k.out.(*shell.FakeOutputWriter).SuccessOutput)
}

out = []interface{}{"success"}
k.Println(out...)

if !k.out.(*shell.FakeOutputWriter).CalledPrintln {
t.Error("Println was not proxied by DefaultKoolService")
}

expected := strings.TrimSpace(fmt.Sprintln(out...))
if len(k.out.(*shell.FakeOutputWriter).OutLines[0]) != len(expected) {
t.Errorf("Println did not proxy the proper output on DefaultKoolService; expected %v got %v", expected, k.out.(*shell.FakeOutputWriter).OutLines[0])
}

k.Printf("testing %s", "format")

if !k.out.(*shell.FakeOutputWriter).CalledPrintf {
t.Error("Printf was not proxied by DefaultKoolService")
}

expectedFOutput := "testing format"
if fOutput := k.out.(*shell.FakeOutputWriter).FOutput; fOutput != expectedFOutput {
t.Errorf("Printf did not proxy the proper output on DefaultKoolService; expected '%s', got %s", expectedFOutput, fOutput)
}

k.SetWriter(nil)

if !k.out.(*shell.FakeOutputWriter).CalledSetWriter {
Expand Down
Loading