|
| 1 | +// internal/web/table_sort_test.go — unit coverage for the Table-view |
| 2 | +// server-side sort helpers. Stays in the web package so the test sees |
| 3 | +// the unexported sortUsersTable / sortGroupsTable / sortComputersTable |
| 4 | +// directly. |
| 5 | +package web |
| 6 | + |
| 7 | +import ( |
| 8 | + "testing" |
| 9 | + |
| 10 | + ldap "github.com/netresearch/simple-ldap-go" |
| 11 | + "github.com/stretchr/testify/require" |
| 12 | + |
| 13 | + "github.com/netresearch/ldap-manager/internal/ldap_cache/cachetest" |
| 14 | +) |
| 15 | + |
| 16 | +func TestNormaliseSortDir(t *testing.T) { |
| 17 | + require.Equal(t, "asc", normaliseSortDir("")) |
| 18 | + require.Equal(t, "asc", normaliseSortDir("foo")) |
| 19 | + require.Equal(t, "asc", normaliseSortDir("ASC")) // case-sensitive: only literal "desc" wins |
| 20 | + require.Equal(t, "desc", normaliseSortDir("desc")) |
| 21 | +} |
| 22 | + |
| 23 | +func TestSortUsersTable_ByCNAscDesc(t *testing.T) { |
| 24 | + users := []ldap.User{ |
| 25 | + cachetest.NewUserWithDN("cn=charlie,dc=ex,dc=com", "charlie", "csam", true, nil), |
| 26 | + cachetest.NewUserWithDN("cn=alice,dc=ex,dc=com", "alice", "asam", true, nil), |
| 27 | + cachetest.NewUserWithDN("cn=bob,dc=ex,dc=com", "bob", "bsam", false, nil), |
| 28 | + } |
| 29 | + |
| 30 | + sortUsersTable(users, "cn", "asc") |
| 31 | + require.Equal(t, "alice", users[0].CN()) |
| 32 | + require.Equal(t, "bob", users[1].CN()) |
| 33 | + require.Equal(t, "charlie", users[2].CN()) |
| 34 | + |
| 35 | + sortUsersTable(users, "cn", "desc") |
| 36 | + require.Equal(t, "charlie", users[0].CN()) |
| 37 | + require.Equal(t, "bob", users[1].CN()) |
| 38 | + require.Equal(t, "alice", users[2].CN()) |
| 39 | +} |
| 40 | + |
| 41 | +func TestSortUsersTable_ByStatusEnabledFirst(t *testing.T) { |
| 42 | + users := []ldap.User{ |
| 43 | + cachetest.NewUserWithDN("cn=disabled,dc=ex,dc=com", "disabled", "d", false, nil), |
| 44 | + cachetest.NewUserWithDN("cn=enabled,dc=ex,dc=com", "enabled", "e", true, nil), |
| 45 | + } |
| 46 | + sortUsersTable(users, "status", "asc") |
| 47 | + // "Enabled" (key "a") < "Disabled" (key "b") so enabled rows come |
| 48 | + // first under asc — the documented contract for the status sort. |
| 49 | + require.True(t, users[0].Enabled, "first row should be enabled under asc status sort") |
| 50 | + require.False(t, users[1].Enabled) |
| 51 | +} |
| 52 | + |
| 53 | +func TestSortUsersTable_UnknownKeyFallsBackToCN(t *testing.T) { |
| 54 | + users := []ldap.User{ |
| 55 | + cachetest.NewUserWithDN("cn=zed,dc=ex,dc=com", "zed", "z", true, nil), |
| 56 | + cachetest.NewUserWithDN("cn=ann,dc=ex,dc=com", "ann", "a", true, nil), |
| 57 | + } |
| 58 | + sortUsersTable(users, "lol-not-a-column", "asc") |
| 59 | + require.Equal(t, "ann", users[0].CN(), "unknown sort key should fall back to CN") |
| 60 | +} |
| 61 | + |
| 62 | +func TestSortGroupsTable_ByMembersDesc(t *testing.T) { |
| 63 | + groups := []ldap.Group{ |
| 64 | + cachetest.NewGroupWithDN("cn=small,dc=ex,dc=com", "small", []string{"a"}), |
| 65 | + cachetest.NewGroupWithDN("cn=big,dc=ex,dc=com", "big", []string{"a", "b", "c"}), |
| 66 | + cachetest.NewGroupWithDN("cn=mid,dc=ex,dc=com", "mid", []string{"a", "b"}), |
| 67 | + } |
| 68 | + sortGroupsTable(groups, "members", "desc") |
| 69 | + require.Equal(t, "big", groups[0].CN()) |
| 70 | + require.Equal(t, "mid", groups[1].CN()) |
| 71 | + require.Equal(t, "small", groups[2].CN()) |
| 72 | +} |
| 73 | + |
| 74 | +func TestSortComputersTable_BySAM(t *testing.T) { |
| 75 | + computers := []ldap.Computer{ |
| 76 | + cachetest.NewComputerWithDN("cn=ws03,dc=ex,dc=com", "ws03", "ws03$", true, nil), |
| 77 | + cachetest.NewComputerWithDN("cn=ws01,dc=ex,dc=com", "ws01", "ws01$", true, nil), |
| 78 | + } |
| 79 | + sortComputersTable(computers, "sam", "asc") |
| 80 | + require.Equal(t, "ws01$", computers[0].SAMAccountName) |
| 81 | + require.Equal(t, "ws03$", computers[1].SAMAccountName) |
| 82 | +} |
0 commit comments