//
        // You can use the following additional attributes as you write your tests:
        //
        // Use ClassInitialize to run code before running the first test in the class
        // [ClassInitialize()]
        // public static void MyClassInitialize(TestContext testContext) { }
        //
        // Use ClassCleanup to run code after all tests in a class have run
        // [ClassCleanup()]
        // public static void MyClassCleanup() { }
        //
        // Use TestInitialize to run code before running each test 
        // [TestInitialize()]
        // public void MyTestInitialize() { }
        //
        // Use TestCleanup to run code after each test has run
        // [TestCleanup()]
        // public void MyTestCleanup() { }
        //
        #endregion

        #endregion


        private ConnectionModel CreateValidConnection()
        {
            ConnectionModel connection = new ConnectionModel();
            connection.Name = "name";

            connection.ConnectionParameters.Add(new ConnectionParameterModel() { Key = "key", Value = "value" });
            return connection;
        }
        public void Should_Instantiate()
        {
            // arrange
            ConnectionModel connection = null;

            // act
            connection = new ConnectionModel();

            // assert
            Assert.IsNotNull(connection);
        }
        public bool IsValid(ConnectionModel connection, out IEnumerable<RuleViolation> ruleViolations)
        {
            List<RuleViolation> ruleViolationList = new List<RuleViolation>();

            ConnectionModel duplicateName = _connectionList.Where(existingConnection => existingConnection.Name == connection.Name && existingConnection.ConnectionId != connection.ConnectionId).FirstOrDefault();
            if (duplicateName != null)
            {
                ruleViolationList.Add(new RuleViolation("Name is already in use", "Name"));
            }

            ruleViolations = ruleViolationList;
            return (ruleViolationList.Count == 0);
        }
        public void Should_Allow_Remoe()
        {
            // arrange
            IConnectionRepository connectionRepository = this.GetConnectionRepository();
            ConnectionModel connection = new ConnectionModel();
            connection.ConnectionId = 1;
            connectionRepository.AddConnection(connection);

            // act
            connectionRepository.RemoveConnection(connection);
            ConnectionModel retrievedConnection = connectionRepository.GetConnection(1);

            // assert
            Assert.IsNull(retrievedConnection);
        }
        public ActionResult Create(FormCollection collection)
        {
            ConnectionModel connection = null;

            try
            {
                connection = new ConnectionModel();
                this.UpdateModel(connection);
                connection.ConnectionParameters.Clear();
                connection.ConnectionParameters.AddRange(ConnectionParameterModel.FromFormCollection(collection));

                if (connection.IsValid)
                {
                    IEnumerable<RuleViolation> ruleViolations = null;
                    if (! this._connectionRepository.IsValid(connection, out ruleViolations))
                    {
                        ModelState.AddRuleViolations(ruleViolations);
                        return View(connection);
                    }
                    
                    this._connectionRepository.AddConnection(connection);
                    this._connectionRepository.Save();
                }
                else
                {
                    ModelState.AddRuleViolations(connection.GetRuleViolations());
                    return View(connection);
                }

                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }
        public void Should_Not_Be_Valid_When_Unitialized()
        {
            // arrange
            ConnectionModel connection = new ConnectionModel();

            // act
            bool isValid = connection.IsValid;

            // assert
            Assert.IsFalse(isValid);
        }
 public void RemoveConnection(ConnectionModel connection)
 {
     _connectionList.Remove(connection);
 }
 public void AddConnection(ConnectionModel connection)
 {
     _connectionList.Add(connection);
 }
        public void Should_Return_Item_For_Valid_Id()
        {
            // arrange
            IConnectionRepository connectionRepository = this.GetConnectionRepository();
            ConnectionModel connection = new ConnectionModel();
            connection.ConnectionId = 1;
            connectionRepository.AddConnection(connection);

            // act
            ConnectionModel retrievedConnection = connectionRepository.GetConnection(1);

            // assert
            Assert.IsTrue(retrievedConnection.ConnectionId == 1);
        }
        public void Should_Not_Save_When_Duplicate_Name()
        {
            // arrange
            IConnectionRepository connectionRepository = this.GetConnectionRepository();

            ConnectionModel connection1 = new ConnectionModel();
            connection1.Name = "connection1";
            connectionRepository.AddConnection(connection1);

            ConnectionModel connection2 = new ConnectionModel();
            connection2.Name = "connection1";
            connectionRepository.AddConnection(connection2);

            // act
            bool exceptionThrown = false;
            try
            {
                connectionRepository.Save();
            }
            catch
            {
                exceptionThrown = true;
            }

            // assert
            Assert.IsTrue(exceptionThrown);
        }
 public void RemoveConnection(ConnectionModel connection)
 {
     throw new NotImplementedException();
 }
 public bool IsValid(ConnectionModel connection, out IEnumerable<RuleViolation> ruleViolations)
 {
     throw new NotImplementedException();
 }