From a3952113d8c068411c3f8d659fb19b9a4d85b5a6 Mon Sep 17 00:00:00 2001 From: Oleg Date: Sun, 7 Jun 2020 13:45:50 +0300 Subject: [PATCH] feat: added gender tag (#104) Co-authored-by: o.musin Co-authored-by: Iman Tumorang --- faker.go | 3 +++ person.go | 20 ++++++++++++++++++++ person_test.go | 10 ++++++++++ 3 files changed, 33 insertions(+) diff --git a/faker.go b/faker.go index 228dda7..2f27ea5 100644 --- a/faker.go +++ b/faker.go @@ -88,6 +88,7 @@ const ( FirstNameFemaleTag = "first_name_female" LastNameTag = "last_name" NAME = "name" + GENDER = "gender" UnixTimeTag = "unix_time" DATE = "date" TIME = "time" @@ -137,6 +138,7 @@ var defaultTag = map[string]string{ FirstNameFemaleTag: FirstNameFemaleTag, LastNameTag: LastNameTag, NAME: NAME, + GENDER: GENDER, UnixTimeTag: UnixTimeTag, DATE: DATE, TIME: TimeFormat, @@ -185,6 +187,7 @@ var mapperTag = map[string]TaggedFunction{ FirstNameFemaleTag: GetPerson().FirstNameFemale, LastNameTag: GetPerson().LastName, NAME: GetPerson().Name, + GENDER: GetPerson().Gender, UnixTimeTag: GetDateTimer().UnixTime, DATE: GetDateTimer().Date, TIME: GetDateTimer().Time, diff --git a/person.go b/person.go index 5b4b650..26cd0a9 100644 --- a/person.go +++ b/person.go @@ -15,6 +15,7 @@ type Dowser interface { FirstNameFemale(v reflect.Value) (interface{}, error) LastName(v reflect.Value) (interface{}, error) Name(v reflect.Value) (interface{}, error) + Gender(v reflect.Value) (interface{}, error) } var person Dowser @@ -108,6 +109,8 @@ var lastNames = []string{ } var randNameFlag = rand.Intn(100) +var genders = []string{"Male", "Female", "Prefer to skip"} + // GetPerson returns a new Dowser interface of Person struct func GetPerson() Dowser { mu.Lock() @@ -249,3 +252,20 @@ func Name() string { return p.name() }).(string) } + +// Gender returns a random gender +func (p Person) Gender(v reflect.Value) (interface{}, error) { + return p.gender(), nil +} + +func (p Person) gender() string { + return randomElementFromSliceString(genders) +} + +// Gender get fake gender +func Gender() string { + return singleFakeData(GENDER, func() interface{} { + p := Person{} + return p.gender() + }).(string) +} diff --git a/person_test.go b/person_test.go index 8b425a5..52dea9c 100644 --- a/person_test.go +++ b/person_test.go @@ -148,3 +148,13 @@ func TestFakeNameFemale(t *testing.T) { t.Error("Expected from function name string get empty string") } } + +func TestFakeGender(t *testing.T) { + gender, err := GetPerson().Gender(reflect.Value{}) + if err != nil { + t.Error("Expected not error, got err", err) + } + if !slice.Contains(genders, gender.(string)) { + t.Error("Expected value from variable genders in function Gender") + } +}