def test_presto_login(web_server, browser, DBSession, init):
    """Login / sign up with Prestodoctor.

    Presto application must be configurd as web application, running in http://localhost:8521/.

    Example invocation: PRESTO_USER="******" PRESTO_PASSWORD="******"  py.test trees -s --splinter-webdriver=firefox --splinter-make-screenshot-on-failure=false --ini=test.ini -k test_facebook_login

    :param web_server: Py.text fixture, gives HTTP address where the functional test web server is running, ``http://localhost:8521/``
    :param browser: Py.test Splinter Browser fixture
    :param DBSession: Py.test SQLALchemy session
    :param init: Websauna configuration object
    """
    b = browser

    # Initiate Presto login with Authomatic
    b.visit("{}/login".format(web_server))
    b.find_by_css(".btn-login-prestodoctor").click()

    do_presto_login_if_needed(b)

    assert b.is_text_present("You are now logged in")

    # See that we got somewhat sane data
    with transaction.manager:
        assert DBSession.query(User).count() == 1
        u = DBSession.query(User).get(1)
        assert u.first_login
        assert u.email == PRESTO_USER_WITH_RECOMMENDATION
        assert u.activated_at
        assert u.last_login_ip == "127.0.0.1"

        # Check user basic data
        assert u.full_name == 'Test Oauth1'
        assert u.user_data["social"]["prestodoctor"]["dob"] == -621648001
        assert u.address == "123 MARKET ST"
        assert u.city == "SAN FRANCISCO"
        assert u.state == "CA"
        assert u.zipcode == "94105"

        # License details
        assert u.presto_license_number == 692624515
        assert u.medical_license_upload_completed_at
        assert u.driving_license_upload_completed_at
        assert u.license_initial_upload_completed_at

    # Generated by our backend on succesful oauth login
    assert b.is_text_present("You are now logged in")

    logout(web_server, b)
    assert b.is_text_present("You are now logged out")
def test_presto_login(web_server, browser, DBSession, init):
    """Login / sign up with Prestodoctor.

    Presto application must be configurd as web application, running in http://localhost:8521/.

    Example invocation: PRESTO_USER="******" PRESTO_PASSWORD="******"  py.test trees -s --splinter-webdriver=firefox --splinter-make-screenshot-on-failure=false --ini=test.ini -k test_facebook_login

    :param web_server: Py.text fixture, gives HTTP address where the functional test web server is running, ``http://localhost:8521/``
    :param browser: Py.test Splinter Browser fixture
    :param DBSession: Py.test SQLALchemy session
    :param init: Websauna configuration object
    """
    b = browser

    # Initiate Presto login with Authomatic
    b.visit("{}/login".format(web_server))
    b.find_by_css(".btn-login-prestodoctor").click()

    do_presto_login_if_needed(b)

    assert b.is_text_present("You are now logged in")

    # See that we got somewhat sane data
    with transaction.manager:
        assert DBSession.query(User).count() == 1
        u = DBSession.query(User).get(1)
        assert u.first_login
        assert u.email == PRESTO_USER_WITH_RECOMMENDATION
        assert u.activated_at
        assert u.last_login_ip == "127.0.0.1"

        # Check user basic data
        assert u.full_name == 'Test Oauth1'
        assert u.user_data["social"]["prestodoctor"]["dob"] == -621648001
        assert u.address == "123 MARKET ST"
        assert u.city == "SAN FRANCISCO"
        assert u.state == "CA"
        assert u.zipcode == "94105"

        # License details
        assert u.presto_license_number == 692624515
        assert u.medical_license_upload_completed_at
        assert u.driving_license_upload_completed_at
        assert u.license_initial_upload_completed_at

    # Generated by our backend on succesful oauth login
    assert b.is_text_present("You are now logged in")

    logout(web_server, b)
    assert b.is_text_present("You are now logged out")
def test_presto_double_login(web_server, browser, DBSession, init):
    """Login Presto user twice and see we do heavy data import only once."""

    b = browser

    # Initiate Presto login with Authomatic
    b.visit("{}/login".format(web_server))
    b.find_by_css(".btn-login-prestodoctor").click()

    do_presto_login_if_needed(b)

    assert b.is_text_present("You are now logged in")

    # See that we got somewhat sane data
    with transaction.manager:
        assert DBSession.query(User).count() == 1
        u = DBSession.query(User).get(1)

        # Grab timestamp of full data update
        full_data_updated_at = u.user_data["social"]["prestodoctor"][
            "full_data_updated_at"]

    logout(web_server, b)

    # Go again
    b.visit("{}/login".format(web_server))
    b.find_by_css(".btn-login-prestodoctor").click()
    do_presto_login_if_needed(b)

    assert b.is_text_present("You are now logged in")

    with transaction.manager:
        assert DBSession.query(User).count() == 1
        u = DBSession.query(User).get(1)

        # Grab timestamp of full data update
        assert u.user_data["social"]["prestodoctor"][
            "full_data_updated_at"] == full_data_updated_at
def test_presto_double_login(web_server, browser, DBSession, init):
    """Login Presto user twice and see we do heavy data import only once."""

    b = browser

    # Initiate Presto login with Authomatic
    b.visit("{}/login".format(web_server))
    b.find_by_css(".btn-login-prestodoctor").click()

    do_presto_login_if_needed(b)

    assert b.is_text_present("You are now logged in")

    # See that we got somewhat sane data
    with transaction.manager:
        assert DBSession.query(User).count() == 1
        u = DBSession.query(User).get(1)

        # Grab timestamp of full data update
        full_data_updated_at = u.user_data["social"]["prestodoctor"]["full_data_updated_at"]

    logout(web_server, b)

    # Go again
    b.visit("{}/login".format(web_server))
    b.find_by_css(".btn-login-prestodoctor").click()
    do_presto_login_if_needed(b)

    assert b.is_text_present("You are now logged in")

    with transaction.manager:
        assert DBSession.query(User).count() == 1
        u = DBSession.query(User).get(1)

        # Grab timestamp of full data update
        assert u.user_data["social"]["prestodoctor"]["full_data_updated_at"] == full_data_updated_at