/// <summary>
        /// Migrates all used contexts if enabled and add seed data if enabled and tables are empty.
        /// Seeding only happens in migrations are enabled.
        /// </summary>
        public void Migrate()
        {
            if (Settings.IsMigrationsEnabled(PersistedGrantDb))
            {
                Migrate(PersistedGrantDb);
            }

            if (Settings.IsMigrationsEnabled(ConfigurationDb))
            {
                Migrate(ConfigurationDb);
                if (Settings.IsDataSeedingEnabled(SeedEntityType.ApiResources))
                {
                    if (!ConfigurationDb.ApiResources.Any())
                    {
                        ConfigurationDb.ApiResources
                        .AddRange(SeedData.ApiResources.Select(entity => entity.ToEntity()));
                    }
                }
                if (Settings.IsDataSeedingEnabled(SeedEntityType.IdentityResources))
                {
                    if (!ConfigurationDb.IdentityResources.Any())
                    {
                        ConfigurationDb.IdentityResources
                        .AddRange(SeedData.IdentityResources.Select(entity => entity.ToEntity()));
                    }
                }
                if (Settings.IsDataSeedingEnabled(SeedEntityType.Clients))
                {
                    if (!ConfigurationDb.Clients.Any())
                    {
                        ConfigurationDb.Clients
                        .AddRange(SeedData.Clients.Select(entity => entity.ToEntity()));
                    }
                }
                ConfigurationDb.SaveChanges();
            }

            if (Settings.IsMigrationsEnabled(UserDb))
            {
                Migrate(UserDb);
                if (Settings.IsDataSeedingEnabled(SeedEntityType.Users))
                {
                    if (!UserDb.UserAccounts.Any())
                    {
                        var accounts = SeedData.TestUsers.Select(user => new UserAccount
                        {
                            Subject      = Guid.Parse(user.SubjectId),
                            UserName     = user.Username,
                            DateCreated  = DateTimeOffset.Now,
                            DateModified = DateTimeOffset.Now,
                            PasswordHash = Hasher.HashPassword(user.Password)
                        });
                        UserDb.UserAccounts.AddRange(accounts);
                        UserDb.SaveChanges();
                    }
                }
            }
        }
예제 #2
0
        public void CanReadConfigurationStream()
        {
            var expected = new ConfigurationDb
            {
                ConnectionString = "the_connection_string"
            };

            var stream = new MiqoConfig()
                         .Save(expected)
                         .ApplicationSettings()
                         .ToStream();

            stream.Position = 0;

            var actual = new MiqoConfig()
                         .Load()
                         .ApplicationSettings()
                         .FromStream <ConfigurationDb>(stream);

            Assert.Equal(expected.ConnectionString, actual.ConnectionString);
        }
예제 #3
0
        public void SerializeAndDeserializeUsingCustomFormatter()
        {
            var formatter = new XmlConfigurationFormatter(typeof(ConfigurationDb));
            var expected  = new ConfigurationDb
            {
                ConnectionString = "the_connection_string"
            };

            var xml = new MiqoConfig(formatter)
                      .Save(expected)
                      .ApplicationSettings()
                      .ToString();

            Assert.NotEmpty(xml);

            var actual = new MiqoConfig(formatter)
                         .Load()
                         .ApplicationSettings()
                         .FromString <ConfigurationDb>(xml);

            Assert.Equal(expected.ConnectionString, actual.ConnectionString);
        }