public async Task ReturnsDailyLeaderboards()
            {
                // Arrange
                var today = DateTime.UtcNow.Date;

                using (var context = new NecroDancerContext(necroDancerContextOptions))
                {
                    context.DailyLeaderboards.AddRange(new[]
                    {
                        new DailyLeaderboard {
                            Date = today.AddDays(-1)
                        },
                    });
                    context.Products.AddRange(new[]
                    {
                        new Product(0, "classic", "Classic"),
                    });

                    context.SaveChanges();
                }
                mockSteamClientApiClient
                .Setup(s => s.FindLeaderboardAsync(appId, It.IsAny <string>(), cancellationToken))
                .ReturnsAsync(Mock.Of <IFindOrCreateLeaderboardCallback>());

                // Act
                var dailyLeaderboards2 = await worker.GetDailyLeaderboardsAsync(limit, cancellationToken);

                // Assert
                Assert.Equal(2, dailyLeaderboards2.Count());
            }
            public async Task ReturnsStaleDailyLeaderboards()
            {
                // Arrange
                var today = new DateTime(2017, 9, 13);

                using (var db = new NecroDancerContext(necroDancerContextOptions))
                {
                    db.DailyLeaderboards.AddRange(new[]
                    {
                        new DailyLeaderboard
                        {
                            LeaderboardId = 1,
                            Date          = today.AddDays(-1),
                        },
                        new DailyLeaderboard
                        {
                            LeaderboardId = 2,
                            Date          = today,
                        },
                    });

                    db.SaveChanges();
                }

                // Act
                var staleDailyLeaderboards = await worker.GetStaleDailyLeaderboardsAsync(today, limit, cancellationToken);

                // Assert
                Assert.IsAssignableFrom <IEnumerable <DailyLeaderboard> >(staleDailyLeaderboards);
                foreach (var staleDailyLeaderboard in staleDailyLeaderboards)
                {
                    Assert.NotEqual(today, staleDailyLeaderboard.Date);
                }
            }
            public async Task CurrentDailyLeaderboardsDoNotExist_GetsAndReturnsCurrentDailyLeaderboards()
            {
                // Arrange
                var today = new DateTime(2017, 9, 13);

                using (var db = new NecroDancerContext(necroDancerContextOptions))
                {
                    db.Products.AddRange(new[]
                    {
                        new Product(0, "classic", "Classic"),
                        new Product(1, "amplified", "Amplified"),
                    });

                    db.SaveChanges();
                }
                mockSteamClientApiClient
                .Setup(s => s.FindLeaderboardAsync(appId, It.IsAny <string>(), cancellationToken))
                .ReturnsAsync(Mock.Of <IFindOrCreateLeaderboardCallback>());

                // Act
                var leaderboards = await worker.GetCurrentDailyLeaderboardsAsync(today, cancellationToken);

                // Assert
                var leaderboard = leaderboards.First();

                Assert.Equal(today, leaderboard.Date);
                Assert.Equal(0, leaderboard.ProductId);
                mockSteamClientApiClient.Verify(s => s.FindLeaderboardAsync(appId, It.IsAny <string>(), cancellationToken), Times.Exactly(2));
            }
        private static string GetLeaderboardsConnectionString(IContext c)
        {
            var settings = c.Kernel.Get <IDailyLeaderboardsSettings>();

            // If Steam Client API credentials are not set, use the dev database as test data will be returned from Steam Client API.
            if (!SteamClientApiCredentialsAreSet(c))
            {
                return(StorageHelper.GetLocalDbConnectionString(DevDatabaseName));
            }

            // Get the connection string from settings if it's available; otherwise, use the default.
            var connectionString = settings.LeaderboardsConnectionString?.Decrypt() ??
                                   StorageHelper.GetLocalDbConnectionString("NecroDancer");

            // Check if any players are in the database. If there are none (i.e. toofz Leaderboards Service hasn't been run),
            // use the dev database instead as it will be seeded with test data.
            var options = new DbContextOptionsBuilder <NecroDancerContext>()
                          .UseSqlServer(connectionString)
                          .Options;

            using (var context = new NecroDancerContext(options))
            {
                InitializeNecroDancerContext(context);
            }

            return(connectionString);
        }
            public async Task CurrentDailyLeaderboardsExist_ReturnsExistingCurrentDailyLeaderboards()
            {
                // Arrange
                var today   = new DateTime(2017, 9, 13);
                var current = new DailyLeaderboard
                {
                    Date      = today,
                    ProductId = 0,
                    Product   = new Product(0, "classic", "Classic"),
                };

                using (var db = new NecroDancerContext(necroDancerContextOptions))
                {
                    db.DailyLeaderboards.Add(current);

                    db.SaveChanges();
                }

                // Act
                var leaderboards = await worker.GetCurrentDailyLeaderboardsAsync(today, cancellationToken);

                // Assert
                var leaderboard = leaderboards.First();

                Assert.Equal(today, leaderboard.Date);
                Assert.Equal("classic", leaderboard.Product.Name);
                mockSteamClientApiClient.Verify(s => s.FindLeaderboardAsync(appId, It.IsAny <string>(), cancellationToken), Times.Never);
            }
        public NecroDancerContextTests()
        {
            var options = new DbContextOptionsBuilder <NecroDancerContext>()
                          .UseInMemoryDatabase(databaseName: Constants.NecroDancerContextName)
                          .Options;

            db = new NecroDancerContext(options);
        }
