public void ManualDnf_WithRiderOnTrack_ShouldEndLap() { Beacon martijnBeacon = new Beacon(new byte[] { 0, 0, 0, 0, 0, 1 }, 0); Rider martijn = new Rider("Martijn", martijnBeacon); subject.AddRider(martijn); //rider enters start box startId.EmitIdEvent(martijn, new DateTime(2000, 1, 1, 1, 1, 1)); //Martijn triggers timing gate timer.EmitTriggerEvent(100, "Timer", 0, new DateTime(2000, 1, 1, 1, 2, 1)); subject.AddEvent(new ManualDNFEventArgs(DateTime.Now, martijn.Name, "staff")); source.Cancel(); race.Wait(); Assert.AreEqual(0, endId.KnownRiders.Count); Assert.AreEqual(1, subject.Laps.Count); Lap lap = subject.Laps[0]; Assert.IsTrue(lap.End is ManualDNFEvent); Assert.AreEqual(-1, lap.GetLapTime()); Assert.IsFalse(lap.Disqualified); }
public void Penalty_WithRiderOnTrack_ShouldApplyOnFinish() { Beacon martijnBeacon = new Beacon(new byte[] { 0, 0, 0, 0, 0, 1 }, 0); Rider martijn = new Rider("Martijn", martijnBeacon); subject.AddRider(martijn); //rider enters start box startId.EmitIdEvent(martijn, new DateTime(2000, 1, 1, 1, 1, 1)); //Martijn triggers timing gate timer.EmitTriggerEvent(100, "Timer", 0, new DateTime(2000, 1, 1, 1, 2, 1)); subject.AddEvent(new PenaltyEventArgs(DateTime.Now, martijn.Name, "staff", "testEvent", 1)); subject.AddEvent(new PenaltyEventArgs(DateTime.Now, martijn.Name, "staff", "testEvent", 2)); //finish the lap endId.EmitIdEvent(martijn, new DateTime(2000, 1, 1, 1, 2, 1)); timer.EmitTriggerEvent(200, "Timer", 1, new DateTime(2000, 1, 1, 1, 2, 1)); endId.EmitExitEvent(martijn, new DateTime(2000, 1, 1, 1, 2, 1)); //do another lap, this one should not have any penalties MakeStartEvents(martijn, DateTime.Now, startId, timer); MakeEndEvents(martijn, DateTime.Now, endId, timer); source.Cancel(); race.Wait(); Assert.AreEqual(0, endId.KnownRiders.Count); Assert.AreEqual(2, subject.Laps.Count); Lap penaltyLap = subject.Laps[0]; Assert.IsTrue(penaltyLap.End is FinishedEvent); //100 micros lap time, 3 second penalty Assert.AreEqual(3000100, penaltyLap.GetLapTime()); Assert.IsFalse(penaltyLap.Disqualified); Lap normalLap = subject.Laps[1]; Assert.IsTrue(normalLap.End is FinishedEvent); //Lap from MakeEvent methods has nonsense lap time Assert.AreEqual(0, normalLap.GetLapTime()); Assert.IsFalse(normalLap.Disqualified); }
public async Task NewTime(Lap lap) { Guid startId = GetStartGuid(lap); onTrack.Remove(startId); if (lap.Disqualified) { await http.GetAsync($"{baseUrl}/penalty?auth={authToken}&uniqueId={GetId(startId)}$dsq=1"); await http.GetAsync($"{baseUrl}/end_ride_with_result?auth={authToken}&tag={lap.End.Rider.Name}&uniqueId={GetId(startId)}"); } else if (lap.End is ManualDNFEvent || lap.End is UnitDNFEvent) { HttpResponseMessage result = await http.GetAsync($"{baseUrl}/penalty?auth={authToken}&uniqueId={GetId(startId)}&dnf=1"); Console.WriteLine($"Gymkhana response (DNF): {result.StatusCode}, {await result.Content.ReadAsStringAsync()}"); result = await http.GetAsync($"{baseUrl}/end_ride_with_result?auth={authToken}&tag={lap.End.Rider.Name}&uniqueId={GetId(startId)}"); Console.WriteLine($"Gymkhana response (END): {result.StatusCode}, {await result.Content.ReadAsStringAsync()}"); } else { HttpResponseMessage result = await http.GetAsync($"{baseUrl}/new_time?auth={authToken}&tag={lap.Rider.Name}&uniqueId={GetId(startId)}&time={lap.GetLapTime(false)/1000}"); Console.WriteLine($"Gymkhana response (NEW): {result.StatusCode}, {await result.Content.ReadAsStringAsync()}"); int penalty = lap.Penalties.Sum(p => p.Seconds); if (penalty > 0) { result = await http.GetAsync($"{baseUrl}/penalty?auth={authToken}&uniqueId={GetId(startId)}&time={penalty}"); Console.WriteLine($"Gymkhana response (PENALTY): {result.StatusCode}, {await result.Content.ReadAsStringAsync()}"); } } }