Пример #1
0
        public string AddDashboardItems(DashboardItem dashItem, ModelStateDictionary ModelState)
        {
            Exception accessorError = null;

            if (ModelState.IsValid)
            {
                if (dashItem.DashboardItemID == 0) // creating new item
                {
                    accessorError = accessor.InsertDashItem(dashItem);
                }
                else // editing pre-existing item
                {
                    accessorError = accessor.UpdateDashItem(dashItem);
                }

                if (accessorError == null)
                {
                    return("/DashManager");
                }
                else
                {
                    ModelState.AddModelError(string.Empty, "DB Error: " + accessorError.Message);
                }
            }
            return(JsonConvert.SerializeObject(ToolEngine.GetErrorMessages(ModelState)));
        }
Пример #2
0
        public string addDashboard(Dashboard dash, ModelStateDictionary ModelState)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    if (dash.DashboardID == 0)
                    {
                        accessor.InsertDashboard(dash); // if any error from insert, add to error list
                    }
                    else
                    {
                        accessor.UpdateDashboard(dash); // if any error from insert, add to error list
                    }
                }
            }
            catch (Exception e)
            {
                ModelState.AddModelError(string.Empty, e.Message);
            }


            if (ModelState.ErrorCount == 0)
            {
                return("/DashManager");
            }
            else
            {
                var messages = ToolEngine.GetErrorMessages(ModelState);
                return(JsonConvert.SerializeObject(messages)); // returns string list of errors for page to display, errors based on model specifications
            }
        }
Пример #3
0
        public void UpgradeCommand_ShouldUseConnectionTimeoutForLongrunningQueries()
        {
            var engine = new ToolEngine(Env, Logger);

            var r = engine.Run("upgrade", "--ensure", GetConfigPath("dbup.yml", "Timeout"));

            r.Should().Be(1);
        }
Пример #4
0
        public void StatusCommand_ShouldPrintScriptName_IfThereAreTheScriptsToExecute()
        {
            var env = A.Fake <IEnvironment>();

            A.CallTo(() => env.GetCurrentDirectory()).Returns(@"c:\test");
            A.CallTo(() => env.FileExists("")).WithAnyArguments().ReturnsLazily(x => { return(File.Exists(x.Arguments[0] as string)); });

            var engine = new ToolEngine(env, Logger, (testConnectionFactory as IConnectionFactory).Some());

            var result = engine.Run("status", GetConfigPath("onescript.yml"), "-n");

            Logger.InfoMessages.Last().Should().EndWith("c001.sql");
        }
Пример #5
0
        public void MarkAsExecutedCommand_WhenCalled_ShouldNotMakeAnyChangesInDb()
        {
            var env = A.Fake <IEnvironment>();

            A.CallTo(() => env.GetCurrentDirectory()).Returns(@"c:\test");
            A.CallTo(() => env.FileExists("")).WithAnyArguments().ReturnsLazily(x => { return(File.Exists(x.Arguments[0] as string)); });

            var engine = new ToolEngine(env, Logger, (testConnectionFactory as IConnectionFactory).Some());
            var result = engine.Run("mark-as-executed", GetConfigPath("mark-as-executed.yml"));

            result.Should().Be(0);

            Logger.Log.Should().NotContain("print 'You should not see this message'");
        }
Пример #6
0
        public void StatusCommand_ShouldUseSpecifiedEnvFiles()
        {
            var env = A.Fake <IEnvironment>();

            A.CallTo(() => env.GetCurrentDirectory()).Returns(@"c:\test");
            A.CallTo(() => env.FileExists("")).WithAnyArguments().ReturnsLazily(x => { return(File.Exists(x.Arguments[0] as string)); });

            var engine = new ToolEngine(env, Logger, (testConnectionFactory as IConnectionFactory).Some());

            var result = engine.Run("status", GetConfigPath("Status/status.yml"), "-n",
                                    "--env", GetConfigPath("Status/file1.env"), GetConfigPath("Status/file2.env"));

            Logger.InfoMessages.Last().Should().EndWith("c001.sql");
        }