Example #7
0
            public void ReturnsPlayersController()
            {
                // Arrange
                var db = new NecroDancerContext();

                // Act
                var controller = new PlayersController(db);

                // Assert
                Assert.IsAssignableFrom <PlayersController>(controller);
            }
Example #8
0
        public NecroDancerIntegrationTestsBase()
        {
            var connectionString = StorageHelper.GetDatabaseConnectionString(Constants.NecroDancerContextName);
            var options          = new DbContextOptionsBuilder <NecroDancerContext>()
                                   .UseSqlServer(connectionString)
                                   .Options;

            db = new NecroDancerContext(options);

            db.Database.EnsureDeleted();
            db.Database.Migrate();
        }
            public void ReturnsNecroDancerContext()
            {
                // Arrange
                var options = new DbContextOptionsBuilder <NecroDancerContext>()
                              .UseInMemoryDatabase(databaseName: Constants.NecroDancerContextName)
                              .Options;

                // Act
                var db = new NecroDancerContext(options);

                // Assert
                Assert.IsAssignableFrom <NecroDancerContext>(db);
            }
        public IntegrationTestsBase()
        {
            var connectionString = StorageHelper.GetDatabaseConnectionString(Constants.LeaderboardsStoreClientName);
            var options          = new DbContextOptionsBuilder <NecroDancerContext>()
                                   .UseSqlServer(connectionString)
                                   .Options;

            db = new NecroDancerContext(options);

            db.Database.EnsureDeleted();
            db.Database.Migrate();
            db.EnsureSeedData();

            storeClient = new LeaderboardsStoreClient(connectionString);
        }
Example #11
0
        private static NecroDancerContext InitializeContext()
        {
            var connectionString = StorageHelper.GetDatabaseConnectionString(Constants.NecroDancerContextName);
            var options          = new DbContextOptionsBuilder <NecroDancerContext>()
                                   .UseSqlServer(connectionString)
                                   .Options;

            using (var context = new NecroDancerContext(options))
            {
                context.Database.EnsureDeleted();
                context.Database.Migrate();
                context.EnsureSeedData();
            }

            return(new NecroDancerContext(options));
        }
Example #12
0
        public static void EnsureSeedData(this NecroDancerContext context)
        {
            context.Items.AddRange(Util.ReadJsonArray <Data.Item>(NecroDancerResources.Items));
            context.Enemies.AddRange(Util.ReadJsonArray <Data.Enemy>(NecroDancerResources.Enemies));

            context.Products.AddRange(Util.ReadJsonArray <Product>(LeaderboardsResources.Products));
            context.Modes.AddRange(Util.ReadJsonArray <Mode>(LeaderboardsResources.Modes));
            context.Runs.AddRange(Util.ReadJsonArray <Run>(LeaderboardsResources.Runs));
            context.Characters.AddRange(Util.ReadJsonArray <Character>(LeaderboardsResources.Characters));
            context.Leaderboards.AddRange(Util.ReadJsonArray <Leaderboard>(LeaderboardsResources.Leaderboards));
            context.Entries.AddRange(Util.ReadJsonArray <Entry>(LeaderboardsResources.Entries));
            context.DailyLeaderboards.AddRange(Util.ReadJsonArray <DailyLeaderboard>(LeaderboardsResources.DailyLeaderboards));
            context.DailyEntries.AddRange(Util.ReadJsonArray <DailyEntry>(LeaderboardsResources.DailyEntries));
            context.Players.AddRange(Util.ReadJsonArray <Player>(LeaderboardsResources.Players));
            context.Replays.AddRange(Util.ReadJsonArray <Replay>(LeaderboardsResources.Replays));

            context.SaveChanges();
        }
Example #13
0
        public IntegrationTestsBase()
        {
            settings = Settings.Default;
            // Should only loop once
            foreach (SettingsProvider provider in settings.Providers)
            {
                var ssp = (ServiceSettingsProvider)provider;
                ssp.GetSettingsReader = () => File.OpenText(settingsFileName);
                ssp.GetSettingsWriter = () => File.CreateText(settingsFileName);
            }

            var options = new DbContextOptionsBuilder <NecroDancerContext>()
                          .UseSqlServer(databaseConnectionString)
                          .Options;

            context = new NecroDancerContext(options);
            context.Database.EnsureDeleted();
            context.Database.Migrate();
        }
        public DailyLeaderboardsWorkerTests()
        {
            var context = new NecroDancerContext(necroDancerContextOptions);

            worker = new DailyLeaderboardsWorker(appId, context, mockSteamClientApiClient.Object, mockStoreClient.Object, telemetryClient);
        }
 private static void InitializeNecroDancerContext(NecroDancerContext context)
 {
     context.Database.Migrate();
     context.EnsureSeedData();
 }