class_docstr: Resuming from a foreach join should work.
  Check that data changes in all downstream steps after resume.
code: def check_results(self, flow, checker):
      from itertools import product
  
      checker.assert_artifact("start", "data", "start")
      checker.assert_artifact("end", "data", "resume")
      stack = next(
          iter(checker.artifact_dict("end", "stack").values())
      )["stack"]
      expected = sorted("".join(p) for p in product(*stack))
      checker.assert_artifact("end", "var", expected)
  
file_path: metaflow/test/core/tests/resume_foreach_join.py
imports: from metaflow_test import MetaflowTest, ExpectationFailed, steps
label_desc: Use image node_id 6 for calling the ResumeForeachJoinTest obj's underlying member method code with example usage: obj.check_results(flow, checker) without return types