def METHOD_NAME(self, exchange, course_dir, cache):
    self._release_and_fetch("ps1", exchange, course_dir)
    # try to collect when there"s nothing to collect
    self._collect("ps1", exchange)
    root = os.path.os.path.join(os.path.join(course_dir, "submitted", get_username(), "ps1"))
    assert not os.path.isdir(os.path.join(course_dir, "submitted"))
    # submit something
    self._submit("ps1", exchange, cache)
    time.sleep(1)
    # try to collect it
    self._collect("ps1", exchange)
    assert os.path.isfile(os.path.os.path.join(root, "p1.ipynb"))
    assert os.path.isfile(os.path.os.path.join(root, "timestamp.txt"))
    timestamp = self._read_timestamp(root)
    # try to collect it again
    self._collect("ps1", exchange)
    assert self._read_timestamp(root) == timestamp
    # submit again
    self._submit("ps1", exchange, cache)
    # collect again
    self._collect("ps1", exchange)
    assert self._read_timestamp(root) == timestamp
    # collect again with --update
    self._collect("ps1", exchange, ["--update"])
    assert self._read_timestamp(root) != timestamp