def METHOD_NAME(
    client, phase_factory, proposal_factory, category_factory, area_settings_factory
):
    phase, module, project, proposal = setup_phase(
        phase_factory, proposal_factory, phases.RequestPhase
    )
    area_settings_factory(module=module)
    category = category_factory(module=module)
    user = proposal.creator
    moderator = project.moderators.first()
    assert moderator is not user
    url = reverse(
        "a4_candy_budgeting:proposal-update",
        kwargs={
            "organisation_slug": proposal.project.organisation.slug,
            "pk": proposal.pk,
            "year": proposal.created.year,
        },
    )
    with freeze_post_phase(phase):
        client.login(username=moderator.email, password="password")
        data = {
            "name": "Another Proposal",
            "description": "changed description",
            "category": category.pk,
            "budget": 123,
            "point": (0, 0),
            "point_label": "somewhere else",
            "organisation_terms_of_use": True,
        }
        response = client.post(url, data)
        assert redirect_target(response) == "proposal-detail"
        assert response.status_code == 302
        updated_proposal = models.Proposal.objects.get(id=proposal.pk)
        assert updated_proposal.description == "changed description"