Skip to content

Instantly share code, notes, and snippets.

@jimmcslim
Created October 7, 2019 21:16
Show Gist options
  • Save jimmcslim/8ffaa843e433099711d6ffe51b5fec6e to your computer and use it in GitHub Desktop.
Save jimmcslim/8ffaa843e433099711d6ffe51b5fec6e to your computer and use it in GitHub Desktop.
Demonstrating constructing parent/child relationships via TestStack Dossier.
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);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment