Test match swaps in follower sync e2e
This commit is contained in:
parent
99538a3343
commit
6f0ca455f7
|
|
@ -50,6 +50,65 @@ RSpec.describe 'Tournament follower sync HTTP E2E' do
|
||||||
expect(tournament_signature(follower)).to eq(tournament_signature(source))
|
expect(tournament_signature(follower)).to eq(tournament_signature(source))
|
||||||
expect(synced_team_id_pairs(source: source, follower: follower)).not_to be_empty
|
expect(synced_team_id_pairs(source: source, follower: follower)).not_to be_empty
|
||||||
|
|
||||||
|
log_phase!('swap matches on leader and verify follower behavior')
|
||||||
|
source_group_stage = source.fetch(:stages).find { |stage| stage.fetch(:level) == -1 }
|
||||||
|
first_source_group = source_group_stage.fetch(:groups).sort_by { |group| group.fetch(:number) }.first
|
||||||
|
second_source_group = source_group_stage.fetch(:groups).sort_by { |group| group.fetch(:number) }[1]
|
||||||
|
first_group_matches = first_source_group.fetch(:matches).sort_by { |match| match.fetch(:position) }
|
||||||
|
first_position_match = first_group_matches.fetch(0)
|
||||||
|
fourth_position_match = first_group_matches.fetch(3)
|
||||||
|
wrong_group_match = second_source_group.fetch(:matches).sort_by { |match| match.fetch(:position) }.first
|
||||||
|
follower_group_stage = follower.fetch(:stages).find { |stage| stage.fetch(:level) == -1 }
|
||||||
|
first_follower_group = follower_group_stage.fetch(:groups).sort_by { |group| group.fetch(:number) }.first
|
||||||
|
follower_first_position_match = first_follower_group.fetch(:matches).find do |match|
|
||||||
|
match_team_names(match) == match_team_names(first_position_match)
|
||||||
|
end
|
||||||
|
follower_fourth_position_match = first_follower_group.fetch(:matches).find do |match|
|
||||||
|
match_team_names(match) == match_team_names(fourth_position_match)
|
||||||
|
end
|
||||||
|
|
||||||
|
leader_swap = source_owner_client.patch("/matches/#{first_position_match.fetch(:id)}/swap", body: {
|
||||||
|
other_match_id: fourth_position_match.fetch(:id)
|
||||||
|
})
|
||||||
|
expect(leader_swap[:status]).to eq(200)
|
||||||
|
expect(leader_swap[:json].map { |match| match.fetch(:position) }).to match_array([
|
||||||
|
first_position_match.fetch(:position),
|
||||||
|
fourth_position_match.fetch(:position)
|
||||||
|
])
|
||||||
|
source = fetch_tournament(client: source_anonymous_client, tournament_id: source.fetch(:id))
|
||||||
|
follower = wait_for_tournament_sync!(source_tournament_id: source.fetch(:id), follower_tournament_id: follower.fetch(:id))
|
||||||
|
expect(tournament_signature(follower)).to eq(tournament_signature(source))
|
||||||
|
expect(group_match_positions(source, group_number: first_source_group.fetch(:number))).to eq(
|
||||||
|
group_match_positions(follower, group_number: first_follower_group.fetch(:number))
|
||||||
|
)
|
||||||
|
expect(group_match_positions(source, group_number: first_source_group.fetch(:number)).fetch(match_team_names(first_position_match))).to eq(
|
||||||
|
fourth_position_match.fetch(:position)
|
||||||
|
)
|
||||||
|
expect(group_match_positions(source, group_number: first_source_group.fetch(:number)).fetch(match_team_names(fourth_position_match))).to eq(
|
||||||
|
first_position_match.fetch(:position)
|
||||||
|
)
|
||||||
|
|
||||||
|
follower_before_invalid_swap = tournament_signature(follower)
|
||||||
|
source_before_invalid_swap = tournament_signature(source)
|
||||||
|
|
||||||
|
wrong_group_swap = source_owner_client.patch("/matches/#{first_position_match.fetch(:id)}/swap", body: {
|
||||||
|
other_match_id: wrong_group_match.fetch(:id)
|
||||||
|
})
|
||||||
|
expect(wrong_group_swap[:status]).to eq(422)
|
||||||
|
expect(wrong_group_swap.dig(:json, :error)).to eq('Matches must be different group matches from the same group')
|
||||||
|
source_after_invalid_swap = fetch_tournament(client: source_anonymous_client, tournament_id: source.fetch(:id))
|
||||||
|
follower_after_invalid_swap = fetch_tournament(client: follower_anonymous_client, tournament_id: follower.fetch(:id))
|
||||||
|
expect(tournament_signature(source_after_invalid_swap)).to eq(source_before_invalid_swap)
|
||||||
|
expect(tournament_signature(follower_after_invalid_swap)).to eq(follower_before_invalid_swap)
|
||||||
|
|
||||||
|
follower_swap = follower_owner_client.patch("/matches/#{follower_first_position_match.fetch(:id)}/swap", body: {
|
||||||
|
other_match_id: follower_fourth_position_match.fetch(:id)
|
||||||
|
})
|
||||||
|
expect(follower_swap[:status]).to eq(423)
|
||||||
|
expect(follower_swap.dig(:json, :error)).to eq('Tournament is in read only follower mode')
|
||||||
|
follower_after_locked_swap = fetch_tournament(client: follower_anonymous_client, tournament_id: follower.fetch(:id))
|
||||||
|
expect(tournament_signature(follower_after_locked_swap)).to eq(follower_before_invalid_swap)
|
||||||
|
|
||||||
log_phase!('tighten playoff cutoff and rename teams')
|
log_phase!('tighten playoff cutoff and rename teams')
|
||||||
update_cutoff = source_owner_client.patch("/tournaments/#{source.fetch(:id)}", body: {
|
update_cutoff = source_owner_client.patch("/tournaments/#{source.fetch(:id)}", body: {
|
||||||
playoff_teams_amount: 4,
|
playoff_teams_amount: 4,
|
||||||
|
|
@ -427,6 +486,24 @@ RSpec.describe 'Tournament follower sync HTTP E2E' do
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def match_team_names(match)
|
||||||
|
match.fetch(:match_scores)
|
||||||
|
.map { |score| score.dig(:team, :name) }
|
||||||
|
.sort
|
||||||
|
.join(' vs ')
|
||||||
|
end
|
||||||
|
|
||||||
|
def group_match_positions(tournament, group_number:)
|
||||||
|
group = tournament.fetch(:stages)
|
||||||
|
.find { |stage| stage.fetch(:level) == -1 }
|
||||||
|
.fetch(:groups)
|
||||||
|
.find { |candidate| candidate.fetch(:number) == group_number }
|
||||||
|
|
||||||
|
group.fetch(:matches).each_with_object({}) do |match, positions|
|
||||||
|
positions[match_team_names(match)] = match.fetch(:position)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def unique_suffix
|
def unique_suffix
|
||||||
@unique_suffix_counter ||= 0
|
@unique_suffix_counter ||= 0
|
||||||
@unique_suffix_counter += 1
|
@unique_suffix_counter += 1
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue