package nomino import ( "errors" "testing" "github.com/stretchr/testify/assert" ) func TestWithGenerator(t *testing.T) { g := func(*Config) (string, error) { return "abc", nil } var c Config WithGenerator(g)(&c) st, err := c.generator(&c) assert.NoError(t, err) assert.Equal(t, "abc", st) } const ( out1 string = "abc" out2 string = "def" ) var ( outs = []string{out1, out2} err1 = errors.New("oops") gen1 Generator = func(*Config) (string, error) { return out1, nil } gen2 Generator = func(*Config) (string, error) { return out2, nil } gen3 Generator = func(*Config) (string, error) { return "", err1 } gens = []Generator{gen1, gen2, gen3} ) func TestMultiGeneratorInOrder(t *testing.T) { g := MultiGeneratorInOrder(gens...) st, err := g(nil) assert.NoError(t, err) assert.Equal(t, out1, st) st, err = g(nil) assert.NoError(t, err) assert.Equal(t, out2, st) st, err = g(nil) assert.Zero(t, st) assert.ErrorIs(t, err, err1) st, err = g(nil) assert.NoError(t, err) assert.Equal(t, out1, st) } func TestMultiGeneratorInOrderOne(t *testing.T) { st1 := "abc" g1 := func(*Config) (string, error) { return st1, nil } g := MultiGeneratorInOrder(g1) st, err := g(nil) assert.NoError(t, err) assert.Equal(t, st1, st) st, err = g(nil) assert.NoError(t, err) assert.Equal(t, st1, st) } func TestMultiGeneratorInOrderMissing(t *testing.T) { g := MultiGeneratorInOrder() st, err := g(nil) assert.Zero(t, st) assert.ErrorIs(t, err, ErrMissingGenerators) st, err = g(nil) assert.Zero(t, st) assert.ErrorIs(t, err, ErrMissingGenerators) } func TestMultiGeneratorRandomOrder(t *testing.T) { g := MultiGeneratorRandomOrder(gens...) for i := 0; i < 4; i++ { st, err := g(nil) if err != nil { assert.Zero(t, st) assert.ErrorIs(t, err, err1) } else { assert.Contains(t, outs, st) } } } func TestMultiGeneratorRandomOrderOne(t *testing.T) { st1 := "abc" g1 := func(*Config) (string, error) { return st1, nil } g := MultiGeneratorRandomOrder(g1) st, err := g(nil) assert.NoError(t, err) assert.Equal(t, st1, st) st, err = g(nil) assert.NoError(t, err) assert.Equal(t, st1, st) } func TestMultiGeneratorRandomOrderMissing(t *testing.T) { g := MultiGeneratorRandomOrder() st, err := g(nil) assert.Zero(t, st) assert.ErrorIs(t, err, ErrMissingGenerators) st, err = g(nil) assert.Zero(t, st) assert.ErrorIs(t, err, ErrMissingGenerators) }