public ResourceAmountSlot AddSlot()
        {
            var slot = new ResourceAmountSlot();

            _collection.Add(slot);
            return(slot);
        }
        public void Add_ValidItem_ItemAdded_And_EventRaised()
        {
            _collection.CollectionChanged += (object sender, NotifyCollectionChangedEventArgs e) => Assert.AreEqual(NotifyCollectionChangedAction.Add, e.Action);

            var slot = new ResourceAmountSlot(3000000, 1000);

            Assert.AreEqual(0, _collection.Count);
            _collection.Add(slot);
            Assert.AreEqual(1, _collection.Count);
        }
        private async Task <LevelSave> InternalNewLevelAsync(long userId, string userToken, CancellationToken cancellationToken)
        {
            var save = Server.Factories.GetFactory <LevelSaveFactory>().Create();

            save.DateCreated = DateTime.UtcNow;
            save.UserId      = userId;
            save.Token       = userToken;
            // Prevent client from crashing.
            // Because a name == null, will cause the client to crash.
            save.Name     = GetRandomName();
            save.Gems     = _startingGems;
            save.FreeGems = _startingGems;
            // Prevent client from crashing.
            // Because a level less than 1 will cause the client to crash.
            save.ExpLevels = 1;
            save.LevelJson = _startingVillage;

            // Skip the initial tutorials.
            var tutorialProgress = new TutorialProgressSlot[10];

            for (int i = 0; i < 10; i++)
            {
                tutorialProgress[i] = new TutorialProgressSlot(21000000 + i);
            }

            var resourceAmount = new ResourceAmountSlot[]
            {
                new ResourceAmountSlot(_goldId, _startingGold),
                new ResourceAmountSlot(_elixirId, _startingElixir),
                new ResourceAmountSlot(_gemsId, _startingGems)
            };

            save.TutorialProgress = tutorialProgress;
            save.ResourcesAmount  = resourceAmount;

            // Save LevelSave to set the ID using the AutoId stuff.
            await InternalSaveLevelAsync(save, true, cancellationToken);

            Interlocked.Increment(ref _levelCount);

            return(save);
        }