98 lines
2.8 KiB
Ruby
98 lines
2.8 KiB
Ruby
ENV["RAILS_ENV"] ||= "test"
|
|
require_relative "../test_helper"
|
|
|
|
class RefactoringVerificationTest < ActiveSupport::TestCase
|
|
def setup
|
|
@game = Game.create!(
|
|
title: "Refactor Test #{Time.now.to_r}",
|
|
status: "recruiting",
|
|
participants_count: 7,
|
|
is_solo_mode: true,
|
|
victory_sc_count: 18,
|
|
scoring_system: "none"
|
|
)
|
|
end
|
|
|
|
# Mock Client Class
|
|
class MockClient
|
|
def initialize(initial_state: {}, possible_orders: {}, render_result: "<svg>...</svg>", process_result: nil, auto_orders: nil, validate_result: {})
|
|
@initial_state = initial_state
|
|
@possible_orders = possible_orders
|
|
@render_result = render_result
|
|
@process_result = process_result
|
|
@auto_orders = auto_orders
|
|
@validate_result = validate_result
|
|
end
|
|
|
|
def api_game_initial_state(map_name = "standard")
|
|
@initial_state
|
|
end
|
|
|
|
def api_render(game_state, orders: nil, incl_orders: true, incl_abbrev: true)
|
|
@render_result
|
|
end
|
|
|
|
def api_calculate_possible_orders(game_state, power_name: "", by_power: false)
|
|
@possible_orders
|
|
end
|
|
|
|
def api_calculate_process(game_state, orders)
|
|
@process_result
|
|
end
|
|
|
|
def api_calculate_validate(game_state, orders)
|
|
@validate_result
|
|
end
|
|
|
|
def api_calculate_auto_orders(game_state, power_name)
|
|
@auto_orders
|
|
end
|
|
end
|
|
|
|
test "GameSetupService creates initial turn" do
|
|
mock_client = MockClient.new(
|
|
initial_state: { "game_state" => { "name" => "Spring 1901" } },
|
|
possible_orders: { "FRANCE" => [] }
|
|
)
|
|
|
|
service = GameSetupService.new(@game, client: mock_client)
|
|
result = service.setup_initial_turn
|
|
|
|
assert result[:success], "Service failed: #{result[:message]}"
|
|
assert_equal 1, @game.turns.count
|
|
assert_equal "Spring 1901", @game.turns.first.phase
|
|
end
|
|
|
|
test "OrderSubmissionService submits orders" do
|
|
turn = @game.turns.create!(number: 1, game_state: { "name" => "S1901" })
|
|
user = User.create!(username: "TestUser#{Time.now.to_r}", email: "test#{Time.now.to_r}@example.com", password: "password")
|
|
|
|
mock_client = MockClient.new
|
|
|
|
service = OrderSubmissionService.new(turn, user, client: mock_client)
|
|
orders = { "A PAR" => "H" }
|
|
|
|
result = service.submit(power: "FRANCE", orders: orders)
|
|
|
|
assert result[:success]
|
|
turn.reload
|
|
assert_equal "H", turn.orders["FRANCE"]["A PAR"]
|
|
end
|
|
|
|
test "TurnProcessingService processes turn" do
|
|
turn = @game.turns.create!(number: 1, game_state: { "name" => "S1901" })
|
|
|
|
mock_client = MockClient.new(
|
|
process_result: { "game_state" => { "name" => "Fall 1901" } },
|
|
possible_orders: {}
|
|
)
|
|
|
|
service = TurnProcessingService.new(turn, client: mock_client)
|
|
result = service.process(force: "true")
|
|
|
|
assert result[:success], result[:message]
|
|
assert_equal 2, @game.turns.count
|
|
assert_equal "Fall 1901", @game.turns.last.phase
|
|
end
|
|
end
|