public void RemoveTribesman_ShouldRecordPlayerLeftInLeavingTribesmates(ITribesman tribesman, Tribe tribe) { SystemClock.SetClock(new DateTime(2000, 1, 1, 1, 1, 1)); tribesman.Player.PlayerId.Returns <uint>(1234); tribe.AddTribesman(tribesman); tribe.RemoveTribesman(1234, false, false); tribe.LeavingTribesmates.Should().OnlyContain(p => p.PlayerId == 1234 && p.TimeLeft == SystemClock.Now); }
public void AddTribesman_ShouldAllowTribesmanWhoLeftToRejoinAfterXHours(ITribesman tribesman, Tribe tribe) { SystemClock.SetClock(new DateTime(2000, 1, 1, 1, 1, 1)); tribesman.Player.PlayerId.Returns((uint)1234); tribe.AddTribesman(tribesman); tribe.RemoveTribesman(1234, false, false); SystemClock.SetClock(SystemClock.Now.AddDays(Tribe.DAYS_BEFORE_REJOIN_ALLOWED)); tribe.AddTribesman(tribesman).Should().Be(Error.Ok); }
public void AddTribesman_ShouldNotAllowTribesmanWhoLeftToRejoinWithinXDays(ITribesman tribesman, Tribe tribe) { SystemClock.SetClock(new DateTime(2000, 1, 1, 1, 1, 1)); tribesman.Player.PlayerId.Returns((uint)1234); tribe.AddTribesman(tribesman); tribe.RemoveTribesman(1234, false, false); SystemClock.SetClock(SystemClock.Now.AddDays(Tribe.DAYS_BEFORE_REJOIN_ALLOWED).AddMinutes(-1)); tribe.AddTribesman(tribesman).Should().Be(Error.TribeCannotRejoinYet); }
public void RemoveTribesman_ShouldSupportMultipleRemoves(ITribesman tribesman1, ITribesman tribesman2, Tribe tribe) { tribesman1.Player.PlayerId.Returns <uint>(1234); tribesman2.Player.PlayerId.Returns <uint>(1235); SystemClock.SetClock(new DateTime(2000, 1, 1, 1, 1, 1)); tribe.AddTribesman(tribesman1); tribe.AddTribesman(tribesman2); tribe.RemoveTribesman(1234, false, false); tribe.RemoveTribesman(1235, false, false); tribe.LeavingTribesmates.Should().HaveCount(2) .And.Contain(p => p.PlayerId == 1234) .And.Contain(p => p.PlayerId == 1235); }
public void RemoveTribesman_ShouldRemoveOlderRecords(ITribesman tribesman1, ITribesman tribesman2, Tribe tribe) { tribesman1.Player.PlayerId.Returns <uint>(1234); tribesman2.Player.PlayerId.Returns <uint>(1235); SystemClock.SetClock(new DateTime(2000, 1, 1, 1, 1, 1)); tribe.AddTribesman(tribesman1); tribe.AddTribesman(tribesman2); tribe.RemoveTribesman(1234, false, false); tribe.LeavingTribesmates.Should().OnlyContain(p => p.PlayerId == 1234); SystemClock.SetClock(SystemClock.Now.AddDays(Tribe.DAYS_BEFORE_REJOIN_ALLOWED).AddSeconds(1)); tribe.RemoveTribesman(1235, false, false); tribe.LeavingTribesmates.Should().OnlyContain(p => p.PlayerId == 1235); }
public Error AddTribesman(ITribesman tribesman, bool ignoreRequirements = false) { if (tribesmen.ContainsKey(tribesman.Player.PlayerId)) { return(Error.TribesmanAlreadyInTribe); } if (!ignoreRequirements) { if (LeavingTribesmates.Any(p => p.PlayerId == tribesman.Player.PlayerId && SystemClock.Now.Subtract(p.TimeLeft).TotalDays < DAYS_BEFORE_REJOIN_ALLOWED)) { return(Error.TribeCannotRejoinYet); } var totalSlots = Level * MEMBERS_PER_LEVEL - LeavingTribesmates.Count(p => SystemClock.Now.Subtract(p.TimeLeft).TotalHours < HOURS_BEFORE_SLOT_REOPENS); if (tribesmen.Count >= totalSlots) { return(Error.TribeFull); } } DbLoaderAdd(tribesman); DefaultMultiObjectLock.ThrowExceptionIfNotLocked(tribesman); dbManager.Save(tribesman); if (tribesman.Player.Session != null) { channel.Subscribe(tribesman.Player.Session, "/TRIBE/" + Id); } TribesmanJoined.Raise(this, new TribesmanEventArgs { Tribe = this, Player = tribesman.Player }); return(Error.Ok); }
public void AddTribesman_ShouldReturnErrorIfTribesmanAlreadyExists(ITribesman tribesman, Tribe tribe) { tribe.AddTribesman(tribesman).Should().Be(Error.Ok); tribe.AddTribesman(tribesman).Should().Be(Error.TribesmanAlreadyInTribe); }
public void RemoveTribesman_ShouldDeleteTribesman([Frozen] IDbManager dbManager, IPlayer player, ITribesman tribesman, Tribe tribe) { player.PlayerId.Returns <uint>(1234); tribesman.Player.Returns(player); tribe.AddTribesman(tribesman); tribe.RemoveTribesman(1234, false, false); player.Tribesman.Should().BeNull(); dbManager.Received(1).Delete(tribesman); tribe.Tribesmen.Should().BeEmpty(); }
public void AddTribesman_ShouldAddPlayerToTribe([Frozen] IDbManager dbManager, IPlayer player, ITribesman tribesman, Tribe tribe) { tribesman.Player.Returns(player); tribe.AddTribesman(tribesman).Should().Be(Error.Ok); tribe.Tribesmen.Should().Equal(tribesman); player.Tribesman.Should().Be(tribesman); dbManager.Received(1).Save(tribesman); }
public bool TryGetTribesman(uint playerId, out ITribesman tribesman) { return(tribesmen.TryGetValue(playerId, out tribesman)); }
public void DbLoaderAdd(ITribesman tribesman) { tribesman.Player.Tribesman = tribesman; tribesmen.Add(tribesman.Player.PlayerId, tribesman); }