1
0
mirror of https://github.com/jcwimer/wrestlingApp synced 2026-03-25 01:14:43 +00:00

Added a separate table to record background job status for tournaments and fixed migrations/schemas for solid dbs. Foreign key constraints are now added to the migrations where we do belongs_to.

This commit is contained in:
2025-04-15 16:16:44 -04:00
parent 4828d9b876
commit 6e61a7245a
37 changed files with 678 additions and 1169 deletions

View File

@@ -0,0 +1,130 @@
require "test_helper"
class TournamentJobStatusTest < ActiveSupport::TestCase
setup do
@tournament = tournaments(:one)
# Create a second tournament
@tournament_two = Tournament.create!(
name: "Second Tournament",
address: "Some Address",
director: "Test Director",
director_email: "test@example.com",
tournament_type: "Pool to bracket",
date: Date.today,
is_public: true
)
# Create fresh test data for each test
@queued_job = TournamentJobStatus.create!(
tournament: @tournament,
job_name: "Test Queued Job",
status: "Queued",
details: "Test job details"
)
@running_job = TournamentJobStatus.create!(
tournament: @tournament,
job_name: "Test Running Job",
status: "Running",
details: "Test running job details"
)
@errored_job = TournamentJobStatus.create!(
tournament: @tournament,
job_name: "Test Errored Job",
status: "Errored",
details: "Test error message"
)
# Create job for another tournament
@another_tournament_job = TournamentJobStatus.create!(
tournament: @tournament_two,
job_name: "Another Tournament Job",
status: "Running",
details: "Different tournament test"
)
end
teardown do
# Clean up test data
TournamentJobStatus.destroy_all
@tournament_two.destroy if @tournament_two.present?
end
test "should be valid with required fields" do
job_status = TournamentJobStatus.new(
tournament: @tournament,
job_name: "Test Job",
status: "Queued"
)
assert job_status.valid?
end
test "should require tournament" do
job_status = TournamentJobStatus.new(
job_name: "Test Job",
status: "Queued"
)
assert_not job_status.valid?
end
test "should require job_name" do
job_status = TournamentJobStatus.new(
tournament: @tournament,
status: "Queued"
)
assert_not job_status.valid?
end
test "should require status" do
job_status = TournamentJobStatus.new(
tournament: @tournament,
job_name: "Test Job"
)
job_status.status = nil
job_status.valid?
assert_includes job_status.errors[:status], "can't be blank"
end
test "status should be one of the allowed values" do
job_status = TournamentJobStatus.new(
tournament: @tournament,
job_name: "Test Job",
status: "Invalid Status"
)
assert_not job_status.valid?
["Queued", "Running", "Errored"].each do |valid_status|
job_status.status = valid_status
assert job_status.valid?, "Status #{valid_status} should be valid"
end
end
test "active scope should exclude errored jobs" do
active_jobs = TournamentJobStatus.active
assert_includes active_jobs, @queued_job
assert_includes active_jobs, @running_job
assert_not_includes active_jobs, @errored_job
end
test "for_tournament should return only jobs for a specific tournament" do
tournament_one_jobs = TournamentJobStatus.for_tournament(@tournament)
assert_equal 3, tournament_one_jobs.count
assert_includes tournament_one_jobs, @queued_job
assert_includes tournament_one_jobs, @running_job
assert_includes tournament_one_jobs, @errored_job
assert_not_includes tournament_one_jobs, @another_tournament_job
end
test "complete_job should remove jobs with matching tournament_id and job_name" do
job_count_before = TournamentJobStatus.count
assert_difference 'TournamentJobStatus.count', -1 do
TournamentJobStatus.complete_job(@tournament.id, "Test Running Job")
end
assert_nil TournamentJobStatus.find_by(id: @running_job.id)
end
end