import { TestCase } from "./framework/test_case.js"; import { setupDom, teardownDom, FakeAudio } from "./framework/dom.js"; import { CREDIT_SECTIONS } from "../client/js/credits.js"; import { audio } from "../client/js/audio.js"; export class CreditsTest extends TestCase { test_credits_name_the_required_sources() { const text = JSON.stringify(CREDIT_SECTIONS); for (const needle of [ "game-icons.net", "opengameart.org", "Ted Kerr", "Delapouite", "Lorc", "Mapbox Maki", ]) { this.assertTrue(text.includes(needle), `credits mention ${needle}`); } } async test_menu_button_opens_the_credits_and_clicks_sound() { const env = await setupDom(); try { FakeAudio.reset(); await import(`../client/js/app.js?credits=${Date.now()}`); audio.setEnabled(true); this.assertTrue(env.$("#modal-credits").hasClass("hidden")); env.$("#menu-credits").click(); this.assertFalse(env.$("#modal-credits").hasClass("hidden")); this.assertGreaterOrEqual(env.$("#credits-list .credits-title").length, 3); this.assertTrue( FakeAudio.playedSources.includes("assets/sounds/button_click.mp3"), "a button click plays the click effect" ); env.$("#modal-credits .modal-close").click(); this.assertTrue(env.$("#modal-credits").hasClass("hidden")); } finally { teardownDom(env); } } async test_audio_toggle_relabels_both_buttons() { const env = await setupDom(); try { await import(`../client/js/app.js?audio=${Date.now()}`); audio.setEnabled(true); this.assertEqual(env.$("#menu-audio").text(), "Sound: On"); this.assertEqual(env.$("#audio-button").text(), "Sound on"); env.$("#menu-audio").click(); this.assertFalse(audio.enabled); this.assertEqual(env.$("#menu-audio").text(), "Sound: Off"); env.$("#audio-button").click(); this.assertTrue(audio.enabled); this.assertEqual(env.$("#menu-audio").text(), "Sound: On"); } finally { audio.setEnabled(true); teardownDom(env); } } }