def METHOD_NAME(
    apiclient, voting_token_factory, phase_factory, proposal_factory, module_factory
):
    phase_1, module_1, project, _ = setup_phase(
        phase_factory, proposal_factory, phases.VotingPhase
    )
    module_2 = module_factory(project=project)
    phase_2 = phase_factory(
        phase_content=phases.VotingPhase(),
        module=module_2,
        start_date=phase_1.start_date + TOKEN_SESSION_EXPIRE * 0.5,
        end_date=phase_1.end_date + TOKEN_SESSION_EXPIRE * 0.5,
    )
    token_1 = voting_token_factory(module=module_1)
    token_2 = voting_token_factory(module=module_2)
    url_module_1 = module_1.get_absolute_url()
    url_module_2 = module_2.get_absolute_url()
    token_data_1 = {"token": str(token_1)}
    token_data_2 = {"token": str(token_2)}
    phase_1_started = phase_1.start_date + timedelta(seconds=1)
    phase_2_started = phase_2.start_date + timedelta(seconds=1)
    with freeze_time(phase_1_started):
        response = apiclient.post(url_module_1, token_data_1)
        assert response.status_code == 302
        assert "voting_tokens" in apiclient.session
        assert str(module_1.id) in apiclient.session["voting_tokens"]
        assert "token_expire_date" in apiclient.session
        assert (
            apiclient.session["token_expire_date"]
            == (phase_1_started + TOKEN_SESSION_EXPIRE).timestamp()
        )
    with freeze_time(phase_2_started):
        response = apiclient.post(url_module_2, token_data_2)
        assert response.status_code == 302
        assert "voting_tokens" in apiclient.session
        assert str(module_1.id) in apiclient.session["voting_tokens"]
        assert str(module_2.id) in apiclient.session["voting_tokens"]
        assert "token_expire_date" in apiclient.session
        assert (
            apiclient.session["token_expire_date"]
            == (phase_2_started + TOKEN_SESSION_EXPIRE).timestamp()
        )