Integration QA Checklist
Refer to the following QA checklist during the integration testing:
For Analytics and Save State Method
| Analytic Event | Description |
|---|---|
| Game load | The game load event should be triggered only when the game has fully loaded to 100%. |
| Game start | - Triggered only the first time the user starts the game after launching it. - If the user clicks the play button again in the same session, the replay event should be triggered instead. |
| Game end | - Fires when the user loses all lives or exits the game. - For multi-life games, trigger only after all lives are lost or on premature exit. - For level-based games, include level information in this event. |
| Game replay | - The start event fires on the user’s first play. - Any subsequent play should trigger the replay event. - Replay buttons and restarting after loss should also trigger replay instead of start. |
| Rewarded ad | - Fires as soon as the user opts to watch a rewarded ad. - Triggers before the ad starts. - successCb and failureCb should be passed as parameters. |
| Game_life_end | - Fires each time a life is lost. - Relevant in games where an ad is shown for extra lives. |
| ingame_transactions | - Fires when a user spends coins or virtual currency to buy in-game items. |
| game_milestone | - Fires when the player or team hits a predefined milestone. - Include milestone details in the event. |
| game_level | Fires when: - The user starts the game. - The user replays the game. - The user progresses to a new level. - Always include level info. |
| level_completed | - Fires when any level is completed. - Must include level info to track completion accurately. |
| progressBar(percentage) | - Pass the current loading percentage to update the loading screen’s progress bar. |
| saveUserState(state: any) | Key Checks: - Ensure correct request structure. - Index must be updated. - Use valid JSON format. - gameId and userId must be dynamic.- Handle both success and failure responses. |
| GetUserState(userId: string) | Key Checks: - userId must be correctly passed.- Ensure full state is retrieved properly. - Use GetUserStateByIndex for partial retrieval.- Handle cases of empty/missing data. |
| Common Mistakes to Avoid | 🚫 Hardcoding userId, gameId, or index.🚫 Not handling API failures or malformed responses. |
For Game play and ads
| Scenarios | Description |
|---|---|
| Game music during loading | The game music should not play while the game is loading. |
| Sticky ad interactivity | The sticky ad should be clickable and must not cover any game elements or buttons at any stage of the game. |
| Ad click behavior | When the user clicks the ad, they should be redirected to a new tab with the ad URL. If the user clicks the back button, the ad tab should close, and the user should return to the same game page where they left off. The game should pause when the user is redirected to the ad page, and resume from the same state when they return. |
| Game music during ad interaction | If the user clicks the sticky ad, the game music should stop playing in the background and should not resume while the ad is open. |
| Game music during Replay or Rewarded ads | The game music should not play during replay or rewarded ads. If the user opts for a rewarded ad, the reward should only be granted if the ad is watched in full. If the user closes the ad in the middle, no reward should be granted. After closing the replay/rewarded ad, the game should continue as per the normal flow. |
| Score reporting | The developers should correctly pass the score and high score in the game end event. These values are used to display the leaderboard to all users. |
| Game music or sound mute handling | If the user mutes the game sound/music, the music/sound should remain muted for the entire session, including during game replays or after watching ads, until the user unmutes it. |
| Ad no-fill handling | For sticky ads: If the ad slot returns no fill, the slot should be destroyed, and nothing should be displayed in that area. |
| Replay ads | If no ad is available, the game should continue as normal. |
| Rewarded ads | If no ad is available, the reward should still be granted, and the game should continue as per the usual flow. |
| Game music on Leaderboard | Game music should not come on LB and should not run on background when the LB displaying |
| ReplayEvent | In ads.js, the defined a replayEvent() method should not be overridden and changes in definition will not be acceptable. The same replayEvent should be used to replay the game and from leaderboard. |
| rewardeEvent | The rewardEvent defined in ads.js shouldn't be overridden and method definition should not be changed. |
| Loading bar | The progress bar should run smooth from 0 to 100 |
| Required methods | Define all required methods and sync with the UI (for example: pauseEvent() method should also change the mute button UI accordingly etc) |
| Type errors in console | Please check for any type errors appearing in the console, as they may affect the gameplay. |
| Game Name and Publisher Name | Ensure the game name and publisher name in ads.js match the game build. |
| index.html | Keep the index.html file clean by moving all method definitions and game logic to separate JavaScript files. This approach reduces game loading time, improves maintainability, and ensures the HTML structure remains minimal and focused on content while JavaScript functionality is modularized in external files. |