Skip to content

Instantly share code, notes, and snippets.

@jimmcslim
Created October 7, 2019 21:16

Revisions

  1. jimmcslim created this gist Oct 7, 2019.
    80 changes: 80 additions & 0 deletions TestStack.Dossier.Parent.Child.cs
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,80 @@
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using Shouldly;
    using TestStack.Dossier;
    using TestStack.Dossier.Lists;
    using Xunit;

    namespace Dossier
    {
    public class BuilderTest
    {
    [Fact]
    public void TestBuilder()
    {
    var placements = PlacementBuilder
    .CreateListOfSize(10)
    .All().WithPlacementReference("sdfsdf")
    .BuildList();

    OrderBuilder b = OrderBuilder.Default;
    Order order = b
    .WithOrderReference("order")
    .WithPlacements(10, pb => pb.WithPlacementReference("sdfsdf"));

    order.OrderReference.ShouldBe("order");
    order.Placements.Count.ShouldBe(10);
    }
    }

    public class Order
    {
    public string OrderReference { get; set; }

    public List<Placement> Placements { get; }

    public Order()
    {
    Placements = new List<Placement>();
    }

    public void AddPlacement(Placement placement)
    {
    Placements.Add(placement);
    }
    }

    public class Placement
    {
    public string PlacementReference { get; set; }
    }

    public class OrderBuilder : TestDataBuilder<Order, OrderBuilder>
    {
    public static OrderBuilder Default => new OrderBuilder();

    public OrderBuilder WithOrderReference(string value) => Set(x => x.OrderReference, value);

    public OrderBuilder WithPlacements(int count, Func<PlacementBuilder, PlacementBuilder> modifier = null)
    => Set(x => x.Placements, PlacementBuilder.CreateListOfSize(count).All().With(modifier).BuildList().ToList());

    protected override Order BuildObject()
    {
    var o = new Order
    {
    OrderReference = Get(x => x.OrderReference)
    };

    o.Placements.AddRange(Get(x => x.Placements));
    return o;
    }
    }

    public class PlacementBuilder : TestDataBuilder<Placement, PlacementBuilder>
    {
    public static PlacementBuilder Default => new PlacementBuilder();

    public virtual PlacementBuilder WithPlacementReference(string value) => Set(x => x.PlacementReference, value);
    }
    }