def METHOD_NAME(self, mocked_mail_recipient, mocked_send_mail):
    test_client = self.get_backwards_compatible_test_client()
    # step 1 register
    url = h.url_for('hdx_user_register.register_email')
    data = {'email': 'newuser@hdx.org', 'nosetest': 'true'}
    res = test_client.post(url, data=data)
    assert_true(json.loads(res.body)['success'])
    user = model.User.get('newuser@hdx.org')
    user.apikey = 'TEST_API_KEY'
    model.Session.commit()
    assert_true(user is not None)
    assert_true(user.password is None)
    # step 2 validate
    token = tkh.token_show({}, {'id': user.id})
    url = '/user/validate/' + token.get('token')
    res = test_client.get(url)
    assert '<label for="field-email">Your Email Address</label>' in res.body
    assert 'id="recaptcha"' in res.body
    assert 'value="newuser@hdx.org"' in res.body
    # step 3 details
    context = {'model': model, 'session': model.Session, 'auth_user_obj': user}
    url = h.url_for('hdx_user_register.register_details')
    try:
        res = test_client.post(url, data={})
        assert '500 INTERNAL SERVER ERROR' in res.status
    except Exception as ex:
        assert False
    try:
        res = test_client.post(url, data={
            'first-name': 'firstname',
            'last-name': 'lastname',
            'password': 'passpass',
            'name': 'newuser',
            'email': 'newuser@hdx.org',
            'login': 'newuser@hdx.org',
            'id': '123123123123'
        })
        assert '500 INTERNAL SERVER ERROR' in res.status
    except AttributeError as ex:
        assert False
    except Exception as ex:
        assert False
    try:
        res = test_client.post(url, data={
            'first-name': 'firstname',
            'last-name': 'lastname',
            'password': 'passpass',
            'name': 'newuser',
            'login': 'newuser@hdx.org',
            'id': user.id
        })
        assert '"Email": "Missing value"' in res.body
    except Exception as ex:
        assert False
    try:
        res = test_client.post(url, data={
            'first-name': 'firstname',
            'last-name': 'lastname',
            'password': 'passpass',
            'name': 'testsysadmin',
            'email': 'newuser@hdx.org',
            'login': 'newuser@hdx.org',
            'id': user.id
        })
        assert 'That login name is not available' in res.body
    except Exception as ex:
        assert False
    try:
        res = test_client.post(url, data={
            'first-name': 'firstname',
            'last-name': 'lastname',
            'password': 'passpass',
            'email': 'newuser@hdx.org',
            'login': 'newuser@hdx.org',
            'id': user.id
        })
        assert "Missing value" in res.body
    except Exception as ex:
        assert False
    try:
        res = test_client.post(url, {
            'first-name': 'firstname',
            'password': 'pass',
            'name': 'newuser',
            'email': 'newuser@hdx.org',
            'login': 'newuser@hdx.org',
            'id': user.id
        })
        assert False
    except KeyError as ex:
        assert False
    except TypeError as ex:
        assert True
    data = {
        'first-name': 'firstname',
        'last-name': 'lastname',
        'password': 'passpass',
        'name': 'newuser',
        'email': 'newuser@hdx.org',
        'login': 'newuser@hdx.org',
        'id': user.id
    }
    try:
        res = test_client.post(url, data=data)
    except Exception as ex:
        assert False
    assert 'true' in res
    updated_user = model.User.get('newuser@hdx.org')
    assert updated_user.name == data.get('name')
    assert updated_user.id == data.get('id')
    assert updated_user.display_name == data.get('first-name') + " " + data.get('last-name')
    assert updated_user.password is not None
    assert updated_user.sysadmin is False
    assert updated_user.email == data.get('email')
    res = self._get_action('user_extra_show')(context, {'user_id': user.id})
    assert res
    assert self._get_user_extra_by_key(res, user_model.HDX_FIRST_NAME) == data.get('first-name')
    assert self._get_user_extra_by_key(res, user_model.HDX_LAST_NAME) == data.get('last-name')
    assert self._get_user_extra_by_key(res, user_model.HDX_ONBOARDING_DETAILS) == 'True'
    # step 4 follow
    url = h.url_for('hdx_user.follow_details')
    try:
        res = test_client.post(url, data={})
        assert '500 INTERNAL SERVER ERROR' in res.status
        assert 'Server Error' in res.body
    except KeyError as ex:
        False
    except Exception as ex:
        False
    data = {
        'id': user.id
    }
    try:
        res = test_client.post(url, data=data)
    except Exception as ex:
        assert False
    assert 'true' in res
    res = self._get_action('user_extra_show')(context, {'user_id': user.id})
    assert res
    assert self._get_user_extra_by_key(res, user_model.HDX_ONBOARDING_FOLLOWS) == 'True'
    # step 5b request_membership
    url = h.url_for('hdx_user.request_membership')
    try:
        res = test_client.post(url, {})
        assert False
        # assert '"message": "Unauthorized to create user"' in res.body
    except Exception as ex:
        assert True
    data = {
        'org_id': 'hdx-test-org',
        'message': "please add me to your organization",
        'save': u'save',
        'role': u'member',
        'group': 'hdx-test-org'
    }
    auth = {'Authorization': str(user.apikey)}
    try:
        res = test_client.post(url, data=data, extra_environ=auth)
        assert_true(json.loads(res.body)['success'])
    except Exception as ex:
        assert False