mirror of
https://github.com/jesseduffield/lazydocker.git
synced 2026-07-21 23:01:03 +00:00
restore sorting tests
This commit is contained in:
parent
82516385c0
commit
95cee378cb
3 changed files with 169 additions and 182 deletions
|
|
@ -1,165 +0,0 @@
|
|||
package commands
|
||||
|
||||
// func sampleContainers(userConfig *config.AppConfig) []*Container {
|
||||
// return []*Container{
|
||||
// {
|
||||
// ID: "1",
|
||||
// Name: "1",
|
||||
// Container: types.Container{
|
||||
// State: "exited",
|
||||
// },
|
||||
// Config: userConfig,
|
||||
// },
|
||||
// {
|
||||
// ID: "2",
|
||||
// Name: "2",
|
||||
// Container: types.Container{
|
||||
// State: "running",
|
||||
// },
|
||||
// Config: userConfig,
|
||||
// },
|
||||
// {
|
||||
// ID: "3",
|
||||
// Name: "3",
|
||||
// Container: types.Container{
|
||||
// State: "running",
|
||||
// },
|
||||
// Config: userConfig,
|
||||
// },
|
||||
// {
|
||||
// ID: "4",
|
||||
// Name: "4",
|
||||
// Container: types.Container{
|
||||
// State: "created",
|
||||
// },
|
||||
// Config: userConfig,
|
||||
// },
|
||||
// }
|
||||
// }
|
||||
|
||||
// func expectedPerStatusContainers(appConfig *config.AppConfig) []*Container {
|
||||
// return []*Container{
|
||||
// {
|
||||
// ID: "2",
|
||||
// Name: "2",
|
||||
// Container: types.Container{
|
||||
// State: "running",
|
||||
// },
|
||||
// Config: appConfig,
|
||||
// },
|
||||
// {
|
||||
// ID: "3",
|
||||
// Name: "3",
|
||||
// Container: types.Container{
|
||||
// State: "running",
|
||||
// },
|
||||
// Config: appConfig,
|
||||
// },
|
||||
// {
|
||||
// ID: "1",
|
||||
// Name: "1",
|
||||
// Container: types.Container{
|
||||
// State: "exited",
|
||||
// },
|
||||
// Config: appConfig,
|
||||
// },
|
||||
// {
|
||||
// ID: "4",
|
||||
// Name: "4",
|
||||
// Container: types.Container{
|
||||
// State: "created",
|
||||
// },
|
||||
// Config: appConfig,
|
||||
// },
|
||||
// }
|
||||
// }
|
||||
|
||||
// func expectedLegacySortedContainers(appConfig *config.AppConfig) []*Container {
|
||||
// return []*Container{
|
||||
// {
|
||||
// ID: "1",
|
||||
// Name: "1",
|
||||
// Container: types.Container{
|
||||
// State: "exited",
|
||||
// },
|
||||
// Config: appConfig,
|
||||
// },
|
||||
// {
|
||||
// ID: "2",
|
||||
// Name: "2",
|
||||
// Container: types.Container{
|
||||
// State: "running",
|
||||
// },
|
||||
// Config: appConfig,
|
||||
// },
|
||||
// {
|
||||
// ID: "3",
|
||||
// Name: "3",
|
||||
// Container: types.Container{
|
||||
// State: "running",
|
||||
// },
|
||||
// Config: appConfig,
|
||||
// },
|
||||
// {
|
||||
// ID: "4",
|
||||
// Name: "4",
|
||||
// Container: types.Container{
|
||||
// State: "created",
|
||||
// },
|
||||
// Config: appConfig,
|
||||
// },
|
||||
// }
|
||||
// }
|
||||
|
||||
// func assertEqualContainers(t *testing.T, left *Container, right *Container) {
|
||||
// t.Helper()
|
||||
// assert.Equal(t, left.Container.State, right.Container.State)
|
||||
// assert.Equal(t, left.Container.ID, right.Container.ID)
|
||||
// assert.Equal(t, left.Name, right.Name)
|
||||
// }
|
||||
|
||||
// func TestSortContainers(t *testing.T) {
|
||||
// appConfig := NewDummyAppConfig()
|
||||
// appConfig.UserConfig = &config.UserConfig{
|
||||
// Gui: config.GuiConfig{
|
||||
// LegacySortContainers: false,
|
||||
// },
|
||||
// }
|
||||
// command := &DockerCommand{
|
||||
// Config: appConfig,
|
||||
// }
|
||||
|
||||
// containers := sampleContainers(appConfig)
|
||||
|
||||
// sorted := expectedPerStatusContainers(appConfig)
|
||||
|
||||
// ct := command.sortedContainers(containers)
|
||||
|
||||
// assert.Equal(t, len(ct), len(sorted))
|
||||
|
||||
// for i := 0; i < len(ct); i++ {
|
||||
// assertEqualContainers(t, sorted[i], ct[i])
|
||||
// }
|
||||
// }
|
||||
|
||||
// func TestLegacySortedContainers(t *testing.T) {
|
||||
// appConfig := NewDummyAppConfig()
|
||||
// appConfig.UserConfig = &config.UserConfig{
|
||||
// Gui: config.GuiConfig{
|
||||
// LegacySortContainers: true,
|
||||
// },
|
||||
// }
|
||||
// command := &DockerCommand{
|
||||
// Config: appConfig,
|
||||
// }
|
||||
|
||||
// containers := sampleContainers(appConfig)
|
||||
|
||||
// sorted := expectedLegacySortedContainers(appConfig)
|
||||
|
||||
// ct := command.sortedContainers(containers)
|
||||
|
||||
// for i := 0; i < len(ct); i++ {
|
||||
// assertEqualContainers(t, sorted[i], ct[i])
|
||||
// }
|
||||
// }
|
||||
|
|
@ -16,12 +16,6 @@ import (
|
|||
)
|
||||
|
||||
func (gui *Gui) getContainersPanel() *SideListPanel[*commands.Container] {
|
||||
states := map[string]int{
|
||||
"running": 1,
|
||||
"exited": 2,
|
||||
"created": 3,
|
||||
}
|
||||
|
||||
// Standalone containers are containers which are either one-off containers, or whose service is not part of this docker-compose context.
|
||||
isStandaloneContainer := func(container *commands.Container) bool {
|
||||
if container.OneOff || container.ServiceName == "" {
|
||||
|
|
@ -77,17 +71,7 @@ func (gui *Gui) getContainersPanel() *SideListPanel[*commands.Container] {
|
|||
// sortedContainers returns containers sorted by state if c.SortContainersByState is true (follows 1- running, 2- exited, 3- created)
|
||||
// and sorted by name if c.SortContainersByState is false
|
||||
sort: func(a *commands.Container, b *commands.Container) bool {
|
||||
if gui.Config.UserConfig.Gui.LegacySortContainers {
|
||||
return a.Name < b.Name
|
||||
}
|
||||
|
||||
stateLeft := states[a.Container.State]
|
||||
stateRight := states[b.Container.State]
|
||||
if stateLeft == stateRight {
|
||||
return a.Name < b.Name
|
||||
}
|
||||
|
||||
return states[a.Container.State] < states[b.Container.State]
|
||||
return sortContainers(a, b, gui.Config.UserConfig.Gui.LegacySortContainers)
|
||||
},
|
||||
filter: func(container *commands.Container) bool {
|
||||
// Note that this is O(N*M) time complexity where N is the number of services
|
||||
|
|
@ -118,6 +102,26 @@ func (gui *Gui) getContainersPanel() *SideListPanel[*commands.Container] {
|
|||
}
|
||||
}
|
||||
|
||||
var containerStates = map[string]int{
|
||||
"running": 1,
|
||||
"exited": 2,
|
||||
"created": 3,
|
||||
}
|
||||
|
||||
func sortContainers(a *commands.Container, b *commands.Container, legacySort bool) bool {
|
||||
if legacySort {
|
||||
return a.Name < b.Name
|
||||
}
|
||||
|
||||
stateLeft := containerStates[a.Container.State]
|
||||
stateRight := containerStates[b.Container.State]
|
||||
if stateLeft == stateRight {
|
||||
return a.Name < b.Name
|
||||
}
|
||||
|
||||
return containerStates[a.Container.State] < containerStates[b.Container.State]
|
||||
}
|
||||
|
||||
func (gui *Gui) renderContainerEnv(container *commands.Container) error {
|
||||
if !container.DetailsLoaded() {
|
||||
return gui.T.NewTask(func(stop chan struct{}) {
|
||||
|
|
|
|||
148
pkg/gui/sort_container_test.go
Normal file
148
pkg/gui/sort_container_test.go
Normal file
|
|
@ -0,0 +1,148 @@
|
|||
package gui
|
||||
|
||||
import (
|
||||
"sort"
|
||||
"testing"
|
||||
|
||||
"github.com/docker/docker/api/types"
|
||||
"github.com/jesseduffield/lazydocker/pkg/commands"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func sampleContainers() []*commands.Container {
|
||||
return []*commands.Container{
|
||||
{
|
||||
ID: "1",
|
||||
Name: "1",
|
||||
Container: types.Container{
|
||||
State: "exited",
|
||||
},
|
||||
},
|
||||
{
|
||||
ID: "2",
|
||||
Name: "2",
|
||||
Container: types.Container{
|
||||
State: "running",
|
||||
},
|
||||
},
|
||||
{
|
||||
ID: "3",
|
||||
Name: "3",
|
||||
Container: types.Container{
|
||||
State: "running",
|
||||
},
|
||||
},
|
||||
{
|
||||
ID: "4",
|
||||
Name: "4",
|
||||
Container: types.Container{
|
||||
State: "created",
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func expectedPerStatusContainers() []*commands.Container {
|
||||
return []*commands.Container{
|
||||
{
|
||||
ID: "2",
|
||||
Name: "2",
|
||||
Container: types.Container{
|
||||
State: "running",
|
||||
},
|
||||
},
|
||||
{
|
||||
ID: "3",
|
||||
Name: "3",
|
||||
Container: types.Container{
|
||||
State: "running",
|
||||
},
|
||||
},
|
||||
{
|
||||
ID: "1",
|
||||
Name: "1",
|
||||
Container: types.Container{
|
||||
State: "exited",
|
||||
},
|
||||
},
|
||||
{
|
||||
ID: "4",
|
||||
Name: "4",
|
||||
Container: types.Container{
|
||||
State: "created",
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func expectedLegacySortedContainers() []*commands.Container {
|
||||
return []*commands.Container{
|
||||
{
|
||||
ID: "1",
|
||||
Name: "1",
|
||||
Container: types.Container{
|
||||
State: "exited",
|
||||
},
|
||||
},
|
||||
{
|
||||
ID: "2",
|
||||
Name: "2",
|
||||
Container: types.Container{
|
||||
State: "running",
|
||||
},
|
||||
},
|
||||
{
|
||||
ID: "3",
|
||||
Name: "3",
|
||||
Container: types.Container{
|
||||
State: "running",
|
||||
},
|
||||
},
|
||||
{
|
||||
ID: "4",
|
||||
Name: "4",
|
||||
Container: types.Container{
|
||||
State: "created",
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func assertEqualContainers(t *testing.T, left *commands.Container, right *commands.Container) {
|
||||
t.Helper()
|
||||
assert.Equal(t, left.Container.State, right.Container.State)
|
||||
assert.Equal(t, left.Container.ID, right.Container.ID)
|
||||
assert.Equal(t, left.Name, right.Name)
|
||||
}
|
||||
|
||||
func TestSortContainers(t *testing.T) {
|
||||
actual := sampleContainers()
|
||||
|
||||
expected := expectedPerStatusContainers()
|
||||
|
||||
sort.Slice(actual, func(i, j int) bool {
|
||||
return sortContainers(actual[i], actual[j], false)
|
||||
})
|
||||
|
||||
assert.Equal(t, len(actual), len(expected))
|
||||
|
||||
for i := 0; i < len(actual); i++ {
|
||||
assertEqualContainers(t, expected[i], actual[i])
|
||||
}
|
||||
}
|
||||
|
||||
func TestLegacySortedContainers(t *testing.T) {
|
||||
actual := sampleContainers()
|
||||
|
||||
expected := expectedLegacySortedContainers()
|
||||
|
||||
sort.Slice(actual, func(i, j int) bool {
|
||||
return sortContainers(actual[i], actual[j], true)
|
||||
})
|
||||
|
||||
assert.Equal(t, len(actual), len(expected))
|
||||
|
||||
for i := 0; i < len(actual); i++ {
|
||||
assertEqualContainers(t, expected[i], actual[i])
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue