| 
									
										
										
										
											2025-03-07 17:00:38 -06:00
										 |  |  | package nomino | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"errors" | 
					
						
							|  |  |  | 	"testing" | 
					
						
							| 
									
										
										
										
											2025-03-10 11:47:01 -05:00
										 |  |  | 	"time" | 
					
						
							| 
									
										
										
										
											2025-03-07 17:00:38 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/google/uuid" | 
					
						
							|  |  |  | 	"github.com/stretchr/testify/assert" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-03-10 13:48:11 -05:00
										 |  |  | func TestWithGenerator(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2025-03-13 15:36:30 -05:00
										 |  |  | 	g := func(*Config) (string, error) { return "abc", nil } | 
					
						
							| 
									
										
										
										
											2025-03-10 14:52:50 -05:00
										 |  |  | 	var c Config | 
					
						
							| 
									
										
										
										
											2025-03-10 13:48:11 -05:00
										 |  |  | 	WithGenerator(g)(&c) | 
					
						
							| 
									
										
										
										
											2025-03-13 15:36:30 -05:00
										 |  |  | 	st, err := c.generator(&c) | 
					
						
							| 
									
										
										
										
											2025-03-07 17:00:38 -06:00
										 |  |  | 	assert.NoError(t, err) | 
					
						
							| 
									
										
										
										
											2025-03-10 13:48:11 -05:00
										 |  |  | 	assert.Equal(t, "abc", st) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-03-10 14:25:00 -05:00
										 |  |  | func TestMultiGeneratorInOrder(t *testing.T) { | 
					
						
							|  |  |  | 	st1 := "abc" | 
					
						
							|  |  |  | 	st2 := "def" | 
					
						
							|  |  |  | 	er1 := errors.New("oops") | 
					
						
							| 
									
										
										
										
											2025-03-13 15:36:30 -05:00
										 |  |  | 	g1 := func(*Config) (string, error) { return st1, nil } | 
					
						
							|  |  |  | 	g2 := func(*Config) (string, error) { return st2, nil } | 
					
						
							|  |  |  | 	g3 := func(*Config) (string, error) { return "", er1 } | 
					
						
							| 
									
										
										
										
											2025-03-10 14:25:00 -05:00
										 |  |  | 	g := MultiGeneratorInOrder(g1, g2, g3) | 
					
						
							| 
									
										
										
										
											2025-03-13 15:36:30 -05:00
										 |  |  | 	st, err := g(nil) | 
					
						
							| 
									
										
										
										
											2025-03-10 14:25:00 -05:00
										 |  |  | 	assert.NoError(t, err) | 
					
						
							|  |  |  | 	assert.Equal(t, st1, st) | 
					
						
							| 
									
										
										
										
											2025-03-13 15:36:30 -05:00
										 |  |  | 	st, err = g(nil) | 
					
						
							| 
									
										
										
										
											2025-03-10 14:25:00 -05:00
										 |  |  | 	assert.NoError(t, err) | 
					
						
							|  |  |  | 	assert.Equal(t, st2, st) | 
					
						
							| 
									
										
										
										
											2025-03-13 15:36:30 -05:00
										 |  |  | 	st, err = g(nil) | 
					
						
							| 
									
										
										
										
											2025-03-10 14:25:00 -05:00
										 |  |  | 	assert.Zero(t, st) | 
					
						
							|  |  |  | 	assert.ErrorIs(t, err, er1) | 
					
						
							| 
									
										
										
										
											2025-03-13 15:36:30 -05:00
										 |  |  | 	st, err = g(nil) | 
					
						
							| 
									
										
										
										
											2025-03-10 14:25:00 -05:00
										 |  |  | 	assert.NoError(t, err) | 
					
						
							|  |  |  | 	assert.Equal(t, st1, st) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func TestMultiGeneratorInOrderOne(t *testing.T) { | 
					
						
							|  |  |  | 	st1 := "abc" | 
					
						
							| 
									
										
										
										
											2025-03-13 15:36:30 -05:00
										 |  |  | 	g1 := func(*Config) (string, error) { return st1, nil } | 
					
						
							| 
									
										
										
										
											2025-03-10 14:25:00 -05:00
										 |  |  | 	g := MultiGeneratorInOrder(g1) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-03-13 15:36:30 -05:00
										 |  |  | 	st, err := g(nil) | 
					
						
							| 
									
										
										
										
											2025-03-10 14:25:00 -05:00
										 |  |  | 	assert.NoError(t, err) | 
					
						
							|  |  |  | 	assert.Equal(t, st1, st) | 
					
						
							| 
									
										
										
										
											2025-03-13 15:36:30 -05:00
										 |  |  | 	st, err = g(nil) | 
					
						
							| 
									
										
										
										
											2025-03-10 14:25:00 -05:00
										 |  |  | 	assert.NoError(t, err) | 
					
						
							|  |  |  | 	assert.Equal(t, st1, st) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func TestMultiGeneratorInOrderMissing(t *testing.T) { | 
					
						
							|  |  |  | 	g := MultiGeneratorInOrder() | 
					
						
							| 
									
										
										
										
											2025-03-13 15:36:30 -05:00
										 |  |  | 	st, err := g(nil) | 
					
						
							| 
									
										
										
										
											2025-03-10 14:25:00 -05:00
										 |  |  | 	assert.Zero(t, st) | 
					
						
							|  |  |  | 	assert.ErrorIs(t, err, ErrMissingGenerators) | 
					
						
							| 
									
										
										
										
											2025-03-13 15:36:30 -05:00
										 |  |  | 	st, err = g(nil) | 
					
						
							| 
									
										
										
										
											2025-03-10 14:25:00 -05:00
										 |  |  | 	assert.Zero(t, st) | 
					
						
							|  |  |  | 	assert.ErrorIs(t, err, ErrMissingGenerators) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-03-10 13:48:11 -05:00
										 |  |  | func TestUUID(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2025-03-13 15:36:30 -05:00
										 |  |  | 	st, err := UUID()(nil) | 
					
						
							| 
									
										
										
										
											2025-03-10 13:48:11 -05:00
										 |  |  | 	assert.NoError(t, err) | 
					
						
							| 
									
										
										
										
											2025-03-07 17:00:38 -06:00
										 |  |  | 	_, parseErr := uuid.Parse(st) | 
					
						
							|  |  |  | 	assert.NoError(t, parseErr) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type badRead struct{} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (badRead) Read([]byte) (int, error) { | 
					
						
							|  |  |  | 	return 0, errors.New("sorry") | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-03-10 13:48:11 -05:00
										 |  |  | func TestUUIDFail(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2025-03-07 17:00:38 -06:00
										 |  |  | 	uuid.SetRand(badRead{}) | 
					
						
							|  |  |  | 	defer uuid.SetRand(nil) | 
					
						
							| 
									
										
										
										
											2025-03-10 13:48:11 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-03-13 15:36:30 -05:00
										 |  |  | 	_, err := UUID()(nil) | 
					
						
							| 
									
										
										
										
											2025-03-07 17:00:38 -06:00
										 |  |  | 	assert.Equal(t, errors.New("sorry"), err) | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2025-03-10 11:47:01 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-03-10 13:48:11 -05:00
										 |  |  | func TestTimestamp(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2025-03-10 11:47:01 -05:00
										 |  |  | 	n := time.Now() | 
					
						
							| 
									
										
										
										
											2025-03-13 15:36:30 -05:00
										 |  |  | 	st, err := Timestamp()(nil) | 
					
						
							| 
									
										
										
										
											2025-03-10 11:47:01 -05:00
										 |  |  | 	assert.NoError(t, err) | 
					
						
							|  |  |  | 	assert.Equal(t, n.Format(FileTimestamp), st) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-03-10 13:48:11 -05:00
										 |  |  | func TestTime(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2025-03-10 11:47:01 -05:00
										 |  |  | 	d := time.Date(1986, time.March, 28, 12, 0, 0, 0, time.UTC) | 
					
						
							| 
									
										
										
										
											2025-03-10 13:48:11 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-03-13 15:36:30 -05:00
										 |  |  | 	st, err := Time(d)(nil) | 
					
						
							| 
									
										
										
										
											2025-03-10 11:47:01 -05:00
										 |  |  | 	assert.NoError(t, err) | 
					
						
							|  |  |  | 	assert.Equal(t, d.Format(FileTimestamp), st) | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2025-03-10 11:52:55 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-03-10 13:48:11 -05:00
										 |  |  | func TestTimestampUTC(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2025-03-10 11:52:55 -05:00
										 |  |  | 	n := time.Now() | 
					
						
							| 
									
										
										
										
											2025-03-13 15:36:30 -05:00
										 |  |  | 	st, err := TimestampUTC()(nil) | 
					
						
							| 
									
										
										
										
											2025-03-10 11:52:55 -05:00
										 |  |  | 	assert.NoError(t, err) | 
					
						
							|  |  |  | 	assert.Equal(t, n.UTC().Format(FileTimestampNoTZ), st) | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2025-03-13 16:58:55 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | func TestSlugMissingFilename(t *testing.T) { | 
					
						
							|  |  |  | 	conf := NewConfig(WithGenerator(Slug())) | 
					
						
							|  |  |  | 	st, err := conf.generator(&conf) | 
					
						
							|  |  |  | 	assert.Zero(t, st) | 
					
						
							|  |  |  | 	assert.ErrorIs(t, err, ErrMissingOriginal) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func TestSlugRemovesOriginal(t *testing.T) { | 
					
						
							|  |  |  | 	conf := NewConfig(WithGenerator(Slug()), WithOriginal("Hello, World")) | 
					
						
							|  |  |  | 	st, err := conf.generator(&conf) | 
					
						
							|  |  |  | 	assert.Zero(t, conf.original) | 
					
						
							|  |  |  | 	assert.Equal(t, "hello-world", st) | 
					
						
							|  |  |  | 	assert.NoError(t, err) | 
					
						
							|  |  |  | } |