| 
									
										
										
										
											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) { | 
					
						
							|  |  |  | 	g := func() (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-07 17:00:38 -06:00
										 |  |  | 	st, err := c.generator() | 
					
						
							|  |  |  | 	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") | 
					
						
							|  |  |  | 	g1 := func() (string, error) { return st1, nil } | 
					
						
							|  |  |  | 	g2 := func() (string, error) { return st2, nil } | 
					
						
							|  |  |  | 	g3 := func() (string, error) { return "", er1 } | 
					
						
							|  |  |  | 	g := MultiGeneratorInOrder(g1, g2, g3) | 
					
						
							|  |  |  | 	st, err := g() | 
					
						
							|  |  |  | 	assert.NoError(t, err) | 
					
						
							|  |  |  | 	assert.Equal(t, st1, st) | 
					
						
							|  |  |  | 	st, err = g() | 
					
						
							|  |  |  | 	assert.NoError(t, err) | 
					
						
							|  |  |  | 	assert.Equal(t, st2, st) | 
					
						
							|  |  |  | 	st, err = g() | 
					
						
							|  |  |  | 	assert.Zero(t, st) | 
					
						
							|  |  |  | 	assert.ErrorIs(t, err, er1) | 
					
						
							|  |  |  | 	st, err = g() | 
					
						
							|  |  |  | 	assert.NoError(t, err) | 
					
						
							|  |  |  | 	assert.Equal(t, st1, st) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func TestMultiGeneratorInOrderOne(t *testing.T) { | 
					
						
							|  |  |  | 	st1 := "abc" | 
					
						
							|  |  |  | 	g1 := func() (string, error) { return st1, nil } | 
					
						
							|  |  |  | 	g := MultiGeneratorInOrder(g1) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	st, err := g() | 
					
						
							|  |  |  | 	assert.NoError(t, err) | 
					
						
							|  |  |  | 	assert.Equal(t, st1, st) | 
					
						
							|  |  |  | 	st, err = g() | 
					
						
							|  |  |  | 	assert.NoError(t, err) | 
					
						
							|  |  |  | 	assert.Equal(t, st1, st) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func TestMultiGeneratorInOrderMissing(t *testing.T) { | 
					
						
							|  |  |  | 	g := MultiGeneratorInOrder() | 
					
						
							|  |  |  | 	st, err := g() | 
					
						
							|  |  |  | 	assert.Zero(t, st) | 
					
						
							|  |  |  | 	assert.ErrorIs(t, err, ErrMissingGenerators) | 
					
						
							|  |  |  | 	st, err = g() | 
					
						
							|  |  |  | 	assert.Zero(t, st) | 
					
						
							|  |  |  | 	assert.ErrorIs(t, err, ErrMissingGenerators) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-03-10 13:48:11 -05:00
										 |  |  | func TestUUID(t *testing.T) { | 
					
						
							|  |  |  | 	st, err := UUID()() | 
					
						
							|  |  |  | 	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
										 |  |  | 
 | 
					
						
							|  |  |  | 	_, err := UUID()() | 
					
						
							| 
									
										
										
										
											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-10 13:48:11 -05:00
										 |  |  | 	st, err := Timestamp()() | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							|  |  |  | 	st, err := Time(d)() | 
					
						
							| 
									
										
										
										
											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-10 13:48:11 -05:00
										 |  |  | 	st, err := TimestampUTC()() | 
					
						
							| 
									
										
										
										
											2025-03-10 11:52:55 -05:00
										 |  |  | 	assert.NoError(t, err) | 
					
						
							|  |  |  | 	assert.Equal(t, n.UTC().Format(FileTimestampNoTZ), st) | 
					
						
							|  |  |  | } |