Skip to content

Commit

Permalink
Merge 6efe95a into 61cf2eb
Browse files Browse the repository at this point in the history
  • Loading branch information
mrstebo committed Oct 10, 2018
2 parents 61cf2eb + 6efe95a commit dbab2fc
Show file tree
Hide file tree
Showing 10 changed files with 386 additions and 2 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ Contents
- [Faker.App](doc/app.md)
- [Faker.Book](doc/book.md)
- [Faker.Boolean](doc/boolean.md)
- [Faker.Date](doc/date.md)
- [Faker.Fake](doc/fake.md)
- [Faker.Name](doc/name.md)
- [Faker.Number](doc/number.md)
Expand Down
2 changes: 1 addition & 1 deletion doc/book.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Faker::Book
# Faker.Book

```cs
Faker.Book.Title() //=> "The Odd Sister"
Expand Down
2 changes: 1 addition & 1 deletion doc/boolean.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Faker::Boolean
# Faker.Boolean

```cs
Faker.Boolean.Boolean() //=> true
Expand Down
20 changes: 20 additions & 0 deletions doc/date.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Faker.Date

```cs
// Random date between dates
Faker.Date.Between(new DateTime(2014, 9, 1), new DateTime(2014, 9, 30)) //=> "Wed, 24 Sep 2014"
Faker.Date.Between("2014-09-01", "2014-09-30") //=> "Wed, 24 Sep 2014"
// Random date between dates except for certain date
Faker.Date.BetweenExcept(new DateTime(2014, 9, 1), new DateTime(2015, 9, 1), DateTime.UtcNow) //=> "Wed, 24 Sep 2014"
Faker.Date.BetweenExcept("2014-01-01", "2015-01-30")

// Random date in the future (up to maximum of N days)
Faker.Date.Forward(23) //=> "Fri, 03 Oct 2014"
// Random date in the past (up to maximum of N days)
Faker.Date.Backward(14) //=> "Fri, 19 Sep 2014"
// Random birthday date (maximum age between 18 and 65)
Faker.Date.Birthday(18, 65) //=> "Fri, 28 Mar 1986"
```
1 change: 1 addition & 0 deletions src/FakerDotNet/Faker.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ public static class Faker
public static IAppFaker App { get; } = Container.App;
public static IBookFaker Book { get; } = Container.Book;
public static IBooleanFaker Boolean { get; } = Container.Boolean;
public static IDateFaker Date { get; } = Container.Date;
public static IFakeFaker Fake { get; } = Container.Fake;
public static INameFaker Name { get; } = Container.Name;
public static INumberFaker Number { get; } = Container.Number;
Expand Down
3 changes: 3 additions & 0 deletions src/FakerDotNet/FakerContainer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ internal interface IFakerContainer
IAppFaker App { get; }
IBookFaker Book { get; }
IBooleanFaker Boolean { get; }
IDateFaker Date { get; }
IFakeFaker Fake { get; }
INameFaker Name { get; }
INumberFaker Number { get; }
Expand All @@ -20,6 +21,7 @@ public FakerContainer()
App = new AppFaker(this);
Book = new BookFaker(this);
Boolean = new BooleanFaker();
Date = new DateFaker();
Fake = new FakeFaker(this);
Name = new NameFaker(this);
Number = new NumberFaker();
Expand All @@ -29,6 +31,7 @@ public FakerContainer()
public IAppFaker App { get; }
public IBookFaker Book { get; }
public IBooleanFaker Boolean { get; }
public IDateFaker Date { get; }
public IFakeFaker Fake { get; }
public INameFaker Name { get; }
public INumberFaker Number { get; }
Expand Down
86 changes: 86 additions & 0 deletions src/FakerDotNet/Fakers/DateFaker.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
using System;
using FakerDotNet.Wrappers;

namespace FakerDotNet.Fakers
{
public interface IDateFaker
{
DateTime Between(string from, string to);
DateTime Between(DateTime from, DateTime to);
DateTime BetweenExcept(string from, string to, string except);
DateTime BetweenExcept(DateTime from, DateTime to, DateTime except);
DateTime Forward(int days = 365);
DateTime Backward(int days = 365);
DateTime Birthday(int minAge = 18, int maxAge = 65);
}

internal class DateFaker : IDateFaker
{
private readonly IRandomWrapper _randomWrapper;

public DateFaker()
: this(new RandomWrapper())
{
}

internal DateFaker(IRandomWrapper randomWrapper)
{
_randomWrapper = randomWrapper;
}

public DateTime Between(string from, string to)
{
return Between(DateTime.Parse(from), DateTime.Parse(to));
}

public DateTime Between(DateTime from, DateTime to)
{
return from.AddDays(_randomWrapper.Next(0, to.Subtract(from).Days));
}

public DateTime BetweenExcept(string from, string to, string except)
{
return BetweenExcept(DateTime.Parse(from), DateTime.Parse(to), DateTime.Parse(except));
}

public DateTime BetweenExcept(DateTime from, DateTime to, DateTime except)
{
if (from.Equals(to) && to.Equals(except))
throw new ArgumentException("From date, to date and excepted date must not be the same");

DateTime result;

do
{
result = from.Date.AddDays(_randomWrapper.Next(0, to.Subtract(from).Days));
} while (result.Equals(except.Date));

return result;
}

public DateTime Forward(int days = 365)
{
var from = DateTime.UtcNow.Date.AddDays(1);
var to = DateTime.UtcNow.Date.AddDays(days);

return Between(from, to);
}

public DateTime Backward(int days = 365)
{
var from = DateTime.UtcNow.Date.AddDays(-days);
var to = DateTime.UtcNow.Date.AddDays(-1);

return Between(from, to);
}

public DateTime Birthday(int minAge = 18, int maxAge = 65)
{
var now = DateTime.UtcNow;
var from = new DateTime(now.Year - maxAge);
var to = new DateTime(now.Year - minAge);

return Between(from, to);
}
}
}
6 changes: 6 additions & 0 deletions tests/FakerDotNet.Tests/FakerContainerTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,12 @@ public void Boolean_returns_IBooleanFaker()
{
Assert.IsInstanceOf<IBooleanFaker>(_fakerContainer.Boolean);
}

[Test]
public void Date_returns_IDateFaker()
{
Assert.IsInstanceOf<IDateFaker>(_fakerContainer.Date);
}

[Test]
public void Fake_returns_IFakeFaker()
Expand Down
6 changes: 6 additions & 0 deletions tests/FakerDotNet.Tests/FakerTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,12 @@ public void Boolean_returns_IBooleanFaker()
{
Assert.IsInstanceOf<IBooleanFaker>(Faker.Boolean);
}

[Test]
public void Date_returns_IDateFaker()
{
Assert.IsInstanceOf<IDateFaker>(Faker.Date);
}

[Test]
public void Fake_returns_IFakeFaker()
Expand Down

0 comments on commit dbab2fc

Please sign in to comment.