Пример #7
0
        public void ToolEngine_ShouldRespectScriptFiltersAndNotMatchFiles(string filename)
        {
            var env = A.Fake <IEnvironment>();

            A.CallTo(() => env.GetCurrentDirectory()).Returns(@"c:\test");
            A.CallTo(() => env.FileExists("")).WithAnyArguments().ReturnsLazily(x => { return(File.Exists(x.Arguments[0] as string)); });

            var engine = new ToolEngine(env, Logger, (testConnectionFactory as IConnectionFactory).Some());

            var result = engine.Run("upgrade", GetConfigPath("filter.yml"));

            result.Should().Be(0);

            Logger.Log.Should().NotContain(filename);
        }
Пример #8
0
        public void StatusCommand_ShouldPrintGeneralInformation_IfNoScriptsToExecute()
        {
            var env = A.Fake <IEnvironment>();

            A.CallTo(() => env.GetCurrentDirectory()).Returns(@"c:\test");
            A.CallTo(() => env.FileExists("")).WithAnyArguments().ReturnsLazily(x => { return(File.Exists(x.Arguments[0] as string)); });

            var engine = new ToolEngine(env, Logger, (testConnectionFactory as IConnectionFactory).Some());

            var result = engine.Run("status", GetConfigPath("noscripts.yml"));

            result.Should().Be(0);

            Logger.InfoMessages.Last().Should().StartWith("Database is up-to-date");
        }
Пример #9
0
        public void InitCommand_ShouldReturn1AndNotCreateConfig_IfItIsPresent()
        {
            var saved = false;

            var env = A.Fake <IEnvironment>();

            A.CallTo(() => env.GetCurrentDirectory()).Returns(@"c:\test");
            A.CallTo(() => env.FileExists(@"c:\test\dbup.yml")).Returns(true);
            A.CallTo(() => env.WriteFile("", "")).WithAnyArguments().ReturnsLazily(x => { saved = true; return(true.Some <bool, Error>()); });

            var engine = new ToolEngine(env, A.Fake <IUpgradeLog>());

            engine.Run("init").Should().Be(1);
            saved.Should().BeFalse();
        }
Пример #10
0
        public void Drop_DropADb()
        {
            var engine = new ToolEngine(Env, Logger);

            engine.Run("upgrade", "--ensure", GetConfigPath());
            var result = engine.Run("drop", GetConfigPath());

            result.Should().Be(0);
            using (var connection = new SqlConnection(Environment.GetEnvironmentVariable("CONNSTR")))
                using (var command = new SqlCommand("select count(*) from SchemaVersions where scriptname = '001.sql'", connection))
                {
                    Action a = () => connection.Open();
                    a.Should().Throw <SqlException>("Database DbUp should not exist");
                }
        }
Пример #11
0
        public void Ensure_CreateANewDb()
        {
            var engine = new ToolEngine(Env, Logger);

            var result = engine.Run("upgrade", "--ensure", GetConfigPath());

            result.Should().Be(0);

            using (var connection = new SqlConnection(Environment.GetEnvironmentVariable("CONNSTR")))
                using (var command = new SqlCommand("select count(*) from SchemaVersions where scriptname = '001.sql'", connection))
                {
                    connection.Open();
                    var count = command.ExecuteScalar();

                    count.Should().Be(1);
                }
        }
Пример #12
0
        public void LoadMigration_ShouldSubstituteVariablesToScript()
        {
            var env = A.Fake <IEnvironment>();

            A.CallTo(() => env.GetCurrentDirectory()).Returns(@"c:\test");
            A.CallTo(() => env.FileExists(A <string> .Ignored)).ReturnsLazily(x => File.Exists(x.Arguments[0] as string));

            var engine = new ToolEngine(env, Logger, (testConnectionFactory as IConnectionFactory).Some());

            var result = engine.Run("upgrade", GetConfigPath("vars.yml"));

            result.Should().Be(0);

            Logger.Log.Should().Contain("print 'Var1Value'");
            Logger.Log.Should().Contain("print 'Var2Value'");
            Logger.Log.Should().Contain("print 'Var3 Value'");
        }
