diff --git a/contracts/examples/crop/CropProduct.sol b/contracts/examples/crop/CropProduct.sol index d1f10292..d9a6880b 100644 --- a/contracts/examples/crop/CropProduct.sol +++ b/contracts/examples/crop/CropProduct.sol @@ -19,7 +19,7 @@ import {ReferralLib} from "../../type/Referral.sol"; import {RiskId} from "../../type/RiskId.sol"; import {RequestId} from "../../type/RequestId.sol"; import {Seconds, SecondsLib} from "../../type/Seconds.sol"; -import {Str} from "../../type/String.sol"; +import {Str, StrLib} from "../../type/String.sol"; import {Timestamp, TimestampLib} from "../../type/Timestamp.sol"; import {UFixed, UFixedLib} from "../../type/UFixed.sol"; @@ -29,6 +29,9 @@ contract CropProduct is Product { + // Events + event LogCropPolicyCreated(NftId policyNftId); + // Custom errors error ErrorInvalidId(string id); error ErrorRecordAlreadyExists(string id); @@ -92,7 +95,6 @@ contract CropProduct is Str [] internal _crops; mapping(Str id => RiskId riskId) internal _riskId; - mapping(RiskId riskId => RequestId requestId) internal _requests; // GIF V3 specifics NftId internal _defaultBundleNftId; @@ -274,6 +276,8 @@ contract CropProduct is _collectPremium( policyNftId, TimestampLib.zero()); // keep activation timestamp + + emit LogCropPolicyCreated(policyNftId); } @@ -358,6 +362,14 @@ contract CropProduct is function seasons() public view returns (Str [] memory) { return _seasons; } function crops() public view returns (Str [] memory) { return _crops; } + function getRiskId(Str id) + external + view + returns (RiskId riskId) + { + return _riskId[id]; + } + function getRisk(RiskId riskId) public view @@ -411,7 +423,13 @@ contract CropProduct is return sumInsuredAmount.multiplyWith(payoutFactor); } - function getRequestForRisk(RiskId riskId) public view returns (RequestId requestId) { return _requests[riskId]; } + function toStr(string memory str) public pure returns (Str) { + return StrLib.toStr(str); + } + + function toString(Str str) public pure returns (string memory) { + return StrLib.toString(str); + } //--- internal functions ------------------------------------------------// diff --git a/test/examples/crop/CropProduct.t.sol b/test/examples/crop/CropProduct.t.sol index 05113c8f..1489bb0f 100644 --- a/test/examples/crop/CropProduct.t.sol +++ b/test/examples/crop/CropProduct.t.sol @@ -36,19 +36,15 @@ contract CropProductTest is CropBaseTest { } - function approveProductTokenHandler() public { - // approve flight product to buy policies - vm.startPrank(customer); - accountingToken.approve( - address(cropProduct.getTokenHandler()), - accountingToken.balanceOf(customer)); - vm.stopPrank(); + function test_setUp() public { + assertEq(address(cropProduct), registry.getObjectAddress(cropProductNftId), "unexpected product address"); + assertEq(address(cropProduct.getToken()), address(accountingToken), "unexpected token address"); } function test_cropProductSetup() public { // GIVEN - setp from flight base test - approveProductTokenHandler(); + _approveProductTokenHandler(); _printAuthz(instance.getInstanceAdmin(), "instance"); @@ -155,6 +151,8 @@ contract CropProductTest is CropBaseTest { vm.stopPrank(); // THEN + assertTrue(riskId.toInt() > 0, "unexpected risk id (zero)"); + assertEq(riskId.toInt(), cropProduct.getRiskId(riskIdStr).toInt(), "unexpected risk id"); assertEq(instanceReader.risks(cropProductNftId), 1, "unexpected risk count"); assertTrue(instanceReader.getRiskId(cropProductNftId, 0) == riskId, "unexpected risk id"); @@ -329,6 +327,20 @@ contract CropProductTest is CropBaseTest { } + function test_cropProductStringHelper() public { + // GIVEN + // string memory helloString = unicode"hello wörld!"; + string memory helloString = "hello world!"; + + // WHEN + Str helloStr = cropProduct.toStr(helloString); + + // THEN + assertEq(helloStr.toString(), helloString, "unexpected string (a)"); + assertEq(cropProduct.toString(helloStr), helloString, "unexpected string (b)"); + } + + function _createSeason(string memory nanoId) internal returns (Str seasonId) { seasonId = StrLib.toStr(nanoId); uint16 year = 2025; @@ -398,4 +410,13 @@ contract CropProductTest is CropBaseTest { premiumAmount); vm.stopPrank(); } + + + function _approveProductTokenHandler() internal { + vm.startPrank(customer); + accountingToken.approve( + address(cropProduct.getTokenHandler()), + accountingToken.balanceOf(customer)); + vm.stopPrank(); + } } \ No newline at end of file