mirror of
https://github.com/abhinavxd/libredesk.git
synced 2025-11-21 23:08:13 +00:00
feat: test cases for SLA calculator, string utilities and attachments
This commit is contained in:
143
internal/stringutil/stringutil_test.go
Normal file
143
internal/stringutil/stringutil_test.go
Normal file
@@ -0,0 +1,143 @@
|
||||
package stringutil
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestReverseSlice(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
input []string
|
||||
expected []string
|
||||
}{
|
||||
{
|
||||
name: "empty slice",
|
||||
input: []string{},
|
||||
expected: []string{},
|
||||
},
|
||||
{
|
||||
name: "single element",
|
||||
input: []string{"a"},
|
||||
expected: []string{"a"},
|
||||
},
|
||||
{
|
||||
name: "multiple elements",
|
||||
input: []string{"a", "b", "c"},
|
||||
expected: []string{"c", "b", "a"},
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
input := make([]string, len(tt.input))
|
||||
copy(input, tt.input)
|
||||
ReverseSlice(input)
|
||||
if len(input) != len(tt.expected) {
|
||||
t.Errorf("got len %d, want %d", len(input), len(tt.expected))
|
||||
}
|
||||
for i := range input {
|
||||
if input[i] != tt.expected[i] {
|
||||
t.Errorf("at index %d got %s, want %s", i, input[i], tt.expected[i])
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestRemoveItemByValue(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
input []string
|
||||
remove string
|
||||
expected []string
|
||||
}{
|
||||
{
|
||||
name: "empty slice",
|
||||
input: []string{},
|
||||
remove: "a",
|
||||
expected: []string{},
|
||||
},
|
||||
{
|
||||
name: "no matches",
|
||||
input: []string{"b", "c"},
|
||||
remove: "a",
|
||||
expected: []string{"b", "c"},
|
||||
},
|
||||
{
|
||||
name: "single match",
|
||||
input: []string{"a", "b", "c"},
|
||||
remove: "b",
|
||||
expected: []string{"a", "c"},
|
||||
},
|
||||
{
|
||||
name: "multiple matches",
|
||||
input: []string{"a", "b", "a", "c", "a"},
|
||||
remove: "a",
|
||||
expected: []string{"b", "c"},
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
result := RemoveItemByValue(tt.input, tt.remove)
|
||||
if len(result) != len(tt.expected) {
|
||||
t.Errorf("got len %d, want %d", len(result), len(tt.expected))
|
||||
}
|
||||
for i := range result {
|
||||
if result[i] != tt.expected[i] {
|
||||
t.Errorf("at index %d got %s, want %s", i, result[i], tt.expected[i])
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestFormatDuration(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
duration time.Duration
|
||||
includeSeconds bool
|
||||
expected string
|
||||
}{
|
||||
{
|
||||
name: "zero duration with seconds",
|
||||
duration: 0,
|
||||
includeSeconds: true,
|
||||
expected: "0 minutes",
|
||||
},
|
||||
{
|
||||
name: "hours only",
|
||||
duration: 2 * time.Hour,
|
||||
includeSeconds: false,
|
||||
expected: "2 hours 0 minutes",
|
||||
},
|
||||
{
|
||||
name: "hours and minutes",
|
||||
duration: 2*time.Hour + 30*time.Minute,
|
||||
includeSeconds: false,
|
||||
expected: "2 hours 30 minutes",
|
||||
},
|
||||
{
|
||||
name: "full duration with seconds",
|
||||
duration: 2*time.Hour + 30*time.Minute + 15*time.Second,
|
||||
includeSeconds: true,
|
||||
expected: "2 hours 30 minutes 15 seconds",
|
||||
},
|
||||
{
|
||||
name: "full duration without seconds",
|
||||
duration: 2*time.Hour + 30*time.Minute + 15*time.Second,
|
||||
includeSeconds: false,
|
||||
expected: "2 hours 30 minutes",
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
result := FormatDuration(tt.duration, tt.includeSeconds)
|
||||
if result != tt.expected {
|
||||
t.Errorf("got %q, want %q", result, tt.expected)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user