diff --git a/app/views/docs/kata.html.erb b/app/views/docs/kata.html.erb
index 8d2b8f62..fab536ca 100644
--- a/app/views/docs/kata.html.erb
+++ b/app/views/docs/kata.html.erb
@@ -57,7 +57,7 @@
各 Dojo は、チャンピオンやメンターと呼ばれる協力者によって自主的に運営されています。プログラマーやデザイナーだけでなく、学生や教員、アーティストやフリーランス、起業家や投資家などの方々が分野横断的に協力しあって、それぞれの Dojo が継続的に運営されています。もちろん、参加者自身や参加者の親が運営に協力する事例も多いです。
<%= lazy_image_tag('/kata/coderdojo-zero.webp', alt: 'CoderDojo を支える方々の写真', style: 'margin-top: 30px; margin-bottom: 40px;', min: true) %> - +CoderDojo の雰囲気は掴めたでしょうか? もっと詳しく知るには実際に参加してみるのが近道です。<%= link_to '日本の道場一覧', root_path(anchor: 'dojos') %>や<%= link_to '近日開催の道場', events_path %>、もしくは<%= link_to '地図情報(DojoMap)', dojomap_url %> から最寄りの道場を探してみましょう!
具体的なイメージが掴めたら、準備・申請の手続きを進めていきましょう!
- +by <%= link_to 'Raspberry Pi & CoderDojo Foundation', raspi_url %>
- +by <%= link_to 'Raspberry Pi & CoderDojo Foundation', raspi_url %>
diff --git a/spec/requests/docs_spec.rb b/spec/requests/docs_spec.rb index 9ae7ddc0..0d68f7ac 100644 --- a/spec/requests/docs_spec.rb +++ b/spec/requests/docs_spec.rb @@ -23,6 +23,26 @@ expect(response.status).to eq 302 end + # /kata page internal links should not be dead links + context 'kata page - internal links check' do + it 'has no dead internal links' do + get '/kata' + doc = Nokogiri::HTML(response.body) + links = doc.css('a[href]').map { |a| a['href'] } + .select { |href| href.start_with?('/') && !href.start_with?('/#') } + .map { |href| href.split('#').first } + .uniq + + dead_links = links.reject do |path| + get path + response.status < 400 + end + + puts "Checked #{links.count} internal links" + expect(dead_links).to be_empty, "Dead links found: #{dead_links.join(', ')}" + end + end + # /signup page has Google Form to be rendered. context 'signup page - Google Form rendering (Critical)' do before { get doc_path('signup') }