def METHOD_NAME(
    mocker: MockerFixture,
    ocm_base_client: OCMBaseClient,
    clusters: Sequence[Cluster],
    dry_run: bool,
) -> None:
    MANAGED_OIDC_NAME = "oidc-auth"
    cluster_auth_enabled = clusters[0]
    cluster_auth_disabled = clusters[1]
    cluster_auth_disabled.auth.status = StatusValue.DISABLED.value
    cluster_auth_enforced = clusters[2]
    cluster_auth_enforced.auth.status = StatusValue.ENFORCED.value
    idp = OCMOIdentityProviderOidc(
        name=MANAGED_OIDC_NAME,
        open_id=OCMOIdentityProviderOidcOpenId(
            client_id="client_id",
            client_secret="client_secret",
            issuer="https://issuer.com",
        ),
    )
    idp_update = idp.copy(deep=True)
    idp_update.open_id.client_id = "other-client-id"
    gh_idp = OCMOIdentityProviderGithub(id="idp-2", name="gh-auth")
    idp_in_sync = IDPState(cluster=cluster_auth_enabled, idp=idp)
    idp_to_be_ignored = IDPState(cluster=cluster_auth_enabled, idp=gh_idp)
    idp_to_be_changed = IDPState(cluster=cluster_auth_enabled, idp=idp_update)
    idp_to_be_removed = IDPState(cluster=cluster_auth_disabled, idp=idp)
    idp_to_be_added = IDPState(cluster=cluster_auth_enforced, idp=idp)
    gh_idp_to_be_removed = IDPState(cluster=cluster_auth_enforced, idp=gh_idp)
    current_state = [
        idp_in_sync,
        idp_to_be_removed,
        idp_to_be_ignored,
        gh_idp_to_be_removed,
    ]
    desired_state = [idp_in_sync, idp_to_be_added, idp_to_be_changed]
    add_identity_provider_mock = mocker.patch(
        "reconcile.rhidp.ocm_oidc_idp.base.add_identity_provider",
        autospec=True,
    )
    update_identity_provider_mock = mocker.patch(
        "reconcile.rhidp.ocm_oidc_idp.base.update_identity_provider",
        autospec=True,
    )
    delete_identity_provider_mock = mocker.patch(
        "reconcile.rhidp.ocm_oidc_idp.base.delete_identity_provider",
        autospec=True,
    )
    act(
        dry_run=dry_run,
        ocm_api=ocm_base_client,
        current_state=current_state,
        desired_state=desired_state,
        managed_idps=[MANAGED_OIDC_NAME],
    )
    if dry_run:
        add_identity_provider_mock.assert_not_called()
        update_identity_provider_mock.assert_not_called()
        delete_identity_provider_mock.assert_not_called()
        return
    # non dry-run
    add_identity_provider_mock.assert_called_once_with(
        ocm_base_client,
        idp_to_be_added.cluster.ocm_cluster,
        idp_to_be_added.idp,
    )
    delete_identity_provider_mock.assert_any_call(
        ocm_base_client, idp_to_be_removed.idp
    )
    delete_identity_provider_mock.assert_any_call(
        ocm_base_client, gh_idp_to_be_removed.idp
    )
    update_identity_provider_mock.assert_called_once_with(
        ocm_base_client, idp_to_be_changed.idp
    )