public class TeamMemberSpecs
public void TestSetup() {
AuditEngine.Time.SystemTime.ResetDateTime();
public void GetTeamMemberInfoAsync_UponCompletion_RaisesProgressThenCompleteEvent() {
var blf = Substitute.For<IBusinessLogicFactory>();
var serviceCardNumber = "12345";
var dateWorked = new DateTime(2014, 10, 24);
var tm = new TeamMember();
var progressEventOrdinal = 0;
var completionEventOrdinal = 0;
using(var sync = new AutoResetEvent(false)){
tm.ReportingProgress += (o, e) => progressEventOrdinal = ++eventOrder;
tm.Complete += (o, e) => {
completionEventOrdinal = ++eventOrder;
tm.GetTeamMemberInfoAsync(serviceCardNumber, dateWorked, blf);
if (!sync.WaitOne(10000))
throw new Exception("The complete event never fired.");
Assert.AreEqual(1,progressEventOrdinal,"Progress event order was incorrect.");
Assert.AreEqual(2,completionEventOrdinal,"Completion event order was incorrect.");