public void Lock_CityIdTribe_WhenCityIsNotFound_ShouldReturnEmptyLockAndNullCityAndNullTribe( [Frozen] IGameObjectLocator locator, [Frozen] ICallbackLock callbackLock, ICity city, DefaultLocker locker) { ICity outCity; locator.TryGetObjects(1, out outCity).Returns(false); ICity lockedCity; ITribe lockedTribe; var multiObjLock = locker.Lock(1, out lockedCity, out lockedTribe); lockedTribe.Should().BeNull(); ((object)lockedCity).Should().BeNull(); multiObjLock.Received(1) .Lock(Arg.Is <ILockable[]>(itemsLocked => !itemsLocked.Any())); }
public void Lock_CityIdTribe_WhenPlayerIsInTribe_ShouldReturnLockedCityAndTribe( [Frozen] IGameObjectLocator locator, [Frozen] ICallbackLock callbackLock, ICity city, DefaultLocker locker) { ILockable[] itemsLocked = {}; var callbackLockResult = Substitute.For <IMultiObjectLock>(); callbackLock.Lock(Arg.Do <CallbackLock.CallbackLockHandler>(callbackLockHandler => { itemsLocked = callbackLockHandler(new object[] { city }); }), Arg.Is <object[]>(lockParams => lockParams.SequenceEqual(new[] { city })), Arg.Is <ILockable[]>(baseLocks => baseLocks.SequenceEqual(new[] { city })) ).Returns(callbackLockResult); ICity outCity; locator.TryGetObjects(1, out outCity).Returns(call => { call[1] = city; return(true); }); var tribe = city.Owner.Tribesman.Tribe; city.Owner.IsInTribe.Returns(true); ICity lockedCity; ITribe lockedTribe; var multiObjLock = locker.Lock(1, out lockedCity, out lockedTribe); multiObjLock.Should().Be(callbackLockResult); lockedTribe.Should().Be(tribe); ((object)lockedCity).Should().Be(city); itemsLocked.Should().Equal(tribe); }