def assert_proposal_apply_btns_exist(selenium, obj, proposals,
                                     apply_btn_exists):
    """Check proposal apply buttons existence."""
    actual_apply_btns_existence = [
        proposal_ui_service.ProposalsService(selenium).has_proposal_apply_btn(
            obj, proposal) for proposal in proposals
    ]
    exp_apply_btns_existence = [apply_btn_exists] * len(proposals)
    assert exp_apply_btns_existence == actual_apply_btns_existence
def apply_proposal(selenium, obj, proposal_to_apply, proposal_to_change):
    """Apply an obj proposal."""
    proposal_service = proposal_ui_service.ProposalsService(selenium)
    proposal_service.apply_proposal(obj, proposal_to_apply)
    change = proposal_to_apply.changes[0]
    # after applying the proposal obj attr is changed and every proposals to this
    # obj attr should change cur_value
    obj.__dict__[change["obj_attr_type"].lower()] = change["cur_value"]
    proposal_to_change.changes[0]["cur_value"] = change["cur_value"]
def assert_proposal_comparison_window_has_correct_info(selenium, obj,
                                                       proposal):
    """Check if proposal comparison window has correct info."""
    proposal_ui_service.ProposalsService(
        selenium).assert_objs_diff_corresponds_to_proposal(obj, proposal)
def get_related_proposals(selenium, obj):
    """Get related proposals."""
    return proposal_ui_service.ProposalsService(
        selenium).get_related_proposals(obj)
def decline_proposal(selenium, obj, proposal):
    """Decline an obj proposal."""
    proposal_service = proposal_ui_service.ProposalsService(selenium)
    proposal_service.decline_proposal(obj, proposal)
def create_proposal(selenium, obj):
    """Create a proposal to obj."""
    return proposal_ui_service.ProposalsService(selenium).create_proposal(obj)
def apply_proposal(selenium, obj, proposal):
    """Apply an obj proposal."""
    proposal_service = proposal_ui_service.ProposalsService(selenium)
    proposal_service.apply_proposal(obj, proposal)