{
  "title": "LendingPool: Borrow/repay (stable rate)",
  "description": "Test cases for the borrow function, stable mode.",
  "stories": [
    {
      "description": "User 0 deposits 1000 DAI, user 1 deposits 1 WETH as collateral and borrows 100 DAI at stable rate",
      "actions": [
        {
          "name": "mint",
          "args": {
            "reserve": "DAI",
            "amount": "1000",
            "user": "0"
          },
          "expected": "success"
        },
        {
          "name": "approve",
          "args": {
            "reserve": "DAI",
            "user": "0"
          },
          "expected": "success"
        },
        {
          "name": "deposit",
          "args": {
            "reserve": "DAI",
            "amount": "1000",
            "user": "0"
          },
          "expected": "success"
        },
        {
          "name": "mint",
          "args": {
            "reserve": "WETH",
            "amount": "1",
            "user": "1"
          },
          "expected": "success"
        },
        {
          "name": "approve",
          "args": {
            "reserve": "WETH",
            "user": "1"
          },
          "expected": "success"
        },
        {
          "name": "deposit",
          "args": {
            "reserve": "WETH",

            "amount": "1",
            "user": "1"
          },
          "expected": "success"
        },
        {
          "name": "borrow",
          "args": {
            "reserve": "DAI",
            "amount": "100",
            "borrowRateMode": "stable",
            "user": "1",
            "timeTravel": "365"
          },
          "expected": "success"
        }
      ]
    },
    {
      "description": "User 1 tries to borrow the rest of the DAI liquidity (revert expected)",
      "actions": [
        {
          "name": "borrow",
          "args": {
            "reserve": "DAI",
            "amount": "900",
            "borrowRateMode": "stable",
            "user": "1"
          },
          "expected": "revert",
          "revertMessage": "There is not enough collateral to cover a new borrow"
        }
      ]
    },
    {
      "description": "User 1 repays the half of the DAI borrow after one year",
      "actions": [
        {
          "name": "mint",
          "description": "Mint 10 DAI to cover the interest",
          "args": {
            "reserve": "DAI",
            "amount": "10",
            "user": "1"
          },
          "expected": "success"
        },
        {
          "name": "approve",
          "args": {
            "reserve": "DAI",
            "user": "1"
          },
          "expected": "success"
        },
        {
          "name": "repay",
          "args": {
            "reserve": "DAI",
            "amount": "50",
            "user": "1",
            "onBehalfOf": "1",
            "borrowRateMode": "stable"
          },
          "expected": "success"
        }
      ]
    },
    {
      "description": "User 1 repays the rest of the DAI borrow after one year",
      "actions": [
        {
          "name": "mint",
          "description": "Mint 15 DAI to cover the interest",
          "args": {
            "reserve": "DAI",
            "amount": "15",
            "user": "1"
          },
          "expected": "success"
        },
        {
          "name": "approve",
          "args": {
            "reserve": "DAI",
            "user": "1"
          },
          "expected": "success"
        },
        {
          "name": "repay",
          "args": {
            "reserve": "DAI",
            "amount": "-1",
            "user": "1",
            "onBehalfOf": "1",
            "borrowRateMode": "stable"
          },
          "expected": "success"
        }
      ]
    },
    {
      "description": "User 0 withdraws the deposited DAI plus interest",
      "actions": [
        {
          "name": "withdraw",
          "args": {
            "reserve": "DAI",
            "amount": "-1",
            "user": "0"
          },
          "expected": "success"
        }
      ]
    },
    {
      "description": "User 1 deposits 1000 DAI, user 2 tries to borrow 1000 DAI at a stable rate without any collateral (revert expected)",
      "actions": [
        {
          "name": "mint",
          "args": {
            "reserve": "DAI",
            "amount": "1000",
            "user": "1"
          },
          "expected": "success"
        },
        {
          "name": "approve",
          "args": {
            "reserve": "DAI",
            "user": "1"
          },
          "expected": "success"
        },
        {
          "name": "deposit",
          "args": {
            "reserve": "DAI",
            "amount": "1000",
            "user": "1"
          },
          "expected": "success"
        },
        {
          "name": "borrow",
          "args": {
            "reserve": "DAI",
            "amount": "1000",
            "borrowRateMode": "stable",
            "user": "2"
          },
          "expected": "revert",
          "revertMessage": "The collateral balance is 0"
        }
      ]
    },
    {
      "description": "User 0 deposits 1000 DAI, user 1,2,3,4 deposit 1 WETH each and borrow 100 DAI at stable rate. Everything is repaid, user 0 withdraws",
      "actions": [
        {
          "name": "mint",
          "args": {
            "reserve": "DAI",
            "amount": "1000",
            "user": "0"
          },
          "expected": "success"
        },
        {
          "name": "approve",
          "args": {
            "reserve": "DAI",
            "user": "0"
          },
          "expected": "success"
        },
        {
          "name": "deposit",
          "args": {
            "reserve": "DAI",
            "amount": "1000",
            "user": "0"
          },
          "expected": "success"
        },
        {
          "name": "mint",
          "args": {
            "reserve": "WETH",
            "amount": "1",
            "user": "1"
          },
          "expected": "success"
        },
        {
          "name": "approve",
          "args": {
            "reserve": "WETH",
            "user": "1"
          },
          "expected": "success"
        },
        {
          "name": "deposit",
          "args": {
            "reserve": "WETH",

            "amount": "1",
            "user": "1"
          },
          "expected": "success"
        },
        {
          "name": "borrow",
          "args": {
            "reserve": "DAI",
            "amount": "100",
            "borrowRateMode": "stable",
            "user": "1",
            "timeTravel": "365"
          },
          "expected": "success"
        },
        {
          "name": "mint",
          "args": {
            "reserve": "WETH",
            "amount": "1",
            "user": "2"
          },
          "expected": "success"
        },
        {
          "name": "approve",
          "args": {
            "reserve": "WETH",
            "user": "2"
          },
          "expected": "success"
        },
        {
          "name": "deposit",
          "args": {
            "reserve": "WETH",

            "amount": "1",
            "user": "2"
          },
          "expected": "success"
        },
        {
          "name": "borrow",
          "args": {
            "reserve": "DAI",
            "amount": "100",
            "borrowRateMode": "stable",
            "user": "2",
            "timeTravel": "365"
          },
          "expected": "success"
        },
        {
          "name": "mint",
          "args": {
            "reserve": "WETH",
            "amount": "1",
            "user": "3"
          },
          "expected": "success"
        },
        {
          "name": "approve",
          "args": {
            "reserve": "WETH",
            "user": "3"
          },
          "expected": "success"
        },
        {
          "name": "deposit",
          "args": {
            "reserve": "WETH",

            "amount": "1",
            "user": "3"
          },
          "expected": "success"
        },
        {
          "name": "borrow",
          "args": {
            "reserve": "DAI",
            "amount": "100",
            "borrowRateMode": "stable",
            "user": "3",
            "timeTravel": "365"
          },
          "expected": "success"
        },
        {
          "name": "mint",
          "args": {
            "reserve": "WETH",
            "amount": "1",
            "user": "4"
          },
          "expected": "success"
        },
        {
          "name": "approve",
          "args": {
            "reserve": "WETH",
            "user": "4"
          },
          "expected": "success"
        },
        {
          "name": "deposit",
          "args": {
            "reserve": "WETH",

            "amount": "1",
            "user": "4"
          },
          "expected": "success"
        },
        {
          "name": "borrow",
          "args": {
            "reserve": "DAI",
            "amount": "100",
            "borrowRateMode": "stable",
            "user": "4",
            "timeTravel": "365"
          },
          "expected": "success"
        },
        {
          "name": "mint",
          "description": "Mint 15 DAI to cover the interest",
          "args": {
            "reserve": "DAI",
            "amount": "15",
            "user": "1"
          },
          "expected": "success"
        },
        {
          "name": "approve",
          "args": {
            "reserve": "DAI",
            "user": "1"
          },
          "expected": "success"
        },
        {
          "name": "repay",
          "args": {
            "reserve": "DAI",
            "amount": "-1",
            "user": "1",
            "onBehalfOf": "1",
            "borrowRateMode": "stable"
          },
          "expected": "success"
        },
        {
          "name": "mint",
          "description": "Mint 20 DAI to cover the interest",
          "args": {
            "reserve": "DAI",
            "amount": "20",
            "user": "2"
          },
          "expected": "success"
        },
        {
          "name": "approve",
          "args": {
            "reserve": "DAI",
            "user": "2"
          },
          "expected": "success"
        },
        {
          "name": "repay",
          "args": {
            "reserve": "DAI",
            "amount": "-1",
            "user": "2",
            "onBehalfOf": "2",
            "borrowRateMode": "stable"
          },
          "expected": "success"
        },
        {
          "name": "mint",
          "description": "Mint 30 DAI to cover the interest",
          "args": {
            "reserve": "DAI",
            "amount": "30",
            "user": "3"
          },
          "expected": "success"
        },
        {
          "name": "approve",
          "args": {
            "reserve": "DAI",
            "user": "3"
          },
          "expected": "success"
        },
        {
          "name": "repay",
          "args": {
            "reserve": "DAI",
            "amount": "-1",
            "user": "3",
            "onBehalfOf": "3",
            "borrowRateMode": "stable"
          },
          "expected": "success"
        },
        {
          "name": "mint",
          "description": "Mint 30 DAI to cover the interest",
          "args": {
            "reserve": "DAI",
            "amount": "30",
            "user": "4"
          },
          "expected": "success"
        },
        {
          "name": "approve",
          "args": {
            "reserve": "DAI",
            "user": "4"
          },
          "expected": "success"
        },
        {
          "name": "repay",
          "args": {
            "reserve": "DAI",
            "amount": "-1",
            "user": "4",
            "onBehalfOf": "4",
            "borrowRateMode": "stable"
          },
          "expected": "success"
        },
        {
          "name": "withdraw",
          "args": {
            "reserve": "DAI",
            "amount": "-1",
            "user": "0"
          },
          "expected": "success"
        }
      ]
    },
    {
      "description": "User 0 deposits 1000 DAI, user 1 deposits 2 WETH and borrow 100 DAI at stable rate first, then 100 DAI at variable rate, repays everything. User 0 withdraws",
      "actions": [
        {
          "name": "mint",
          "args": {
            "reserve": "DAI",
            "amount": "1000",
            "user": "0"
          },
          "expected": "success"
        },
        {
          "name": "approve",
          "args": {
            "reserve": "DAI",
            "user": "0"
          },
          "expected": "success"
        },
        {
          "name": "deposit",
          "args": {
            "reserve": "DAI",
            "amount": "1000",
            "user": "0"
          },
          "expected": "success"
        },
        {
          "name": "mint",
          "args": {
            "reserve": "WETH",
            "amount": "2",
            "user": "1"
          },
          "expected": "success"
        },
        {
          "name": "approve",
          "args": {
            "reserve": "WETH",
            "user": "1"
          },
          "expected": "success"
        },
        {
          "name": "deposit",
          "args": {
            "reserve": "WETH",

            "amount": "2",
            "user": "1"
          },
          "expected": "success"
        },
        {
          "name": "borrow",
          "args": {
            "reserve": "DAI",
            "amount": "100",
            "borrowRateMode": "stable",
            "user": "1",
            "timeTravel": "365"
          },
          "expected": "success"
        },
        {
          "name": "borrow",
          "args": {
            "reserve": "DAI",
            "amount": "100",
            "borrowRateMode": "variable",
            "user": "1",
            "timeTravel": "365"
          },
          "expected": "success"
        },
        {
          "name": "mint",
          "description": "Mint 50 DAI to cover the interest",
          "args": {
            "reserve": "DAI",
            "amount": "50",
            "user": "1"
          },
          "expected": "success"
        },
        {
          "name": "approve",
          "args": {
            "reserve": "DAI",
            "user": "1"
          },
          "expected": "success"
        },
        {
          "name": "repay",
          "args": {
            "reserve": "DAI",
            "amount": "-1",
            "user": "1",
            "onBehalfOf": "1",
            "borrowRateMode": "stable"
          },
          "expected": "success"
        },
        {
          "name": "repay",
          "args": {
            "reserve": "DAI",
            "amount": "-1",
            "user": "1",
            "onBehalfOf": "1",
            "borrowRateMode": "variable"
          },
          "expected": "success"
        },
        {
          "name": "withdraw",
          "args": {
            "reserve": "DAI",
            "amount": "-1",
            "user": "0"
          },
          "expected": "success"
        }
      ]
    }
  ]
}