From ea250d71b162b7befaa13992f604775cb1ddfb8a Mon Sep 17 00:00:00 2001 From: Steve Atkinson Date: Wed, 6 Feb 2019 17:26:23 +0000 Subject: [PATCH 1/4] Added the documentation. --- README.md | 1 + doc/demographic.md | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) create mode 100644 doc/demographic.md diff --git a/README.md b/README.md index 43b5340..85b361a 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,7 @@ A .NET port of the Ruby [faker](https://github.com/stympy/faker) gem - [Faker.Commerce](doc/commerce.md) - [Faker.Company](doc/company.md) - [Faker.Date](doc/date.md) + - [Faker.Demographic](doc/demographic.md) - [Faker.DragonBall](doc/dragon_ball.md) - [Faker.Educator](doc/educator.md) - [Faker.Fake](doc/fake.md) diff --git a/doc/demographic.md b/doc/demographic.md new file mode 100644 index 0000000..6591cd3 --- /dev/null +++ b/doc/demographic.md @@ -0,0 +1,17 @@ +# Faker.Demographic + +```cs +Faker.Demographic.Race() //=> "Native Hawaiian or Other Pacific Islander" + +Faker.Demographic.EducationalAttainment() //=> "GED or alternative credential" + +Faker.Demographic.Demonym() //=> "Panamanian" + +Faker.Demographic.MaritalStatus() //=> "Widowed" + +Faker.Demographic.Sex() //=> "Female" + +Faker.Demographic.Height() //=> "1.61" + +Faker.Demographic.Height(UnitType.Imperial) //=> "6 ft, 2 in" +``` From 988d64415b277dc3fc559b9c6cde905d849c942d Mon Sep 17 00:00:00 2001 From: Steve Atkinson Date: Wed, 6 Feb 2019 17:26:29 +0000 Subject: [PATCH 2/4] Added the data. --- src/FakerDotNet/Data/DemographicData.cs | 53 +++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 src/FakerDotNet/Data/DemographicData.cs diff --git a/src/FakerDotNet/Data/DemographicData.cs b/src/FakerDotNet/Data/DemographicData.cs new file mode 100644 index 0000000..238cb77 --- /dev/null +++ b/src/FakerDotNet/Data/DemographicData.cs @@ -0,0 +1,53 @@ +using System.Collections.Generic; + +namespace FakerDotNet.Data +{ + internal static class DemographicData + { + public static readonly IEnumerable Races = new[] + { + "American Indian or Alaska Native", + "Asian", + "Black or African American", + "Native Hawaiian or Other Pacific Islander", + "White" + }; + + public static readonly IEnumerable Sexes = new[] + { + "Male", + "Female" + }; + + public static readonly IEnumerable Demonyms = new[] + { + "Afghan","Albanian","Algerian","American","Andorran","Angolan","Argentine","Armenian","Aromanian","Aruban","Australian","Austrian","Azerbaijani","Bahamian","Bahraini","Bangladeshi","Barbadian","Basotho","Basque","Belarusian","Belgian","Belizean","Bermudian","Bissau-Guinean","Boer","Bosniak","Brazilian","Breton","Briton","British Virgin Islander","Bruneian","Bulgarian","Burkinabè","Burundian","Cambodian","Cameroonian","Canadian","Catalan","Cape Verdean","Chadian","Chilean","Chinese","Colombian","Comorian","Congolese","Croatian","Cuban","Cypriot","Czech","Dane","Dominican","Dutch","East Timorese","Ecuadorian","Egyptian","Emirati","English","Eritrean","Estonian","Ethiopian","Falkland Islander","Faroese","Finn","Fijian","Filipino","French","Georgian","German","Ghanaian","Gibraltar","Greek","Grenadian","Guatemalan","French Guianan","Guinean","Guyanese","Haitian","Honduran","Hong Konger","Hungarian","Icelander","I-Kiribati","Indian","Indonesian","Iranian","Iraqi","Irish","Israeli","Italian","Ivoirian","Jamaican","Japanese","Jordanian","Kazakh","Kenyan","Korean","Kosovar","Kurd","Kuwaiti","Kyrgyz","Lao","Latvian","Lebanese","Liberian","Libyan","Liechtensteiner","Lithuanian","Luxembourger","Macanese","Macedonian","Malagasy","Malaysian","Malawian","Maldivian","Malian","Maltese","Manx","Mauritian","Mexican","Moldovan","Moroccan","Mongolian","Montenegrin","Namibian","Nepalese","New Zealander","Nicaraguan","Nigerien","Nigerian","Norwegian","Pakistani","Palauan","Palestinian","Panamanian","Papua New Guinean","Paraguayan","Peruvian","Pole","Portuguese","Puerto Rican","Quebecer","Romanian","Russian","Rwandan","Salvadoran","São Toméan","Saudi","Scottish","Senegalese","Serb","Sierra Leonean","Singaporean","Sindhian","Slovak","Slovene","Somali","Somalilander","South African","Spaniard","Sri Lankan","St Lucian","Sudanese","Surinamese","Swede","Swiss","Syriac","Syrian","Tajik","Taiwanese","Tanzanian","Thai","Tibetan","Tobagonian","Trinidadian","Tunisian","Turk","Tuvaluan","Ugandan","Ukrainian","Uruguayan","Uzbek","Vanuatuan","Venezuelan","Vietnamese","Welsh","Yemeni","Zambian","Zimbabwean" + }; + + public static readonly IEnumerable EducationalAttainments = new[] + { + "No schooling completed", + "Nursery school", + "Kindergarten", + "Grade 1 though 11", + "12th grade - No Diploma", + "Regular high school diploma", + "GED or alternative credential", + "Some college", + "Associate's degree", + "Bachelor's degree", + "Master's degree", + "Professional degree", + "Doctorate degree" + }; + + public static readonly IEnumerable MaritalStatuses = new[] + { + "Married", + "Widowed", + "Divorced", + "Separated", + "Never married" + }; + } +} From 0a96500a64e28cd9878dd7c1c60d554b05217d60 Mon Sep 17 00:00:00 2001 From: Steve Atkinson Date: Wed, 6 Feb 2019 17:26:47 +0000 Subject: [PATCH 3/4] Implemented the Demographic faker. --- src/FakerDotNet/Fakers/DemographicFaker.cs | 63 ++++++++++++++ src/FakerDotNet/UnitType.cs | 8 ++ .../Fakers/DemographicFakerTests.cs | 85 +++++++++++++++++++ 3 files changed, 156 insertions(+) create mode 100644 src/FakerDotNet/Fakers/DemographicFaker.cs create mode 100644 src/FakerDotNet/UnitType.cs create mode 100644 tests/FakerDotNet.Tests/Fakers/DemographicFakerTests.cs diff --git a/src/FakerDotNet/Fakers/DemographicFaker.cs b/src/FakerDotNet/Fakers/DemographicFaker.cs new file mode 100644 index 0000000..c43ab57 --- /dev/null +++ b/src/FakerDotNet/Fakers/DemographicFaker.cs @@ -0,0 +1,63 @@ +using System; +using FakerDotNet.Data; + +namespace FakerDotNet.Fakers +{ + public interface IDemographicFaker + { + string Race(); + string EducationalAttainment(); + string Demonym(); + string MaritalStatus(); + string Sex(); + string Height(UnitType unitType = UnitType.Metric); + } + + internal class DemographicFaker : IDemographicFaker + { + private readonly IFakerContainer _fakerContainer; + + public DemographicFaker(IFakerContainer fakerContainer) + { + _fakerContainer = fakerContainer; + } + + public string Race() + { + return _fakerContainer.Random.Element(DemographicData.Races); + } + + public string EducationalAttainment() + { + return _fakerContainer.Random.Element(DemographicData.EducationalAttainments); + } + + public string Demonym() + { + return _fakerContainer.Random.Element(DemographicData.Demonyms); + } + + public string MaritalStatus() + { + return _fakerContainer.Random.Element(DemographicData.MaritalStatuses); + } + + public string Sex() + { + return _fakerContainer.Random.Element(DemographicData.Sexes); + } + + public string Height(UnitType unitType = UnitType.Metric) + { + switch (unitType) + { + case UnitType.Imperial: + var inches = _fakerContainer.Number.Between(57, 86); + return $"{inches / 12:#} ft, {inches % 12} in"; + + default: + return _fakerContainer.Number.Between(1.45, 2.13).ToString("#.##"); + } + } + } +} diff --git a/src/FakerDotNet/UnitType.cs b/src/FakerDotNet/UnitType.cs new file mode 100644 index 0000000..7471700 --- /dev/null +++ b/src/FakerDotNet/UnitType.cs @@ -0,0 +1,8 @@ +namespace FakerDotNet +{ + public enum UnitType + { + Metric, + Imperial + } +} diff --git a/tests/FakerDotNet.Tests/Fakers/DemographicFakerTests.cs b/tests/FakerDotNet.Tests/Fakers/DemographicFakerTests.cs new file mode 100644 index 0000000..4eab39a --- /dev/null +++ b/tests/FakerDotNet.Tests/Fakers/DemographicFakerTests.cs @@ -0,0 +1,85 @@ +using FakeItEasy; +using FakerDotNet.Data; +using FakerDotNet.Fakers; +using NUnit.Framework; + +namespace FakerDotNet.Tests.Fakers +{ + [TestFixture] + [Parallelizable] + public class DemographicFakerTests + { + [SetUp] + public void SetUp() + { + _fakerContainer = A.Fake(); + _demographicFaker = new DemographicFaker(_fakerContainer); + } + + private IFakerContainer _fakerContainer; + private IDemographicFaker _demographicFaker; + + [Test] + public void Race_returns_a_race() + { + A.CallTo(() => _fakerContainer.Random.Element(DemographicData.Races)) + .Returns("Native Hawaiian or Other Pacific Islander"); + + Assert.AreEqual("Native Hawaiian or Other Pacific Islander", _demographicFaker.Race()); + } + + [Test] + public void EducationalAttainment_returns_an_educational_attainment() + { + A.CallTo(() => _fakerContainer.Random.Element(DemographicData.EducationalAttainments)) + .Returns("GED or alternative credential"); + + Assert.AreEqual("GED or alternative credential", _demographicFaker.EducationalAttainment()); + } + + [Test] + public void Demonym_returns_a_demonym() + { + A.CallTo(() => _fakerContainer.Random.Element(DemographicData.Demonyms)) + .Returns("Panamanian"); + + Assert.AreEqual("Panamanian", _demographicFaker.Demonym()); + } + + [Test] + public void MaritalStatus_returns_a_marital_status() + { + A.CallTo(() => _fakerContainer.Random.Element(DemographicData.MaritalStatuses)) + .Returns("Widowed"); + + Assert.AreEqual("Widowed", _demographicFaker.MaritalStatus()); + } + + [Test] + public void Sex_returns_a_sex() + { + A.CallTo(() => _fakerContainer.Random.Element(DemographicData.Sexes)) + .Returns("Female"); + + Assert.AreEqual("Female", _demographicFaker.Sex()); + } + + [Test] + public void Height_returns_a_height_in_metric_units() + { + A.CallTo(() => _fakerContainer.Number.Between(1.45, 2.13)) + .Returns(1.613243); + + Assert.AreEqual("1.61", _demographicFaker.Height()); + } + + [Test] + public void Height_returns_a_height_in_imperial_units_when_specified() + { + A.CallTo(() => _fakerContainer.Number.Between(57, 86)) + .Returns(74); + + Assert.AreEqual("6 ft, 2 in", _demographicFaker.Height(UnitType.Imperial)); + } + } +} From 65b3e30132451da9b8ce298e5ed878907df64621 Mon Sep 17 00:00:00 2001 From: Steve Atkinson Date: Wed, 6 Feb 2019 17:26:58 +0000 Subject: [PATCH 4/4] Added the DemographicFaker to the main faker classes. --- src/FakerDotNet/Faker.cs | 1 + src/FakerDotNet/FakerContainer.cs | 3 +++ tests/FakerDotNet.Tests/FakerContainerTests.cs | 6 ++++++ tests/FakerDotNet.Tests/FakerTests.cs | 6 ++++++ 4 files changed, 16 insertions(+) diff --git a/src/FakerDotNet/Faker.cs b/src/FakerDotNet/Faker.cs index 85697ac..f893558 100644 --- a/src/FakerDotNet/Faker.cs +++ b/src/FakerDotNet/Faker.cs @@ -21,6 +21,7 @@ public static class Faker public static ICommerceFaker Commerce { get; } = Container.Commerce; public static ICompanyFaker Company { get; } = Container.Company; public static IDateFaker Date { get; } = Container.Date; + public static IDemographicFaker Demographic { get; } = Container.Demographic; public static IDragonBallFaker DragonBall { get; } = Container.DragonBall; public static IEducatorFaker Educator { get; } = Container.Educator; public static IFakeFaker Fake { get; } = Container.Fake; diff --git a/src/FakerDotNet/FakerContainer.cs b/src/FakerDotNet/FakerContainer.cs index 8884c37..ca27dd5 100644 --- a/src/FakerDotNet/FakerContainer.cs +++ b/src/FakerDotNet/FakerContainer.cs @@ -19,6 +19,7 @@ internal interface IFakerContainer ICommerceFaker Commerce { get; } ICompanyFaker Company { get; } IDateFaker Date { get; } + IDemographicFaker Demographic { get; } IDragonBallFaker DragonBall { get; } IEducatorFaker Educator { get; } IFakeFaker Fake { get; } @@ -76,6 +77,7 @@ public FakerContainer() Commerce = new CommerceFaker(this); Company = new CompanyFaker(this); Date = new DateFaker(); + Demographic = new DemographicFaker(this); DragonBall = new DragonBallFaker(this); Educator = new EducatorFaker(this); Fake = new FakeFaker(this); @@ -129,6 +131,7 @@ public FakerContainer() public ICommerceFaker Commerce { get; } public ICompanyFaker Company { get; } public IDateFaker Date { get; } + public IDemographicFaker Demographic { get; } public IDragonBallFaker DragonBall { get; } public IEducatorFaker Educator { get; } public IFakeFaker Fake { get; } diff --git a/tests/FakerDotNet.Tests/FakerContainerTests.cs b/tests/FakerDotNet.Tests/FakerContainerTests.cs index 89d5c14..b0b9ae7 100644 --- a/tests/FakerDotNet.Tests/FakerContainerTests.cs +++ b/tests/FakerDotNet.Tests/FakerContainerTests.cs @@ -105,6 +105,12 @@ public void Date_returns_IDateFaker() Assert.IsInstanceOf(_fakerContainer.Date); } + [Test] + public void Demographic_returns_IDemographicFaker() + { + Assert.IsInstanceOf(_fakerContainer.Demographic); + } + [Test] public void DragonBall_returns_IDragonBallFaker() { diff --git a/tests/FakerDotNet.Tests/FakerTests.cs b/tests/FakerDotNet.Tests/FakerTests.cs index 5d0c1c1..3c8618b 100644 --- a/tests/FakerDotNet.Tests/FakerTests.cs +++ b/tests/FakerDotNet.Tests/FakerTests.cs @@ -97,6 +97,12 @@ public void Date_returns_IDateFaker() Assert.IsInstanceOf(Faker.Date); } + [Test] + public void Demographic_returns_IDemographicFaker() + { + Assert.IsInstanceOf(Faker.Demographic); + } + [Test] public void DragonBall_returns_IDragonBallFaker() {