test(slug): add unit tests for slug behavior
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
package slug
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/suite"
|
||||
)
|
||||
|
||||
type SlugTestSuite struct {
|
||||
suite.Suite
|
||||
slug Slug
|
||||
}
|
||||
|
||||
func (suite *SlugTestSuite) SetupTest() {
|
||||
suite.slug = New()
|
||||
}
|
||||
|
||||
func TestNew(t *testing.T) {
|
||||
s := New()
|
||||
|
||||
assert.NotNil(t, s, "New() should return a non-nil Slug")
|
||||
assert.Implements(t, (*Slug)(nil), s, "New() should return a type that implements Slug interface")
|
||||
assert.Equal(t, "", s.String(), "New() should initialize with empty string")
|
||||
}
|
||||
|
||||
func (suite *SlugTestSuite) TestString() {
|
||||
assert.Equal(suite.T(), "", suite.slug.String(), "String() should return empty string initially")
|
||||
|
||||
suite.slug.Set("test-slug")
|
||||
assert.Equal(suite.T(), "test-slug", suite.slug.String(), "String() should return the set value")
|
||||
}
|
||||
|
||||
func (suite *SlugTestSuite) TestSet() {
|
||||
testCases := []struct {
|
||||
name string
|
||||
input string
|
||||
expected string
|
||||
}{
|
||||
{
|
||||
name: "simple slug",
|
||||
input: "hello-world",
|
||||
expected: "hello-world",
|
||||
},
|
||||
{
|
||||
name: "empty string",
|
||||
input: "",
|
||||
expected: "",
|
||||
},
|
||||
{
|
||||
name: "slug with numbers",
|
||||
input: "test-123",
|
||||
expected: "test-123",
|
||||
},
|
||||
{
|
||||
name: "slug with special characters",
|
||||
input: "hello_world-123",
|
||||
expected: "hello_world-123",
|
||||
},
|
||||
{
|
||||
name: "overwrite existing slug",
|
||||
input: "new-slug",
|
||||
expected: "new-slug",
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range testCases {
|
||||
suite.Run(tc.name, func() {
|
||||
suite.slug.Set(tc.input)
|
||||
assert.Equal(suite.T(), tc.expected, suite.slug.String())
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func (suite *SlugTestSuite) TestMultipleSet() {
|
||||
suite.slug.Set("first-slug")
|
||||
assert.Equal(suite.T(), "first-slug", suite.slug.String())
|
||||
|
||||
suite.slug.Set("second-slug")
|
||||
assert.Equal(suite.T(), "second-slug", suite.slug.String())
|
||||
|
||||
suite.slug.Set("")
|
||||
assert.Equal(suite.T(), "", suite.slug.String())
|
||||
}
|
||||
|
||||
func TestSlugInterface(t *testing.T) {
|
||||
var _ Slug = (*slug)(nil)
|
||||
var _ Slug = New()
|
||||
}
|
||||
|
||||
func TestSlugIsolation(t *testing.T) {
|
||||
slug1 := New()
|
||||
slug2 := New()
|
||||
|
||||
slug1.Set("slug-one")
|
||||
slug2.Set("slug-two")
|
||||
|
||||
assert.Equal(t, "slug-one", slug1.String(), "First slug should maintain its value")
|
||||
assert.Equal(t, "slug-two", slug2.String(), "Second slug should maintain its value")
|
||||
}
|
||||
|
||||
func TestSlugTestSuite(t *testing.T) {
|
||||
suite.Run(t, new(SlugTestSuite))
|
||||
}
|
||||
Reference in New Issue
Block a user