Files
step3/tests/donation_ui_test.gd

50 lines
1.8 KiB
GDScript

extends SceneTree
var failures := 0
func _initialize() -> void:
call_deferred("_run")
func _run() -> void:
var theme_service = root.get_node("UIThemeService")
var prior_dark_mode: bool = theme_service.is_dark_mode()
var host := Control.new()
host.size = Vector2(1280, 800)
root.add_child(host)
var screen = load("res://scripts/ui/donation_screen.gd").new()
screen.size = host.size
host.add_child(screen)
await process_frame
_assert(screen.content_grid.columns == 2, "wide donation layouts should use two columns")
_assert(screen.selected_amount_cents == 500, "the default preset should be $5")
_assert(screen.donate_button.text.contains("$5.00"), "the donation action should state the selected amount")
screen.size = Vector2(760, 800)
screen._update_layout()
_assert(screen.content_grid.columns == 1, "narrow donation layouts should stack")
screen.size = Vector2(360, 800)
screen._update_layout()
_assert(screen.preset_grid.columns == 2, "phone donation layouts should use a two-column amount grid")
screen.custom_amount.text = "4"
screen._on_custom_amount_changed("4")
await process_frame
_assert(screen.donate_button.disabled, "amounts below $5 should disable checkout")
theme_service.set_dark_mode(false)
await process_frame
var light_box := screen.mission_panel.get_theme_stylebox("panel") as StyleBoxFlat
_assert(light_box.bg_color.is_equal_approx(Color.WHITE), "donation cards should use light surfaces in light mode")
_assert(screen.muted_labels[0].get_theme_color("font_color").is_equal_approx(Color("64748b")),
"secondary donation text should use the readable light-mode color")
host.queue_free()
await process_frame
theme_service.set_dark_mode(prior_dark_mode)
quit(1 if failures > 0 else 0)
func _assert(condition: bool, message: String) -> void:
if condition:
return
failures += 1
push_error(message)