private IEnumerable <FirstTimeHelp> HydratePages(SqlDataReader reader)
        {
            var idOrdinal               = reader.GetOrdinal("Id");
            var sourceUrlOrdinal        = reader.GetOrdinal("SourceUrl");
            var titleOrdinal            = reader.GetOrdinal("Title");
            var contentOrdinal          = reader.GetOrdinal("Content");
            var verticalOffsetOrdinal   = reader.GetOrdinal("VerticalOffset");
            var horizontalOffsetOrdinal = reader.GetOrdinal("HorizontalOffset");
            var offsetElementIdOrdinal  = reader.GetOrdinal("OffsetElementId");

            while (reader.Read())
            {
                var result = new FirstTimeHelp
                {
                    Id               = reader.GetInt32(idOrdinal),
                    SourceUrl        = reader.GetString(sourceUrlOrdinal),
                    Title            = reader.GetString(titleOrdinal),
                    Content          = reader.GetString(contentOrdinal),
                    VerticalOffset   = reader.GetInt32(verticalOffsetOrdinal),
                    HorizontalOffset = reader.GetInt32(horizontalOffsetOrdinal),
                    OffsetElementId  = reader.GetString(offsetElementIdOrdinal),
                };

                result.MatchUrls = MatchUrls_ReadByHelpId(result.Id);
                yield return(result);
            }
        }
 private static void AddParameters(FirstTimeHelp help, SqlCommand command)
 {
     command.Parameters.AddRange(new SqlParameter[] {
         new SqlParameter("@sourceUrl", help.SourceUrl),
         new SqlParameter("@title", help.Title),
         new SqlParameter("@content", help.Content),
         new SqlParameter("@verticalOffset", help.VerticalOffset),
         new SqlParameter("@horizontalOffset", help.HorizontalOffset),
         new SqlParameter("@offsetElementId", help.OffsetElementId),
     });
 }
        public void Process_ExistingPage()
        {
            // Arrange
            var dataStorePage = Models.CreateFirstTimeHelp(id: 84926);

            var dataStoreBullets = new List <Bullet>();

            dataStoreBullets.Add(Models.CreateBullet(id: 54829, pageId: dataStorePage.Id));
            dataStoreBullets.Add(Models.CreateBullet(id: 29334, pageId: dataStorePage.Id));
            var updatedBullet = dataStoreBullets[0];
            var deletedBullet = dataStoreBullets[1];

            var clientHelp = new FirstTimeHelp
            {
                Id      = dataStorePage.Id,                             // Same id as data store page because this is an existing page.
                Title   = dataStorePage.Title,
                Content = dataStorePage.Content,
            };

            clientHelp.Bullets.Add(Models.CreateBullet(clientHelp.Id));
            clientHelp.Bullets.Add(dataStoreBullets[0]);
            var newBullet = clientHelp.Bullets[0];

            var helpRepository = Mocks.Create <IFirstTimeHelpRepository>();

            helpRepository.Setup(r => r.Update(It.Is <FirstTimeHelp>(p => p.Id == clientHelp.Id)));

            var bulletRepository = Mocks.Create <IBulletRepository>();

            bulletRepository.Setup(r => r.ReadByPageId(clientHelp.Id)).Returns(dataStoreBullets);
            bulletRepository.Setup(r => r.Create(It.Is <Bullet>(b => b.Text == newBullet.Text)));
            bulletRepository.Setup(r => r.Update(It.Is <Bullet>(b => b.Id == updatedBullet.Id)));
            bulletRepository.Setup(r => r.Delete(deletedBullet.Id));

            var serializer  = new JavaScriptSerializer();
            var requestData = serializer.Serialize(clientHelp);
            var processor   = new SaveFirstTimeHelpRequestProcessor(bulletRepository.Object, helpRepository.Object);

            // Act
            var result = processor.Process(requestData);

            // Assert
            Assert.That(result, Is.Not.Null, "A response state instance should be returned.");
            Assert.That(result.ContentType, Is.EqualTo(ContentTypes.Json), "The response content should contain JSON.");
            var resultHelp = serializer.Deserialize <FirstTimeHelp>(result.Content);

            Assert.That(resultHelp.Id, Is.EqualTo(clientHelp.Id), "The page id should not change.");
            Assert.That(resultHelp.Bullets.Count, Is.EqualTo(clientHelp.Bullets.Count), "The returned page should have the same number of bullets as the client page.");
            foreach (var clientBullet in clientHelp.Bullets)
            {
                Assert.That(resultHelp.Bullets.Where(resultBullet => resultBullet.Text == clientBullet.Text).Count(), Is.EqualTo(1), "All bullets in client model should be returned in the result.");
            }
            Mocks.VerifyAll();
        }
        public void Create(FirstTimeHelp help)
        {
            using (var connection = SqlConnectionFactory.GetConnection())
                using (var command = connection.CreateCommand())
                {
                    command.CommandType = CommandType.Text;
                    command.CommandText = SqlScripts.FirstTimeHelp_Create;
                    AddParameters(help, command);

                    connection.Open();
                    help.Id = (int)command.ExecuteScalar();
                }

            MatchUrls_CreateByHelpId(help.Id, help.MatchUrls);
        }
        public void Update(FirstTimeHelp help)
        {
            using (var connection = SqlConnectionFactory.GetConnection())
                using (var command = connection.CreateCommand())
                {
                    command.CommandType = CommandType.Text;
                    command.CommandText = SqlScripts.FirstTimeHelp_Update;
                    AddParameters(help, command);
                    command.Parameters.Add(new SqlParameter("@id", help.Id));

                    connection.Open();
                    command.ExecuteNonQuery();
                }

            MatchUrls_DeleteByHelpId(help.Id);
            MatchUrls_CreateByHelpId(help.Id, help.MatchUrls);
        }
        public FirstTimeHelp ReadByUrl(string url)
        {
            FirstTimeHelp result = null;

            using (var connection = SqlConnectionFactory.GetConnection())
                using (var command = connection.CreateCommand())
                {
                    command.CommandType = CommandType.Text;
                    command.CommandText = SqlScripts.FirstTimeHelp_ReadByUrl;
                    command.Parameters.Add(new SqlParameter("@url", url));

                    connection.Open();
                    using (var reader = command.ExecuteReader())
                    {
                        result = HydratePages(reader).FirstOrDefault();
                    }
                }

            return(result);
        }
示例#7
0
        public FirstTimeHelp CreateFirstTimeHelp(
            int id           = 0,
            string matchUrls = null
            )
        {
            var result = new FirstTimeHelp
            {
                Id               = id,
                Content          = "Test content for first time help.",
                HorizontalOffset = 20,
                VerticalOffset   = 20,
                OffsetElementId  = "TestPageOffsetElementId",
                MatchUrls        = matchUrls ?? string.Format("/Test/Run-{0}*", _firstTimeHelpCount),
                SourceUrl        = string.Format("/Test/Run/{0}", _firstTimeHelpCount),
                Title            = string.Format("Unit Test Help {0}", _firstTimeHelpCount.ToString("00#")),
            };

            _firstTimeHelpCount++;

            return(result);
        }