ManaSettlement.t.sol

Обзор файла

ManaSettlement.t.sol — это тестовый контракт, написанный на Solidity с использованием фреймворка Forge (часть Foundry). Он предназначен для комплексного модульного тестирования смарт-контракта ManaSettlement.sol, который управляет состоянием игроков в игре, связанной с токеном Mana (ManaToken.sol).

Данный файл реализует тесты для проверки:

Используемые библиотеки:


Классы и основные функции

Контракт ManaSettlementTest

Главный тестовый контракт, расширяет Test из Forge для использования встроенных тестовых возможностей.

Переменные

События (для проверки эмиссии событий в тестах)


Основные методы

setUp()

Инициализация тестовой среды:

Использование: вызывается автоматически перед каждым тестом.


Тесты конструктора


Тесты инициализации ролей


Тесты регистрации игрока


Тесты обновления состояния игрока


Тесты пакетного обновления состояний


Тесты управления балансом маны


Тесты управления достижениями


Тесты функций просмотра состояния


Тесты паузы и возобновления


Fuzz тесты


Тесты поддержки интерфейсов и констант


Важные детали реализации и алгоритмы


Взаимодействие с другими частями системы


Пример использования (фрагмент из теста регистрации игрока)

function test_RegisterPlayer() public {
    assertFalse(manaSettlement.isPlayerRegistered(player1));
    
    vm.prank(gameManager); // Эмуляция вызова от gameManager
    manaSettlement.registerPlayer(player1); 
    
    assertTrue(manaSettlement.isPlayerRegistered(player1));
    assertEq(manaSettlement.totalPlayers(), 1);
    
    ManaSettlement.PlayerProfile memory profile = manaSettlement.getPlayerProfile(player1);
    assertEq(profile.level, 1);
    assertEq(profile.experience, 0);
    assertEq(profile.rating, 1000);
    assertEq(profile.lastActionTimestamp, uint48(block.timestamp));
}

Mermaid диаграмма: структура класса ManaSettlementTest

classDiagram
    class ManaSettlementTest {
        +ManaSettlement manaSettlement
        +ManaToken manaToken
        +address admin
        +address gameManager
        +address pauser
        +address player1
        +address player2
        +address player3
        +setUp()
        +test_Constructor()
        +test_RegisterPlayer()
        +test_UpdatePlayerState()
        +test_BatchUpdatePlayerStates()
        +test_UpdatePlayerManaBalance()
        +test_AddPlayerAchievement()
        +test_GetPlayerState()
        +test_Pause()
        +testFuzz_UpdatePlayerManaBalance(uint256)
        +testFuzz_RegisterMultiplePlayers(uint8)
        +test_SupportsInterface()
        +test_RoleConstants()
    }

Итоги

Файл ManaSettlement.t.sol — это полный набор тестов для контракта ManaSettlement, обеспечивающий надёжность, безопасность и корректность управления состояниями игроков в игровой экосистеме с токеном Mana. Тесты охватывают широкий спектр сценариев, включая авторизацию, обработку ошибок, массовые обновления и интеграцию с токеном, что делает их ключевым элементом в процессе разработки и поддержки смарт-контракта.