112 lines
3.0 KiB
Go
112 lines
3.0 KiB
Go
package main
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestInstallFlatpakPackages(t *testing.T) {
|
|
defer resetMocks()
|
|
|
|
// Case 1: flatpak already installed
|
|
hasCmd = func(name string) bool {
|
|
return name == "flatpak"
|
|
}
|
|
|
|
var runCmdCalls [][]string
|
|
runCmd = func(argv []string, opts CmdOpts) CmdResult {
|
|
runCmdCalls = append(runCmdCalls, argv)
|
|
return CmdResult{ExitCode: 0}
|
|
}
|
|
|
|
installFlatpakPackages([]string{"org.gimp.GIMP"})
|
|
|
|
if len(runCmdCalls) != 2 {
|
|
t.Fatalf("expected 2 runCmd calls, got %d: %v", len(runCmdCalls), runCmdCalls)
|
|
}
|
|
|
|
// First call should add flathub remote
|
|
if runCmdCalls[0][1] != "remote-add" {
|
|
t.Errorf("expected remote-add, got %v", runCmdCalls[0])
|
|
}
|
|
// Second call should install GIMP
|
|
if runCmdCalls[1][1] != "install" || runCmdCalls[1][4] != "org.gimp.GIMP" {
|
|
t.Errorf("expected install GIMP, got %v", runCmdCalls[1])
|
|
}
|
|
|
|
// Case 2: flatpak not installed, choose not to install
|
|
resetMocks()
|
|
var askedPrompt string
|
|
stdin = strings.NewReader("n\n") // Abort flatpak installation
|
|
hasCmd = func(name string) bool {
|
|
return false
|
|
}
|
|
runCmdCalls = nil
|
|
installFlatpakPackages([]string{"org.gimp.GIMP"})
|
|
if len(runCmdCalls) != 0 {
|
|
t.Errorf("expected no flatpak installs if skipped, got calls: %v", runCmdCalls)
|
|
}
|
|
_ = askedPrompt
|
|
|
|
// Case 3: flatpak not installed, choose to install
|
|
resetMocks()
|
|
pkgMgr = "dnf"
|
|
stdin = strings.NewReader("y\n")
|
|
flatpakInstalled := false
|
|
hasCmd = func(name string) bool {
|
|
if name == "flatpak" {
|
|
return flatpakInstalled
|
|
}
|
|
return false
|
|
}
|
|
var runCalls [][]string
|
|
runCmd = func(argv []string, opts CmdOpts) CmdResult {
|
|
runCalls = append(runCalls, argv)
|
|
if len(argv) >= 4 && argv[0] == "dnf" && argv[1] == "install" && argv[3] == "flatpak" {
|
|
flatpakInstalled = true
|
|
}
|
|
return CmdResult{ExitCode: 0}
|
|
}
|
|
installFlatpakPackages([]string{"org.gimp.GIMP"})
|
|
// It should call dnf install flatpak, then remote-add, then install GIMP
|
|
foundInstall := false
|
|
for _, call := range runCalls {
|
|
if len(call) >= 4 && call[0] == "dnf" && call[1] == "install" && call[3] == "flatpak" {
|
|
foundInstall = true
|
|
}
|
|
}
|
|
if !foundInstall {
|
|
t.Errorf("expected dnf install flatpak to be called, got calls: %v", runCalls)
|
|
}
|
|
}
|
|
|
|
func TestInstallFlatpakFailures(t *testing.T) {
|
|
defer resetMocks()
|
|
|
|
stdin = strings.NewReader("y\n")
|
|
hasCmd = func(name string) bool { return false }
|
|
runCmd = func(argv []string, opts CmdOpts) CmdResult {
|
|
return CmdResult{ExitCode: 1}
|
|
}
|
|
installFlatpakPackages([]string{"org.gimp.GIMP"})
|
|
|
|
resetMocks()
|
|
stdin = strings.NewReader("y\n")
|
|
hasCmd = func(name string) bool { return false }
|
|
runCmd = func(argv []string, opts CmdOpts) CmdResult {
|
|
return CmdResult{ExitCode: 0}
|
|
}
|
|
installFlatpakPackages([]string{"org.gimp.GIMP"})
|
|
|
|
resetMocks()
|
|
hasCmd = func(name string) bool { return name == "flatpak" }
|
|
runCmd = func(argv []string, opts CmdOpts) CmdResult {
|
|
if argv[1] == "install" {
|
|
return CmdResult{ExitCode: 1}
|
|
}
|
|
return CmdResult{ExitCode: 0}
|
|
}
|
|
installFlatpakPackages([]string{"org.gimp.GIMP"})
|
|
}
|
|
|