@@ -1916,6 +1916,137 @@ describe("PerpV2BasisTradingModule", () => {
1916
1916
} ) ;
1917
1917
} ) ;
1918
1918
1919
+ describe ( "#getUpdatedSettledFunding" , async ( ) => {
1920
+ let setToken : SetToken ;
1921
+ let subjectSetToken : Address ;
1922
+
1923
+ const initializeContracts = async ( ) => {
1924
+ const depositQuantity = usdcUnits ( 10 ) ;
1925
+
1926
+ setToken = await issueSetsAndDepositToPerp ( depositQuantity , true ) ;
1927
+
1928
+ await perpBasisTradingModule . connect ( owner . wallet ) . trade (
1929
+ setToken . address ,
1930
+ vETH . address ,
1931
+ ether ( 0.5 ) ,
1932
+ ether ( 5.15 )
1933
+ ) ;
1934
+
1935
+ // Move oracle price up and wait one day
1936
+ await perpSetup . setBaseTokenOraclePrice ( vETH , usdcUnits ( 10.2 ) ) ;
1937
+ await increaseTimeAsync ( ONE_DAY_IN_SECONDS ) ;
1938
+
1939
+ await perpBasisTradingModule . connect ( owner . wallet ) . tradeAndTrackFunding (
1940
+ setToken . address ,
1941
+ vETH . address ,
1942
+ ether ( 0.5 ) ,
1943
+ ether ( 5.15 ) ,
1944
+ ) ;
1945
+ } ;
1946
+
1947
+ const initializeSubjectVariables = async ( ) => {
1948
+ subjectSetToken = setToken . address ;
1949
+ } ;
1950
+
1951
+ cacheBeforeEach ( initializeContracts ) ;
1952
+ beforeEach ( initializeSubjectVariables ) ;
1953
+
1954
+ async function subject ( ) : Promise < BigNumber > {
1955
+ return await perpBasisTradingModule . getUpdatedSettledFunding ( subjectSetToken ) ;
1956
+ }
1957
+
1958
+ describe ( "when pending funding payment is zero" , async ( ) => {
1959
+ it ( "should return current settled funding" , async ( ) => {
1960
+ const settledFundingBefore = await perpBasisTradingModule . settledFunding ( subjectSetToken ) ;
1961
+ const updatedSettledFunding = await subject ( ) ;
1962
+
1963
+ expect ( settledFundingBefore ) . to . be . gt ( ZERO ) ;
1964
+ expect ( updatedSettledFunding ) . to . eq ( settledFundingBefore ) ;
1965
+ } ) ;
1966
+ } ) ;
1967
+
1968
+ describe ( "when pending funding payment is positive" , async ( ) => {
1969
+ beforeEach ( async ( ) => {
1970
+ // Move oracle price up and wait one day
1971
+ await perpSetup . setBaseTokenOraclePrice ( vETH , usdcUnits ( 10.5 ) ) ;
1972
+ await increaseTimeAsync ( ONE_DAY_IN_SECONDS ) ;
1973
+ } ) ;
1974
+
1975
+ it ( "should return correct updated settled funding" , async ( ) => {
1976
+ const settledFundingBefore = await perpBasisTradingModule . settledFunding ( subjectSetToken ) ;
1977
+ const pendingFundingPayment = ( await perpSetup . exchange . getAllPendingFundingPayment ( subjectSetToken ) ) . mul ( - 1 ) ;
1978
+ const expectedSettledFunding = settledFundingBefore . add ( pendingFundingPayment ) ;
1979
+
1980
+ const updatedSettledFunding = await subject ( ) ;
1981
+
1982
+ expect ( pendingFundingPayment ) . to . be . gt ( ZERO ) ;
1983
+ expect ( updatedSettledFunding ) . to . be . gt ( settledFundingBefore ) ;
1984
+ expect ( updatedSettledFunding ) . to . eq ( expectedSettledFunding ) ;
1985
+ } ) ;
1986
+ } ) ;
1987
+
1988
+ describe ( "when pending funding payment is negative" , async ( ) => {
1989
+ describe ( "when absolute settled funding is less than absolute negative funding" , async ( ) => {
1990
+ beforeEach ( async ( ) => {
1991
+ // Move oracle price down and wait one day
1992
+ await perpSetup . setBaseTokenOraclePrice ( vETH , usdcUnits ( 9.5 ) ) ;
1993
+ await increaseTimeAsync ( ONE_DAY_IN_SECONDS ) ;
1994
+ } ) ;
1995
+
1996
+ it ( "verify testing conditions" , async ( ) => {
1997
+ const settledFundingBefore = await perpBasisTradingModule . settledFunding ( subjectSetToken ) ;
1998
+ const pendingFundingBefore = await perpSetup . exchange . getAllPendingFundingPayment ( subjectSetToken ) ;
1999
+
2000
+ expect ( pendingFundingBefore . abs ( ) ) . to . be . gt ( settledFundingBefore ) ;
2001
+ } ) ;
2002
+
2003
+ it ( "should return correct updated settled funding (zero)" , async ( ) => {
2004
+ const updatedSettledFunding = await subject ( ) ;
2005
+ expect ( updatedSettledFunding ) . to . eq ( ZERO ) ;
2006
+ } ) ;
2007
+ } ) ;
2008
+
2009
+ describe ( "when absolute settled funding is greater then absolute negative pending funding" , async ( ) => {
2010
+ beforeEach ( async ( ) => {
2011
+ // Move oracle price up and wait one day
2012
+ await perpSetup . setBaseTokenOraclePrice ( vETH , usdcUnits ( 11 ) ) ;
2013
+ await increaseTimeAsync ( ONE_DAY_IN_SECONDS ) ;
2014
+
2015
+ // Trade to accrue pending funding to tracked settled funding
2016
+ await perpBasisTradingModule . connect ( owner . wallet ) . tradeAndTrackFunding (
2017
+ setToken . address ,
2018
+ vETH . address ,
2019
+ ether ( 1 ) ,
2020
+ ether ( 10.15 )
2021
+ ) ;
2022
+
2023
+ // Move oracle price down and wait one day
2024
+ await perpSetup . setBaseTokenOraclePrice ( vETH , usdcUnits ( 9.8 ) ) ;
2025
+ await increaseTimeAsync ( ONE_DAY_IN_SECONDS ) ;
2026
+ } ) ;
2027
+
2028
+ it ( "verify testing conditions" , async ( ) => {
2029
+ const settledFundingBefore = await perpBasisTradingModule . settledFunding ( subjectSetToken ) ;
2030
+ const pendingFundingBefore = await perpSetup . exchange . getAllPendingFundingPayment ( subjectSetToken ) ;
2031
+
2032
+ expect ( settledFundingBefore . abs ( ) ) . to . be . gt ( pendingFundingBefore . abs ( ) ) ;
2033
+ } ) ;
2034
+
2035
+ it ( "should return correct updated settled funding" , async ( ) => {
2036
+ const settledFundingBefore = await perpBasisTradingModule . settledFunding ( subjectSetToken ) ;
2037
+ const pendingFundingPayment = ( await perpSetup . exchange . getAllPendingFundingPayment ( subjectSetToken ) ) . mul ( - 1 ) ;
2038
+ const expectedSettledFunding = settledFundingBefore . add ( pendingFundingPayment ) ;
2039
+
2040
+ const updatedSettledFunding = await subject ( ) ;
2041
+
2042
+ expect ( pendingFundingPayment ) . to . be . lt ( ZERO ) ;
2043
+ expect ( updatedSettledFunding ) . to . be . lt ( settledFundingBefore ) ;
2044
+ expect ( updatedSettledFunding ) . to . eq ( expectedSettledFunding ) ;
2045
+ } ) ;
2046
+ } ) ;
2047
+ } ) ;
2048
+ } ) ;
2049
+
1919
2050
describe ( "#updateFeeRecipient" , async ( ) => {
1920
2051
let setToken : SetToken ;
1921
2052
let isInitialized : boolean ;
0 commit comments