public void TestPlaceholder()
        {
            var rand = new Random();
            var seed = rand.Next();

            Logger.InfoFormat("Using seed {0}", seed);

            var instanceConfig = GetConfig().Instances.First();
            var templateText   = File.ReadAllText(@"Templates\AckTemplate.htm");
            var placeholders   = AckEmailPlaceholder.GetPlaceholders(templateText);
            var fields         = GetWorkItemFields(seed);
            var workItem       = new WorkItemFieldsMock(fields);

            var template = new AckEmailTemplate(templateText);
            var body     = template.Apply(workItem, instanceConfig);

            Assert.IsTrue(body.Contains(workItem.ID), "Work item ID has not been replaced.");
            Assert.IsTrue(body.Contains(workItem.Title), "Work item title has not been replaced.");
            Assert.IsTrue(body.Contains(workItem.State), "Work item state has not been replaced.");
            Assert.IsTrue(body.Contains(workItem.Owner), "Work item owner has not been replaced.");

            foreach (var placeholder in placeholders)
            {
                Assert.IsFalse(body.Contains(placeholder.Text), $"Placeholder {placeholder.Text} has not been replaced.");
            }
        }
        public void TestPlaceholderForNamedField()
        {
            var rand = new Random();
            var seed = rand.Next();

            Logger.InfoFormat("Using seed {0}", seed);

            var instanceConfig = GetConfig().Instances.First();
            var templateText   = File.ReadAllText(@"Templates\AckTemplate.htm");
            var placeholders   = AckEmailPlaceholder.GetPlaceholders(templateText);
            var fields         = GetWorkItemFields(seed);

            var namedField      = "Priority";
            var namedFieldValue = "PRI2";

            fields[namedField] = namedFieldValue;
            var namedPlaceholder = placeholders.First(p => p.Field.Equals(namedField, StringComparison.InvariantCultureIgnoreCase));

            Assert.IsNotNull(namedPlaceholder, $"Bad test data; placeholder for {namedField} not found in template.");
            var workItem = new WorkItemFieldsMock(fields);

            var template = new AckEmailTemplate(templateText);
            var body     = template.Apply(workItem, instanceConfig);

            Assert.IsFalse(body.Contains(namedPlaceholder.Text), $"Placeholder {namedPlaceholder.Text} has not been replaced.");
            Assert.IsTrue(body.Contains(namedFieldValue), $"Placeholder {namedPlaceholder.Text} has not been replaced with {namedFieldValue}.");
        }
        public void TestPlaceholderWithDefault()
        {
            var rand = new Random();
            var seed = rand.Next();

            Logger.InfoFormat("Using seed {0}", seed);

            var instanceConfig = GetConfig().Instances.First();
            var templateText   = File.ReadAllText(@"Templates\AckTemplate.htm");
            var placeholders   = AckEmailPlaceholder.GetPlaceholders(templateText);
            var fields         = GetWorkItemFields(seed);

            fields["Assigned To"] = null;
            fields["Priority"]    = null;
            var placeholdersWithDefaults = placeholders.Where(p => p.Field.Equals("BugOwner") || p.Field.Equals("Priority"));

            Assert.AreEqual(2, placeholdersWithDefaults.Count(), "Bad test data; all expected placeholders not found.");

            var workItem = new WorkItemFieldsMock(fields);
            var template = new AckEmailTemplate(templateText);
            var body     = template.Apply(workItem, instanceConfig);

            foreach (var placeholder in placeholdersWithDefaults)
            {
                Assert.IsFalse(body.Contains(placeholder.Text), $"Placeholder '{placeholder.Text}' has not been replaced.");
                Assert.IsTrue(body.Contains(placeholder.DefaultValue), $"Placeholder '{placeholder.Text}' has not been replaced with its default value '{placeholder.DefaultValue}'.");
            }
        }