def METHOD_NAME(self):
    """Give the associate editor's journal form a full workout"""
    # we start by constructing it from source
    formulaic_context = JournalFormFactory.context("associate_editor")
    fc = formulaic_context.processor(source=models.Journal(**JOURNAL_SOURCE))
    # fc = formcontext.JournalFormFactory.get_form_context(role="associate_editor", source=models.Journal(**JOURNAL_SOURCE))
    assert isinstance(fc, AssEdJournalReview)
    assert fc.form is not None
    assert fc.source is not None
    assert fc.form_data is None
    # now construct it from form data (with a known source)
    fc = formulaic_context.processor(
        formdata=JOURNAL_FORM,
        source=models.Journal(**JOURNAL_SOURCE)
    )
    assert isinstance(fc, AssEdJournalReview)
    assert fc.form is not None
    assert fc.source is not None
    assert fc.form_data is not None
    # test each of the workflow components individually ...
    # run the validation itself
    assert fc.validate(), fc.form.errors
    # run the crosswalk (no need to look in detail, xwalks are tested elsewhere)
    fc.form2target()
    assert fc.target is not None
    # patch the target with data from the source
    fc.patch_target()
    assert fc.target.created_date == "2000-01-01T00:00:00Z"
    assert fc.target.id == "abcdefghijk_journal"
    assert len(fc.target.notes) == 2
    assert 'fake_account_id__b' in {n.get('author_id') for n in fc.target.notes}
    assert fc.target.owner == "publisher"
    assert fc.target.editor_group == "editorgroup"
    assert fc.target.editor == "associate"
    assert fc.target.bibjson().replaces == ["1111-1111"]
    assert fc.target.bibjson().is_replaced_by == ["2222-2222"]
    assert fc.target.bibjson().discontinued_date == "2001-01-01"
    assert fc.target.current_application == "qwertyuiop"
    related = fc.target.related_applications
    assert len(related) == 2
    assert related[0].get("application_id") == "asdfghjkl"
    assert related[0].get("date_accepted") == "2018-01-01T00:00:00Z"
    assert related[1].get("application_id") == "zxcvbnm"
    assert related[1].get("date_accepted") is None
    # now do finalise (which will also re-run all of the steps above)
    fc.finalise()
    assert True # gives us a place to drop a break point later if we need it