package nomino import ( "errors" "testing" "github.com/stretchr/testify/assert" ) var errTest = errors.New("sorry") func TestMake(t *testing.T) { genOpt := WithGenerator(func(*Config) (string, error) { return "abc", nil }) testcases := []struct { name string opts []Option exp string }{ {"basic", nil, "abc.txt"}, {"with prefix", []Option{WithPrefix("foo")}, "foo_abc.txt"}, {"with suffix", []Option{WithSuffix("bar")}, "abc_bar.txt"}, {"with original", []Option{WithOriginal("file")}, "abc_file.txt"}, {"without ext", []Option{WithoutExtension()}, "abc"}, {"with ext", []Option{WithExtension("xml")}, "abc.xml"}, {"with sep", []Option{WithOriginal("file"), WithSeparator("---")}, "abc---file.txt"}, { "with all", []Option{ WithPrefix("pre"), WithOriginal("file"), WithSuffix("suff"), WithExtension("svg"), WithSeparator("+"), }, "pre+abc+file+suff.svg", }, } for _, testcase := range testcases { t.Run(testcase.name, func(sub *testing.T) { opts := testcase.opts opts = append(opts, genOpt) conf := NewConfig(opts...) st, err := Make(conf) assert.NoError(t, err) assert.Equal(t, testcase.exp, st) }) } } func TestMakeErr(t *testing.T) { conf := NewConfig(WithGenerator(func(*Config) (string, error) { return "foobar", errTest })) st, err := Make(conf) assert.Zero(t, st) assert.ErrorIs(t, err, errTest) } func TestMakeDoesntChangeConf(t *testing.T) { gen := func(c *Config) (string, error) { c.original = "" return "foo", nil } conf := NewConfig(WithGenerator(gen), WithOriginal("foobar")) st, err := Make(conf) assert.Equal(t, "foobar", conf.original) assert.Equal(t, "foo.txt", st) assert.NoError(t, err) } func TestMakeOptsDoesntChangeConf(t *testing.T) { gen := Incremental() conf := NewConfig(WithGenerator(gen), WithPrefix("pre")) st, err := Make(conf, WithOriginal("foobar")) assert.Equal(t, "", conf.original) assert.Equal(t, "pre_0_foobar.txt", st) assert.NoError(t, err) st, err = Make(conf, WithOriginal("baz")) assert.Equal(t, "", conf.original) assert.Equal(t, "pre_1_baz.txt", st) assert.NoError(t, err) }