Пример #13
0
        public string AddDashboardWithPriv(Dashboard dash, ModelStateDictionary ModelState,
                                           List <string> usersWhoCanEdit)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    if (dash.DashboardID == 0)
                    {
                        var insertedDashID = accessor.InsertDashboard(dash); // if any error from insert, add to error list

                        foreach (var userID in usersWhoCanEdit)
                        {
                            accessor.AddDashPrivilege(insertedDashID, userID);
                        }
                    }
                    else
                    {
                        accessor.RemoveAllPrivilegesOnDashboard(dash.DashboardID.ToString()); // gives us a clean slate to add new privileges

                        foreach (var userID in usersWhoCanEdit)
                        {
                            accessor.AddDashPrivilege(dash.DashboardID.ToString(), userID); // adds privileges
                        }

                        accessor.UpdateDashboard(dash); // if any error from insert, add to error list
                    }
                }
            }
            catch (Exception e)
            {
                ModelState.AddModelError(string.Empty, e.Message);
            }


            if (ModelState.ErrorCount == 0)
            {
                return("/DashManager"); // no errors, redirect user
            }
            else
            {                                                  // if errors, convert them to a list to display
                var messages = ToolEngine.GetErrorMessages(ModelState);
                return(JsonConvert.SerializeObject(messages)); // returns string list of errors for page to display, errors based on model specifications
            }
        }
Пример #14
0
        public void LoadMigration_ShouldRespectScriptEncoding()
        {
            var env = A.Fake <IEnvironment>();

            A.CallTo(() => env.GetCurrentDirectory()).Returns(@"c:\test");
            A.CallTo(() => env.FileExists("")).WithAnyArguments().ReturnsLazily(x =>
            {
                var res = File.Exists(x.Arguments[0] as string);
                return(res);
            });

            var engine = new ToolEngine(env, Logger, (testConnectionFactory as IConnectionFactory).Some());

            var result = engine.Run("upgrade", GetConfigPath("encoding.yml"));

            result.Should().Be(0);

            Logger.Log.Should().Contain("print 'Превед, медвед'");
        }
Пример #15
0
        public async Task <string> AddUser(AddUser newUser, ModelStateDictionary ModelState)
        {
            if (ModelState.IsValid)
            {
                User user = new User
                {
                    UserName = newUser.Email,
                    Email    = newUser.Email
                };

                var result = await _userManager.CreateAsync(user, newUser.Password);

                if (result.Succeeded && newUser.DashPrivileges != null)                                  // add dash privileges
                {
                    string userID = _userManager.Users.Where(x => x.Email == user.Email).ToList()[0].Id; // get the id of the user we just created todo: cleaner

                    var errorMessage = AddDashPrivileges(userID, newUser.DashPrivileges);
                    if (errorMessage != "")
                    {
                        ModelState.AddModelError(string.Empty, errorMessage);
                    }
                }
                else
                {
                    foreach (var error in result.Errors)
                    {
                        ModelState.AddModelError(string.Empty, error.Description); // add errors to our list that we will send our UI
                    }
                }
            }

            if (ModelState.ErrorCount == 0)
            {
                return("/UserManager"); // sending back a url will notify UI to change pages
            }


            var messages = ToolEngine.GetErrorMessages(ModelState);

            return(JsonConvert.SerializeObject(messages)); // returns string list of errors for page to display, errors based on model specifications
        }
Пример #16
0
        public void LoadMigration_WhenLoadADefaultConfigFile_ShouldLoadItWithoutErrors()
        {
            var configFile     = ToolEngine.GetDefaultConfigFile();
            var configFilePath = Path.GetTempFileName();

            File.WriteAllText(configFilePath, configFile);

            try
            {
                var migration = ConfigLoader.LoadMigration(configFilePath.Some <string, Error>());

                migration.MatchNone(err =>
                {
                    Assert.Fail(err.Message);
                });
            }
            finally
            {
                File.Delete(configFilePath);
            }
        }
        public async Task <string> Login([FromForm] Login info)
        {
            if (ModelState.IsValid)
            {
                var result = await _signInManager.PasswordSignInAsync(info.Email, info.Password,
                                                                      info.RememberMe,
                                                                      lockoutOnFailure : false);


                if (result.Succeeded)
                {
                    return("/DashManager");
                }
                else
                {
                    ModelState.AddModelError(string.Empty, "Login Failed");
                }
            }

            return(JsonConvert.SerializeObject(ToolEngine.GetErrorMessages(ModelState))); // returns string list of errors for page to display, errors based on model specifications
        }