def test_reset_pin_flow(test_client, init_database, create_organisation,
                        authed_sempo_admin_user):

    # define different session id
    other_session_id = 'ATUid_05af06225e6163ec2dc9dc9cf8bc97aa000'

    # create organisation
    organisation = create_organisation
    organisation.external_auth_password = config.EXTERNAL_AUTH_PASSWORD

    # create highest tier admin
    admin = authed_sempo_admin_user
    admin.set_held_role('ADMIN', 'sempoadmin')

    # get admin's auth token
    auth = get_complete_auth_token(authed_sempo_admin_user)

    # create self signup user
    user = UserFactory(id=21,
                       phone='+6185274136',
                       first_name='Unknown first name',
                       last_name='Unknown last name',
                       pin_hash=User.salt_hash_secret('0000'),
                       failed_pin_attempts=0,
                       preferred_language="en",
                       registration_method=RegistrationMethodEnum.USSD_SIGNUP)

    # bind user to organisation
    user.add_user_to_organisation(organisation, False)

    # reset pin as admin
    response = test_client.post('/api/v1/user/reset_pin/',
                                headers=dict(Authorization=auth,
                                             Accept='application/json'),
                                content_type='application/json',
                                json={'user_id': user.id})
    assert response.status_code == 200
    assert len(user.pin_reset_tokens) > 0

    # test user's reset process
    ussd_resp = req("", test_client, user.phone, session_id=other_session_id)
    assert "CON Please enter a PIN to manage your account." in ussd_resp

    ussd_resp = req("1212",
                    test_client,
                    user.phone,
                    session_id=other_session_id)
    assert "CON Enter your PIN again" in ussd_resp

    ussd_resp = req("1212",
                    test_client,
                    user.phone,
                    session_id=other_session_id)
    assert "CON Welcome to Sarafu" in ussd_resp
def test_get_legacy_location(test_client, init_database, create_organisation,
                             authed_sempo_admin_user, param_latitude,
                             param_longitude, param_common_name):
    """
    GIVEN coordinates and a name
    WHEN storing this to the legacy fields for location in db
    THEN they are retrievable through the legacy location http api call
    """

    # create organisation
    organisation = create_organisation
    organisation.external_auth_password = config.EXTERNAL_AUTH_PASSWORD

    # create admin
    admin = authed_sempo_admin_user
    admin.set_held_role('ADMIN', 'admin')

    # create user with legacy location information
    user = UserFactory(
        id=42,
        lat=param_latitude,
        lng=param_longitude,
        _location=param_common_name,
    )

    user.add_user_to_organisation(organisation, False)

    # get admin auth token
    auth = get_complete_auth_token(authed_sempo_admin_user)

    response = test_client.get(
        '/api/v2/geolocation/legacy/user/42/',
        headers=dict(
            Authorization=auth,
            Accept='application/json',
        ),
    )

    assert response.status_code == 200
    assert response.json['lat'] == param_latitude
    assert response.json['lng'] == param_longitude
    assert response.json['location'] == param_common_name