![見出し画像](https://assets.st-note.com/production/uploads/images/108372173/rectangle_large_type_2_727a3a5e71da4b8d5db2b4fdff78114b.png?width=800)
【完全保存版】AstarのWASMコントラクトにおけるonly_ownerの関数のテストコードについて
0 はじめに
今回は、下のような「set_default」関数のテストコードを書いていきたいと思います。
しかし、#[modifiers(only_owner)]がついており、オーナーしか実行できないようになっています。
![](https://assets.st-note.com/img/1686888192441-pAnPdeMdYP.png?width=800)
今回はこのように、関数の実行者を特定して行う、テストコードについて解説します。
なお、結論としてのテストコードとしては、こちらになります。
![](https://assets.st-note.com/img/1686886006912-4PO1TmItfg.png?width=800)
1 デフォルトアカウントの設定について(Aliceなど)
1 概要
まずは、テストコードの「default_accounts()」を確認します。
![](https://assets.st-note.com/img/1686886037291-tkJLtnKRvi.png?width=800)
下のようになっています。
![](https://assets.st-note.com/img/1686883677392-f4EqjXAZFW.png?width=800)
その名の通り、「Alice」や「Bob」などのデフォルトのアカウントを作る関数です。
2 返り値について
返り値は「test::DefaultAccounts」というジェネリックの型です。
![](https://assets.st-note.com/img/1686881515318-xCJ7alZgH7.png?width=800)
そして、具体的には、「DefaultEnvironment」という型を指定しています。
![](https://assets.st-note.com/img/1686883782570-0mT03Dnqb5.png?width=800)
この形は 「->Result<(), PSP34Error>」などの形と同じですね。
3 test::default_accounts関数について
関数の中身としては、test内のdefault_accountsを実行しています。
![](https://assets.st-note.com/img/1686885482608-PznG1e0IwU.png?width=800)
これにより、AliceやBobなどを使用することができます。
2 インスタンス作成時のオーナー設定について
オーナーの設定は、「new_with_owner」関数で実装しています。
![](https://assets.st-note.com/img/1686886070733-duQLIGXeLd.png?width=800)
こちらが、その「new_with_owner」関数です。
「set_owner」関数を使って、オーナーの設定を行っています。
![](https://assets.st-note.com/img/1686886231349-pY7YMnWPu2.png?width=800)
「set_owner」関数はこちらです。
「ownable」の「owner」というデータに引数を設定しています。
![](https://assets.st-note.com/img/1686886439735-09x4UFQAGi.png?width=800)
そして、「ownable」とは「ownable::Data」の情報であることがわかります。
![](https://assets.st-note.com/img/1686886573449-qD9CzS5HST.png?width=800)
そして、引数に設定するのは、デフォルトのアカウントが入っている中のアリスで設定しています。
![](https://assets.st-note.com/img/1686886675074-LsMTjuchQM.png?width=800)
3 関数呼び出し者の設定について
次に、関数を呼び出す者を設定します。
「set_caller」関数としています。
![](https://assets.st-note.com/img/1686886971602-UvjiV3oiPq.png?width=800)
具体的な処理はこちらです。
「set_caller」関数を実装することで、次の関数の呼び出しを設定した人とすることができます。
![](https://assets.st-note.com/img/1686887030363-tyj6e7lkHF.png?width=800)
4 関数の実行について
次に関数の実行を行います。
ここでは、「set_default」という関数が、前章で設定した、関数呼び出し者で実行されます。
![](https://assets.st-note.com/img/1686887286267-zgnB4jtgaq.png?width=800)
なお、「assert!」は値がtrueであることを確認します。
「is_ok()」関数はResult型の結果がOkならtrueを返します。
![](https://assets.st-note.com/img/1686887589503-vqcu2BBXne.png?width=800)
5 文字列リテラルからの変換について
こちらは補足です。
Rustにおいて、直接書かれた文字列を「文字列リテラル」と呼びます。
文字列リテラルは「str」型です。
![](https://assets.st-note.com/img/1686887876744-ayP3XnCTbl.png?width=800)
これを「String」型に変換しています。
「from」の使い方については、こちらもご参照ください。(バイト配列からAccountId型に変換)
これで、テストが通るようになりました。
今回は以上です。
サポートをしていただけたらすごく嬉しいです😄 いただけたサポートを励みに、これからもコツコツ頑張っていきます😊