[InlineData("0 17 * * Sunday", "0 18 * * Sunday", 2021, 4, 4, 17, 20, 603600000)] // GRB starts 17:00. Now is 17:20. Interval should be next week - 20 min: 7d * 24h * 60m * 60s * 1000ms (604,800,000) - 20m * 60s * 1000ms (1,200,000) = 603,600,000
        public void GetStartInterval_Test(string openTime, string closeTime, int year, int month, int day, int hour, int minute, double expected)
        {
            var now = new DateTime(year, month, day, hour, minute, 0);

            var timeService = new Mock <ITimeService>();

            timeService.Setup(x => x.UtcNow)
            .Returns(now);

            var mapsLoader = new Mock <IMapsLoader>();

            mapsLoader.Setup(x => x.LoadMapDefinitions())
            .Returns(new MapDefinitions()
            {
                Maps = new List <MapDefinition>()
                {
                    new MapDefinition()
                    {
                        Id         = 50,
                        CreateType = CreateType.GRB,
                        OpenTime   = openTime,
                        CloseTime  = closeTime
                    }
                }
            });

            var rankingManager = new GuildRankingManager(new Mock <ILogger <IGuildRankingManager> >().Object, mapsLoader.Object, timeService.Object, databaseMock.Object, new GuildHouseConfiguration());

            var interval = rankingManager.GetStartInterval();

            Assert.Equal(expected, interval);
        }
        public void CalculateRanks_Test()
        {
            var mapsLoader = new Mock <IMapsLoader>();

            mapsLoader.Setup(x => x.LoadMapDefinitions()).Returns(new MapDefinitions()
            {
                Maps = new List <MapDefinition>()
            });
            var rankingManager = new GuildRankingManager(new Mock <ILogger <IGuildRankingManager> >().Object, mapsLoader.Object, new Mock <ITimeService>().Object, taskQueuMock.Object);

            rankingManager.AddPoints(1, 10);
            rankingManager.AddPoints(1, 10);

            rankingManager.AddPoints(2, 10);
            rankingManager.AddPoints(2, 5);

            rankingManager.AddPoints(3, 20);
            rankingManager.AddPoints(3, 10);

            int  guild1_Points = 0;
            byte guild1_Rank   = 0;

            int  guild2_Points = 0;
            byte guild2_Rank   = 0;

            int  guild3_Points = 0;
            byte guild3_Rank   = 0;

            rankingManager.OnRanksCalculated += (IEnumerable <(int GuildId, int Points, byte Rank)> results) =>
            {
                foreach (var res in results)
                {
                    if (res.GuildId == 1)
                    {
                        guild1_Points = res.Points;
                        guild1_Rank   = res.Rank;
                        continue;
                    }

                    if (res.GuildId == 2)
                    {
                        guild2_Points = res.Points;
                        guild2_Rank   = res.Rank;
                        continue;
                    }

                    if (res.GuildId == 3)
                    {
                        guild3_Points = res.Points;
                        guild3_Rank   = res.Rank;
                        continue;
                    }
                }
            };

            rankingManager.CalculateRanks();

            Assert.Equal(20, guild1_Points);
            Assert.Equal(15, guild2_Points);
            Assert.Equal(30, guild3_Points);

            Assert.Equal(2, guild1_Rank);
            Assert.Equal(3, guild2_Rank);
            Assert.Equal(1, guild3_Rank);
        }