code: def test_runner(self):
      def revs(versions):
          return [(v, v + ".py") for v in versions]
  
      runner = MigrationRunner(
          "0.0.1",
          "0.3",
          _revisions=revs(["0.1", "0.2", "0.3"]),
      )
      self.assertEqual(runner.revisions, ["0.1", "0.2", "0.3"])
  
      runner = MigrationRunner(
          "0.1",
          "0.3",
          _revisions=revs(["0.1", "0.2", "0.3"]),
      )
      self.assertEqual(runner.revisions, ["0.2", "0.3"])
  
      runner = MigrationRunner(
          "0.3",
          "0.1",
          _revisions=revs(["0.1", "0.2", "0.3"]),
      )
      self.assertEqual(runner.revisions, ["0.3", "0.2"])
  
      runner = MigrationRunner(
          "0.3",
          "0.0.1",
          _revisions=revs(["0.1", "0.2", "0.3"]),
      )
      self.assertEqual(runner.revisions, ["0.3", "0.2", "0.1"])
  
imports: import time
  import unittest
  from unittest.mock import MagicMock, patch
  import numpy
  import fiftyone
  import fiftyone.constants
  import fiftyone.core.media
  import fiftyone.core.odm
  import fiftyone.core.utils
  from fiftyone.migrations.runner import MigrationRunner
  from decorators import drop_datasets
  from bson import ObjectId
  from fiftyone.core.odm.utils import load_dataset
label_desc: Use image node_id 1 for calling the MigrationTests obj's underlying member method code with example usage: obj.test_runner() and returns: unknown