// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import { assert } from 'chai';
import * as IssuesManager from '../issues_manager/issues_manager.js';
describe('createIssueDescriptionFromMarkdown', () => {
    it('only accepts Markdown where the first AST element is a heading, describing the title', () => {
        const emptyMarkdownDescription = {
            file: '<unused>',
            links: [],
        };
        const validIssueDescription = '# Title for the issue\n\n...and some text describing the issue.';
        const description = IssuesManager.MarkdownIssueDescription.createIssueDescriptionFromRawMarkdown(validIssueDescription, emptyMarkdownDescription);
        assert.strictEqual(description.title, 'Title for the issue');
    });
    it('throws an error for issue description without a heading', () => {
        const emptyMarkdownDescription = {
            file: '<unused>',
            links: [],
        };
        const invalidIssueDescription = 'Just some text, but the heading is missing!';
        assert.throws(() => IssuesManager.MarkdownIssueDescription.createIssueDescriptionFromRawMarkdown(invalidIssueDescription, emptyMarkdownDescription));
    });
});
describe('substitutePlaceholders', () => {
    it('returns the input as-is, with no placeholders present in the input', () => {
        const str = 'Example string with no placeholders';
        assert.strictEqual(IssuesManager.MarkdownIssueDescription.substitutePlaceholders(str), str);
    });
    it('subsitutes a single placeholder', () => {
        const str = 'Example string with a single {PLACEHOLDER_placeholder}';
        const actual = IssuesManager.MarkdownIssueDescription.substitutePlaceholders(str, new Map([['PLACEHOLDER_placeholder', 'fooholder']]));
        assert.strictEqual(actual, 'Example string with a single fooholder');
    });
    it('substitutes multiple placeholders', () => {
        const str = 'Example string with two placeholders, \'{PLACEHOLDER_ph1}\' and \'{PLACEHOLDER_ph2}\'.';
        const actual = IssuesManager.MarkdownIssueDescription.substitutePlaceholders(str, new Map([['PLACEHOLDER_ph1', 'foo'], ['PLACEHOLDER_ph2', 'bar']]));
        assert.strictEqual(actual, 'Example string with two placeholders, \'foo\' and \'bar\'.');
    });
    it('throws an error for placeholders that don\'t have a replacement in the map', () => {
        const str = 'Example string where a replacement for {PLACEHOLDER_placeholder} is not provided.';
        assert.throws(() => IssuesManager.MarkdownIssueDescription.substitutePlaceholders(str));
    });
    it('ignores placeholder syntax where the placeholder doesn\'t have the PLACEHOLDER prefix', () => {
        const str = 'Example string with a {placeholder} that must be ignored.';
        assert.strictEqual(IssuesManager.MarkdownIssueDescription.substitutePlaceholders(str), str);
    });
    it('throws an error for unused replacements', () => {
        const str = 'Example string with no placeholder';
        assert.throws(() => IssuesManager.MarkdownIssueDescription.substitutePlaceholders(str, new Map([['PLACEHOLDER_FOO', 'bar']])));
    });
    it('allows the same placeholder to be used multiple times', () => {
        const str = 'Example string with the same placeholder used twice: {PLACEHOLDER_PH1} {PLACEHOLDER_PH1}';
        const actual = IssuesManager.MarkdownIssueDescription.substitutePlaceholders(str, new Map([['PLACEHOLDER_PH1', 'foo']]));
        assert.strictEqual(actual, 'Example string with the same placeholder used twice: foo foo');
    });
    it('throws an error for invalid placeholder syntax provided in the substitutions map', () => {
        const str = 'Example string with no placeholder';
        assert.throws(() => IssuesManager.MarkdownIssueDescription.substitutePlaceholders(str, new Map([['invalid_ph', 'foo']])));
    });
});
//# sourceMappingURL=MarkdownIssueDescription.test.js.map