diff --git a/app/commands/markdown/preprocess.rb b/app/commands/markdown/preprocess.rb index 24ec2cea96..7433d9fa2c 100644 --- a/app/commands/markdown/preprocess.rb +++ b/app/commands/markdown/preprocess.rb @@ -43,10 +43,15 @@ def convert_inline_links! link_text = node.each.map(&:to_commonmark).join.strip link_text.match(%r{^(concept|exercise):([\w-]+)/([\w-]+)$}) do |m| - node.url = "https://exercism.org/tracks/#{m[2]}/#{m[1]}s/#{m[3]}" + node.url = "https://exercism.org/tracks/#{m[2]}/#{m[1].pluralize}/#{m[3]}" node.each.first.string_content = m[3] end + link_text.match(%r{^(article|approach):([\w-]+)/([\w-]+)/([\w-]+)$}) do |m| + node.url = "https://exercism.org/tracks/#{m[2]}/exercises/#{m[3]}/#{m[1].pluralize}/#{m[4]}" + node.each.first.string_content = m[4] + end + link_text.match(%r{^video:vimeo/(\d+)$}) do |m| node.url = "https://player.vimeo.com/video/#{m[1]}" end diff --git a/test/commands/markdown/parse_test.rb b/test/commands/markdown/parse_test.rb index eea1ce4f3c..95726db5ba 100644 --- a/test/commands/markdown/parse_test.rb +++ b/test/commands/markdown/parse_test.rb @@ -285,30 +285,46 @@ class Markdown::ParseTest < ActiveSupport::TestCase end test "render concept widget link without link" do - # TODO: render concept widget instead of link expected = %(
\n) # rubocop:disable Layout/LineLength assert_equal expected, Markdown::Parse.("[concept:julia/if-statements]()") end test "render concept widget link with link" do - # TODO: render concept widget instead of link expected = %(\n) # rubocop:disable Layout/LineLength assert_equal expected, Markdown::Parse.("[concept:julia/if-statements](https://exercism.org/tracks/julia/concepts/if-statements)") end test "render exercise widget link without link" do - # TODO: render exercise widget instead of link expected = %(\n) # rubocop:disable Layout/LineLength assert_equal expected, Markdown::Parse.("[exercise:julia/two-fer]()") end test "render exercise widget link with link" do - # TODO: render exercise widget instead of link expected = %(\n) # rubocop:disable Layout/LineLength assert_equal expected, Markdown::Parse.("[exercise:julia/two-fer](https://exercism.org/tracks/julia/exercises/two-fer)") end + test "render article widget link without link" do + expected = %(\n) + assert_equal expected, Markdown::Parse.("[article:julia/reverse-string/performance]()") + end + + test "render article widget link with link" do + expected = %(\n) + assert_equal expected, Markdown::Parse.("[article:julia/reverse-string/performance](https://exercism.org/tracks/julia/exercises/reverse-string/articles/performance)") + end + + test "render approach widget link without link" do + expected = %(\n) + assert_equal expected, Markdown::Parse.("[approach:julia/two-fer/default-value]()") + end + + test "render approach widget link with link" do + expected = %(\n) + assert_equal expected, Markdown::Parse.("[approach:julia/two-fer/default-value](https://exercism.org/tracks/julia/exercises/two-fer/approaches/default-value)") + end + test "don't render exercise widget for approach link" do expected = %(\n) assert_equal expected, Markdown::Parse.("[approach](https://exercism.org/tracks/julia/exercises/two-fer/approaches/default-value)")