Skip to content

Commit 280f829

Browse files
committed
test: 開催日表示ロジックと日本語形式日付のテストを追加
- 最新日付優先表示のテスト(note vs イベント履歴) - 日本語形式(YYYY年MM月DD日)のパースのテスト - 複数の日付形式サポートの確認 TDDアプローチで実装の正確性を保証
1 parent 864ca61 commit 280f829

File tree

1 file changed

+161
-0
lines changed

1 file changed

+161
-0
lines changed

spec/requests/dojos_spec.rb

Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,4 +377,165 @@
377377
expect(response.body).to include("道場名 (ID 番号)")
378378
end
379379
end
380+
381+
describe "GET /dojos/activity - note date priority" do
382+
before do
383+
# Create Wakayama-like dojo with old event history but newer note date
384+
@test_dojo = create(:dojo,
385+
name: "和歌山テスト",
386+
created_at: Time.zone.parse("2016-11-01"),
387+
inactivated_at: nil,
388+
note: "Active for years - 2025-03-16 https://coderdojo-wakayama.hatenablog.com/entry/2025/03/16/230604"
389+
)
390+
391+
# Create an old event history record for this dojo
392+
@old_event = EventHistory.create!(
393+
dojo_id: @test_dojo.id,
394+
dojo_name: @test_dojo.name,
395+
service_name: "facebook",
396+
event_id: "1761517970842435",
397+
participants: 10,
398+
evented_at: Time.zone.parse("2017-03-12 14:30:00"),
399+
event_url: "https://www.facebook.com/events/1761517970842435"
400+
)
401+
end
402+
403+
it "should prioritize newer note date over older event history" do
404+
get activity_dojos_path
405+
406+
# Find the dojo row in the response
407+
dojo_row_match = response.body.match(/#{@test_dojo.name}.*?<\/tr>/m)
408+
expect(dojo_row_match).not_to be_nil, "Could not find dojo row for #{@test_dojo.name}"
409+
410+
dojo_row = dojo_row_match[0]
411+
412+
# The 開催日 (event date) column should show the newer note date (2025-03-16)
413+
# not the older event history date (2017-03-12)
414+
expect(dojo_row).to include("2025-03-16"),
415+
"Expected to see note date 2025-03-16 in 開催日 column, but found: #{dojo_row}"
416+
417+
expect(dojo_row).not_to include("2017-03-12"),
418+
"Should not show old event history date 2017-03-12 when newer note date exists"
419+
end
420+
421+
it "should link to note URL when displaying note date in 開催日 column" do
422+
get activity_dojos_path
423+
424+
# Find the dojo row
425+
dojo_row_match = response.body.match(/#{@test_dojo.name}.*?<\/tr>/m)
426+
expect(dojo_row_match).not_to be_nil
427+
428+
dojo_row = dojo_row_match[0]
429+
430+
# Should contain a link to the note URL
431+
expect(dojo_row).to include("https://coderdojo-wakayama.hatenablog.com/entry/2025/03/16/230604"),
432+
"Expected to find note URL in the 開催日 column"
433+
end
434+
435+
it "handles multiple date formats in note (YYYY-MM-DD and YYYY/MM/DD)" do
436+
# Test with slash format
437+
slash_format_dojo = create(:dojo,
438+
name: "スラッシュ形式テスト",
439+
created_at: Time.zone.parse("2016-01-01"),
440+
inactivated_at: nil,
441+
note: "Active - last event 2025/03/16 using Google Forms"
442+
)
443+
444+
# Create old event history
445+
EventHistory.create!(
446+
dojo_id: slash_format_dojo.id,
447+
dojo_name: slash_format_dojo.name,
448+
service_name: "connpass",
449+
event_id: "12345",
450+
participants: 5,
451+
evented_at: Time.zone.parse("2017-01-01"),
452+
event_url: "https://example.com"
453+
)
454+
455+
get activity_dojos_path
456+
457+
# Should show the note date in standard format
458+
expect(response.body).to include("2025-03-16"),
459+
"Should parse YYYY/MM/DD format and display as YYYY-MM-DD"
460+
end
461+
462+
it "handles Japanese date format in note (YYYY年MM月DD日)" do
463+
# Test with Japanese date format
464+
japanese_format_dojo = create(:dojo,
465+
name: "日本語形式テスト",
466+
created_at: Time.zone.parse("2016-01-01"),
467+
inactivated_at: nil,
468+
note: "最終開催日: 2025年8月24日 Peatixで申込受付中"
469+
)
470+
471+
# Create old event history
472+
EventHistory.create!(
473+
dojo_id: japanese_format_dojo.id,
474+
dojo_name: japanese_format_dojo.name,
475+
service_name: "connpass",
476+
event_id: "jp123",
477+
participants: 8,
478+
evented_at: Time.zone.parse("2017-01-01"),
479+
event_url: "https://example.com"
480+
)
481+
482+
get activity_dojos_path
483+
484+
# Find the dojo row
485+
dojo_row_match = response.body.match(/#{japanese_format_dojo.name}.*?<\/tr>/m)
486+
expect(dojo_row_match).not_to be_nil
487+
488+
dojo_row = dojo_row_match[0]
489+
490+
# Should show the Japanese date in standard format (2025-08-24)
491+
expect(dojo_row).to include("2025-08-24"),
492+
"Should parse YYYY年MM月DD日 format and display as YYYY-MM-DD"
493+
end
494+
495+
it "shows event history date when it's newer than note date" do
496+
# Create dojo with older note date
497+
newer_event_dojo = create(:dojo,
498+
name: "イベント履歴が新しいテスト",
499+
created_at: Time.zone.parse("2016-01-01"),
500+
inactivated_at: nil,
501+
note: "Last manual event - 2025-03-16 using Google Forms"
502+
)
503+
504+
# Create newer event history (newer than note date)
505+
newer_event = EventHistory.create!(
506+
dojo_id: newer_event_dojo.id,
507+
dojo_name: newer_event_dojo.name,
508+
service_name: "connpass",
509+
event_id: "67890",
510+
participants: 15,
511+
evented_at: Time.zone.parse("2025-08-01 19:00:00"), # Newer than note date
512+
event_url: "https://example-newer.com"
513+
)
514+
515+
get activity_dojos_path
516+
517+
# Find the dojo row
518+
dojo_row_match = response.body.match(/#{newer_event_dojo.name}.*?<\/tr>/m)
519+
expect(dojo_row_match).not_to be_nil
520+
521+
dojo_row = dojo_row_match[0]
522+
523+
# Extract just the 開催日 column to check the date display
524+
td_matches = dojo_row.scan(/<td[^>]*>(.*?)<\/td>/m)
525+
526+
# Based on debug output: td_matches[1] is the 開催日 column
527+
# (道場名 column seems to be skipped in regex due to complex link structure)
528+
event_date_column = td_matches[1]&.first # 開催日 column
529+
530+
expect(event_date_column).not_to be_nil, "Could not find 開催日 column"
531+
532+
# Should show the newer event history date (2025-08-01) in the 開催日 column
533+
expect(event_date_column).to include("2025-08-01"),
534+
"Expected to see newer event history date 2025-08-01 in 開催日 column, but found: #{event_date_column}"
535+
536+
# The 開催日 column should not contain the older note date
537+
expect(event_date_column).not_to include("2025-03-16"),
538+
"Should not show older note date 2025-03-16 in 開催日 column when newer event history exists"
539+
end
540+
end
380541
end

0 commit comments

Comments
 (0)