code: def test_sample_crop_box(self, mock_randint):
      def rand_min(low, high):
          return low
  
      trans = RandomCrop(min_side_ratio=0.3)
      mock_randint.side_effect = rand_min
      crop_box = trans._sample_crop_box((30, 30), self.data_info.copy())
      assert np.allclose(np.array(crop_box), np.array([0, 0, 25, 10]))
  
      def rand_max(low, high):
          return high - 1
  
      mock_randint.side_effect = rand_max
      crop_box = trans._sample_crop_box((30, 30), self.data_info.copy())
      assert np.allclose(np.array(crop_box), np.array([4, 19, 30, 30]))
  
imports: import copy
  import unittest
  import unittest.mock
  import numpy
  from mmocr.datasets.transforms import FixInvalidPolygon, RandomCrop, RandomRotate, RemoveIgnored, Resize
  from mmocr.utils import poly2shapely
label_desc: Use image node_id 2 for calling the TestRandomCrop obj's underlying member method code with example usage: obj.test_sample_crop_box(mock_randint) and returns: low, unknown