@@ -137,6 +137,40 @@ contract MultiwrapTest is BaseTest {
137137 assertEq (uriForWrappedToken, multiwrap.tokenURI (expectedIdForWrappedToken));
138138 }
139139
140+ /*
141+ * note: Testing state changes; token owner calls `wrap` to wrap native tokens.
142+ */
143+ function test_state_wrap_nativeTokens () public {
144+ uint256 expectedIdForWrappedToken = multiwrap.nextTokenIdToMint ();
145+ address recipient = address (0x123 );
146+
147+ ITokenBundle.Token[] memory nativeTokenContentToWrap = new ITokenBundle.Token [](1 );
148+
149+ vm.deal (address (tokenOwner), 100 ether);
150+ nativeTokenContentToWrap[0 ] = ITokenBundle.Token ({
151+ assetContract: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE ,
152+ tokenType: ITokenBundle.TokenType.ERC20 ,
153+ tokenId: 0 ,
154+ totalAmount: 10 ether
155+ });
156+
157+ vm.prank (address (tokenOwner));
158+ multiwrap.wrap { value: 10 ether }(nativeTokenContentToWrap, uriForWrappedToken, recipient);
159+
160+ assertEq (expectedIdForWrappedToken + 1 , multiwrap.nextTokenIdToMint ());
161+
162+ ITokenBundle.Token[] memory contentsOfWrappedToken = multiwrap.getWrappedContents (expectedIdForWrappedToken);
163+ assertEq (contentsOfWrappedToken.length , nativeTokenContentToWrap.length );
164+ for (uint256 i = 0 ; i < contentsOfWrappedToken.length ; i += 1 ) {
165+ assertEq (contentsOfWrappedToken[i].assetContract, nativeTokenContentToWrap[i].assetContract);
166+ assertEq (uint256 (contentsOfWrappedToken[i].tokenType), uint256 (nativeTokenContentToWrap[i].tokenType));
167+ assertEq (contentsOfWrappedToken[i].tokenId, nativeTokenContentToWrap[i].tokenId);
168+ assertEq (contentsOfWrappedToken[i].totalAmount, nativeTokenContentToWrap[i].totalAmount);
169+ }
170+
171+ assertEq (uriForWrappedToken, multiwrap.tokenURI (expectedIdForWrappedToken));
172+ }
173+
140174 /**
141175 * note: Testing event emission; token owner calls `wrap` to wrap owned tokens.
142176 */
@@ -235,6 +269,27 @@ contract MultiwrapTest is BaseTest {
235269 multiwrap.wrap (wrappedContent, uriForWrappedToken, recipient);
236270 }
237271
272+ /**
273+ * note: Testing revert condition; token owner calls `wrap` with insufficient value when wrapping native tokens.
274+ */
275+ function test_revert_wrap_nativeTokens_insufficientValue () public {
276+ address recipient = address (0x123 );
277+
278+ ITokenBundle.Token[] memory nativeTokenContentToWrap = new ITokenBundle.Token [](1 );
279+
280+ vm.deal (address (tokenOwner), 100 ether);
281+ nativeTokenContentToWrap[0 ] = ITokenBundle.Token ({
282+ assetContract: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE ,
283+ tokenType: ITokenBundle.TokenType.ERC20 ,
284+ tokenId: 0 ,
285+ totalAmount: 10 ether
286+ });
287+
288+ vm.prank (address (tokenOwner));
289+ vm.expectRevert ("msg.value != amount " );
290+ multiwrap.wrap (nativeTokenContentToWrap, uriForWrappedToken, recipient);
291+ }
292+
238293 /**
239294 * note: Testing revert condition; token owner calls `wrap` to wrap un-owned ERC20 tokens.
240295 */
0 commit comments