Foundry: организация адресов для тестов
Интересный способ для организации и создания пользовательских адресов для тестов были реализованы в контрактах от Sablier. Давайте посмотрим на нее внимательнее.
Для начала у нас есть структура с адресами необходимых нам пользователей, в которую позже будет удобно добавлять новые адреса:
В самих тестах мы определяем эту структуру в переменную:
Users internal users;
И уже в setUp() мы инициализируем эти адреса:
Сама функция createUser() тоже не совсем проста, там сразу начисляются токены:
Таким образом, мы можем обращаться в тестах к нужному пользователю через users., например, users.admin.
Достаточно простая и удобная система, как вы думаете?
Полный код теста можно посмотреть в репо Sablier.
#foundry #users #setup
Интересный способ для организации и создания пользовательских адресов для тестов были реализованы в контрактах от Sablier. Давайте посмотрим на нее внимательнее.
Для начала у нас есть структура с адресами необходимых нам пользователей, в которую позже будет удобно добавлять новые адреса:
struct Users {
// Default admin for all Sablier V2 contracts.
address payable admin;
// Impartial user.
address payable alice;
// Default stream broker.
address payable broker;
// Malicious user.
address payable eve;
// Default NFT operator.
address payable operator;
// Default stream recipient.
address payable recipient;
// Default stream sender.
}
В самих тестах мы определяем эту структуру в переменную:
Users internal users;
И уже в setUp() мы инициализируем эти адреса:
function setUp() public virtual {
users = Users({
admin: createUser("Admin"),
alice: createUser("Alice"),
broker: createUser("Broker"),
eve: createUser("Eve"),
operator: createUser("Operator"),
recipient: createUser("Recipient"),
sender: createUser("Sender")
});
}
Сама функция createUser() тоже не совсем проста, там сразу начисляются токены:
function createUser(string memory name) internal returns (address payable) {
address payable user = payable(makeAddr(name));
vm.deal({ account: user, newBalance: 100 ether });
deal({ token: address(dai), to: user, give: 1_000_000e18 });
deal({ token: address(usdt), to: user, give: 1_000_000e18 });
return user;
}
Таким образом, мы можем обращаться в тестах к нужному пользователю через users., например, users.admin.
Достаточно простая и удобная система, как вы думаете?
Полный код теста можно посмотреть в репо Sablier.
#foundry #users #setup
👍9