Exemple #1
0
def test_login_queries(party_account_fixture, web_fixture):
    """"""
    context = ExecutionContext.get_context()

    config = context.config
    user_session = context.session
    login_session = LoginSession.for_session(context.session)
    system_account = party_account_fixture.system_account

    web_fixture.request.scheme = 'https'
    context.request.cookies[
        config.web.secure_key_name] = user_session.secure_salt
    assert config.web.idle_secure_lifetime < config.web.idle_lifetime
    assert config.web.idle_lifetime < config.web.idle_lifetime_max

    # Case: user logs in
    user_session.last_activity = None
    login_session.set_as_logged_in(system_account, False)
    assert login_session.is_logged_in()
    assert login_session.is_logged_in(secured=True)

    # Case: user logs out
    login_session.log_out()
    assert not login_session.is_logged_in()
    assert not login_session.is_logged_in(secured=True)

    # Case: user activity is older than secure lifetime
    assert (config.web.idle_lifetime - config.web.idle_secure_lifetime) > 50
    login_session.set_as_logged_in(system_account, False)
    user_session.last_activity = datetime.now() - timedelta(
        seconds=config.web.idle_secure_lifetime + 50)
    assert login_session.is_logged_in()
    assert not login_session.is_logged_in(secured=True)

    # Case: user activity is older than all lifetimes
    assert (config.web.idle_lifetime - config.web.idle_secure_lifetime) > 50
    login_session.set_as_logged_in(system_account, False)
    user_session.last_activity = datetime.now() - timedelta(
        seconds=config.web.idle_lifetime + 50)
    assert not login_session.is_logged_in()
    assert not login_session.is_logged_in(secured=True)

    # Case: user activity is older than non-secure lifetime, but keep_me_logged_in is set
    assert (config.web.idle_lifetime - config.web.idle_secure_lifetime) > 50
    assert (config.web.idle_lifetime_max - config.web.idle_lifetime) > 50
    login_session.set_as_logged_in(system_account, True)
    user_session.last_activity = datetime.now() - timedelta(
        seconds=config.web.idle_lifetime + 50)
    assert login_session.is_logged_in()
    assert not login_session.is_logged_in(secured=True)

    # Case: user activity is older than non-secure lifetime max, but keep_me_logged_in is set
    assert (config.web.idle_lifetime - config.web.idle_secure_lifetime) > 50
    assert (config.web.idle_lifetime_max - config.web.idle_lifetime) > 50
    login_session.set_as_logged_in(system_account, True)
    Session.flush()
    user_session.last_activity = datetime.now() - timedelta(
        seconds=config.web.idle_lifetime_max + 50)
    assert not login_session.is_logged_in()
    assert not login_session.is_logged_in(secured=True)
Exemple #2
0
    def do_demo_setup(self):
        Session.add(Address(name='John Doe', email_address='*****@*****.**'))
        Session.add(Address(name='Jane Johnson', email_address='*****@*****.**'))
        Session.add(Address(name='Jack Black', email_address='*****@*****.**'))

        Session.flush()
        Session.commit()
def test_cascade_removal_of_user_session(sql_alchemy_fixture,
                                         session_scoped_fixture):
    """
        If a user session is deleted, all session scoped objects are deleted as well.
    """

    fixture = session_scoped_fixture

    @session_scoped
    class MySessionScoped(Base):
        __tablename__ = 'my_session_scoped'
        id = Column(Integer, primary_key=True)

    with sql_alchemy_fixture.persistent_test_classes(MySessionScoped):
        user_session = fixture.create_user_session()
        assert Session.query(MySessionScoped).count() == 0

        session_object = MySessionScoped.for_current_session()
        assert Session.query(MySessionScoped).one() is session_object
        assert session_object.user_session is user_session

        if fixture.cascade:
            Session.delete(user_session)
        else:
            Session.delete(session_object)
        Session.flush()

        assert Session.query(MySessionScoped).count() == 0
        assert Session.query(
            UserSession).count() == fixture.expected_user_session_after_delete
Exemple #4
0
 def new_task(self, title=None, queue=None):
     title = title or 'A task'
     queue = queue or self.queue
     task = Task(title=title, queue=queue)
     Session.add(task)
     Session.flush()
     return task
Exemple #5
0
def test_deferred_action_times_out(sql_alchemy_fixture, deferred_action_fixture):
    """If all its Requirements are not fulfilled before its deadline has been reached, a DeferredAction executes its deadline action; then, it and its Requirements are deleted"""

    fixture = deferred_action_fixture
    with sql_alchemy_fixture.persistent_test_classes(fixture.MyDeferredAction, fixture.SomeObject):
        requirements = [Requirement(), Requirement(), Requirement()]
        deferred_action = fixture.MyDeferredAction(fixture.one_object, requirements=requirements, deadline=fixture.future_time)
        Session.add(deferred_action)
        Session.flush()

        assert deferred_action.deadline == fixture.future_time
        ReahlEgg.do_daily_maintenance_for_egg('reahl-domain')
        assert not fixture.one_object.deadline_flag
        assert not fixture.another_object.deadline_flag

        assert Session.query(Requirement).count() == 3
        assert Session.query(DeferredAction).count() == 1

        deferred_action.deadline = fixture.past_time
        ReahlEgg.do_daily_maintenance_for_egg('reahl-domain')
        assert fixture.one_object.deadline_flag
        assert not fixture.another_object.deadline_flag

        assert Session.query(Requirement).count() == 0
        assert Session.query(DeferredAction).count() == 0
Exemple #6
0
 def new_account_management_interface(self, system_account=None):
     system_account = system_account or self.system_account
     account_management_interface = AccountManagementInterface()
     account_management_interface.password = system_account.password
     account_management_interface.email = system_account.email
     Session.add(account_management_interface)
     Session.flush()
     return account_management_interface
    def do_demo_setup(self):
        self.address_book
        self.account
        self.other_account
        self.other_address_book

        Session.flush()
        Session.commit()
Exemple #8
0
 def edit_address_in_other_address_book(self):
     address = Address(address_book=self.other_address_book,
                       email_address='*****@*****.**',
                       name='Friend')
     address.save()
     Session.flush()
     self.url = '/edit_address/%s' % address.id
     self.get = True
    def do_demo_setup(self):
        self.address_book
        john = self.account
        jane = self.new_account(email='*****@*****.**')
        jane_book = self.new_address_book(owner=jane)
        someone = self.new_account(email='*****@*****.**')
        someone_book = self.new_address_book(owner=someone)
        someone_else = self.new_account(email='*****@*****.**')
        someone_else_book = self.new_address_book(owner=someone_else)

        jane_book.allow(john, can_add_addresses=True, can_edit_addresses=True)
        someone_book.allow(john,
                           can_add_addresses=False,
                           can_edit_addresses=True)
        someone_else_book.allow(john,
                                can_add_addresses=False,
                                can_edit_addresses=False)

        Address(address_book=jane_book,
                email_address='*****@*****.**',
                name='Friend1').save()
        Address(address_book=jane_book,
                email_address='*****@*****.**',
                name='Friend2').save()
        Address(address_book=jane_book,
                email_address='*****@*****.**',
                name='Friend3').save()
        Address(address_book=jane_book,
                email_address='*****@*****.**',
                name='Friend4').save()

        Address(address_book=someone_book,
                email_address='*****@*****.**',
                name='Friend11').save()
        Address(address_book=someone_book,
                email_address='*****@*****.**',
                name='Friend12').save()
        Address(address_book=someone_book,
                email_address='*****@*****.**',
                name='Friend13').save()
        Address(address_book=someone_book,
                email_address='*****@*****.**',
                name='Friend14').save()

        Address(address_book=someone_else_book,
                email_address='*****@*****.**',
                name='Friend21').save()
        Address(address_book=someone_else_book,
                email_address='*****@*****.**',
                name='Friend22').save()
        Address(address_book=someone_else_book,
                email_address='*****@*****.**',
                name='Friend23').save()
        Address(address_book=someone_else_book,
                email_address='*****@*****.**',
                name='Friend24').save()
        Session.flush()
        Session.commit()
Exemple #10
0
    def do_demo_setup(self):

        Address(email_address='*****@*****.**', name='Friend1').save()
        Address(email_address='*****@*****.**', name='Friend2').save()
        Address(email_address='*****@*****.**', name='Friend3').save()
        Address(email_address='*****@*****.**', name='Friend4').save()

        Session.flush()
        Session.commit()
Exemple #11
0
def test_daily_maintenance(reahl_system_fixture, jobs_fixture):
    """When daily maintenance is run, all addresses are set to be old."""

    jobs_fixture.existing_address
    Session.flush()
    assert jobs_fixture.existing_address.added_today

    reahl_system_fixture.context.system_control.do_daily_maintenance()

    assert not jobs_fixture.existing_address.added_today
Exemple #12
0
def daily_maintenance(fixture):
    """When daily maintenance is run, all addresses are set to be old."""

    fixture.existing_address
    Session.flush()
    assert fixture.existing_address.added_today

    fixture.context.system_control.do_daily_maintenance()

    assert not fixture.existing_address.added_today
Exemple #13
0
def test_deferred_action_completes_with_shared_requirements(
        sql_alchemy_fixture, deferred_action_fixture):
    """A requirement could be linked to many DeferredActions, in which case it will notify all on success"""

    fixture = deferred_action_fixture
    with sql_alchemy_fixture.persistent_test_classes(fixture.MyDeferredAction,
                                                     fixture.SomeObject):
        requirements1 = [Requirement()]
        requirements2 = [Requirement(), Requirement()]
        deferred_action1 = fixture.MyDeferredAction(
            fixture.one_object,
            requirements=requirements2,
            deadline=fixture.future_time)
        Session.add(deferred_action1)
        deferred_action2 = fixture.MyDeferredAction(
            fixture.another_object,
            requirements=requirements1 + requirements2,
            deadline=fixture.future_time)

        Session.add(deferred_action2)
        Session.flush()
        # The requirements are linked back to the correct DeferredActions
        for requirement in requirements2:
            assert set(requirement.deferred_actions) == {
                deferred_action1, deferred_action2
            }

        for requirement in requirements1:
            assert set(requirement.deferred_actions) == {deferred_action2}

        # If all of one DeferredAction's Requirements are fulfilled, ones also linked to another DeferrredAction
        # are not deleted just yet
        for requirement in requirements2:
            requirement.set_fulfilled()
        assert fixture.one_object.done_flag
        assert not fixture.another_object.done_flag

        for requirement in requirements1 + requirements2:
            assert set(requirement.deferred_actions) == {deferred_action2}
        assert Session.query(Requirement).count() == 3
        assert Session.query(DeferredAction).count() == 1

        # But as soon as all Requirements of the last DeferredAction are fulfilled, the last Requirements
        # are deleted as usual
        for requirement in requirements1:
            requirement.set_fulfilled()
        assert fixture.one_object.done_flag
        assert fixture.another_object.done_flag

        assert Session.query(Requirement).count() == 0
        assert Session.query(DeferredAction).count() == 0
Exemple #14
0
    def deferred_action_completes(self, fixture):
        """A DeferredAction will execute its primary action once all its Requirements are fulfilled; then, it and its Requirements are deleted."""
        with fixture.persistent_test_classes(fixture.MyDeferredAction, fixture.SomeObject):
            requirements = [Requirement(), Requirement(), Requirement()]
            deferred_action = fixture.MyDeferredAction(fixture.one_object, requirements=requirements, deadline=fixture.future_time)
            Session.add(deferred_action)
            Session.flush()
            for requirement in requirements:
                requirement.set_fulfilled()
            vassert( fixture.one_object.done_flag )
            vassert( not fixture.another_object.done_flag )

            vassert( Session.query(Requirement).count() == 0 )
            vassert( Session.query(DeferredAction).count() == 0 )
Exemple #15
0
 def new_system_account(self,
                        party=None,
                        email='*****@*****.**',
                        activated=True):
     password = '******'
     system_account = EmailAndPasswordSystemAccount(owner=party
                                                    or self.party,
                                                    email=email)
     system_account.set_new_password(email, password)
     system_account.password = password  # The unencrypted version for use in tests
     if activated:
         system_account.activate()
     Session.add(system_account)
     Session.flush()
     return system_account
Exemple #16
0
    def reserve(cls, email, password, party):
        cls.assert_email_unique(email)
        system_account = cls(owner=party, email=email)
        Session.add(system_account)
        system_account.set_new_password(email, password)
        verification_request = VerifyEmailRequest(email=email,
                                                  subject_config='accounts.activation_subject',
                                                  email_config='accounts.activation_email')
        Session.add(verification_request)
        Session.flush()
        deferred_activation = ActivateAccount(system_account=system_account, 
                                              requirements=[verification_request])
        Session.add(deferred_activation)
        system_account.send_activation_notification()

        return system_account
Exemple #17
0
def test_deferred_action_times_out_with_shared_requirements(
        sql_alchemy_fixture, deferred_action_fixture):
    """If a DeferredAction times out, it will not nuke Requirements shared with another DeferredAction."""

    fixture = deferred_action_fixture
    with sql_alchemy_fixture.persistent_test_classes(fixture.MyDeferredAction,
                                                     fixture.SomeObject):
        requirements1 = [Requirement()]
        requirements2 = [Requirement(), Requirement()]
        deferred_action1 = fixture.MyDeferredAction(
            fixture.one_object,
            requirements=requirements2,
            deadline=fixture.future_time)
        Session.add(deferred_action1)
        deferred_action2 = fixture.MyDeferredAction(
            fixture.another_object,
            requirements=requirements1 + requirements2,
            deadline=fixture.future_time)

        Session.add(deferred_action2)
        Session.flush()

        # If one DeferredAction times out, the remaining one and its Requirements are left intact
        deferred_action1.deadline = fixture.past_time

        ReahlEgg.do_daily_maintenance_for_egg('reahl-domain')
        assert fixture.one_object.deadline_flag
        assert not fixture.another_object.deadline_flag

        assert Session.query(Requirement).count() == 3
        assert Session.query(DeferredAction).count() == 1

        for requirement in requirements1 + requirements2:
            assert set(requirement.deferred_actions) == {deferred_action2}

        # When no more DeferredActions are held onto by Requirements, those Requirements are deleted
        deferred_action2.deadline = fixture.past_time
        ReahlEgg.do_daily_maintenance_for_egg('reahl-domain')

        assert fixture.one_object.deadline_flag
        assert fixture.another_object.deadline_flag

        assert Session.query(Requirement).count() == 0
        assert Session.query(DeferredAction).count() == 0
Exemple #18
0
def test_session_keeps_living(web_fixture):
    """When SessionData is deleted, the associated UserSession is not affected."""
    fixture = web_fixture

    UserSession.initialise_web_session_on(fixture.context)
    user_session = fixture.context.session
    ui_name = 'user_interface'
    channel_name = 'channel'

    session_data = SessionData(web_session=user_session,
                               view_path='/',
                               ui_name=ui_name,
                               channel_name=channel_name)
    Session.add(session_data)
    Session.flush()

    Session.delete(session_data)

    assert Session.query(SessionData).filter_by(
        id=session_data.id).count() == 0
    assert Session.query(UserSession).filter_by(
        id=user_session.id).one() is user_session
Exemple #19
0
def test_session_data_disappears_when_session_does(web_fixture):
    """When a UserSession is deleted, all associated SessionData disappear as well."""
    fixture = web_fixture

    UserSession.initialise_web_session_on(fixture.context)
    user_session = fixture.context.session
    ui_name = 'user_interface'
    channel_name = 'channel'

    session_data = SessionData(web_session=user_session,
                               view_path='/',
                               ui_name=ui_name,
                               channel_name=channel_name)
    Session.add(session_data)
    Session.flush()

    Session.delete(user_session)

    assert Session.query(SessionData).filter_by(
        id=session_data.id).count() == 0
    assert Session.query(UserSession).filter_by(
        id=user_session.id).count() == 0
Exemple #20
0
 def as_key(self):
     Session.flush()  # To make sure .id is populated
     return '%s:%s' % (str(self.id), self.salt)
Exemple #21
0
 def viewing_other_address_book(self):
     self.other_address_book
     Session.flush()
     self.url = '/address_book/%s' % self.other_address_book.id
     self.get = True
Exemple #22
0
 def as_secret_key(self):
     Session.flush()
     return '%sk%s' % (self.id, self.salt)
 def add_collaborator_to_other_address_book(self):
     address_book = self.access_domain_fixture.other_address_book
     Session.flush()
     self.url = '/add_collaborator/%s' % address_book.id
     self.get = True
 def add_address_to_other_address_book(self):
     address_book = self.access_domain_fixture.other_address_book
     Session.flush()
     self.url = '/add_address/%s' % address_book.id
     self.get = False
 def viewing_other_address_book(self):
     address_book = self.access_domain_fixture.other_address_book
     Session.flush()
     self.url = '/address_book/%s' % address_book.id
     self.get = True
Exemple #26
0
 def add_address_to_other_address_book(self):
     self.other_address_book
     Session.flush()
     self.url = '/add_address/%s' % self.other_address_book.id
     self.get = False
Exemple #27
0
 def add_collaborator_to_other_address_book(self):
     self.other_address_book
     Session.flush()
     self.url = '/add_collaborator/%s' % self.other_address_book.id
     self.get = True
Exemple #28
0
 def new_party(self):
     party = Party()
     Session.add(party)
     Session.flush()
     return party
Exemple #29
0
    def login_queries(self, fixture):
        """"""

        user_session = fixture.context.session
        login_session = LoginSession.for_session(fixture.context.session)
        system_account = fixture.system_account

        config = fixture.context.config
        context = fixture.context
        fixture.request.scheme = 'https'
        context.request.cookies[
            context.config.web.secure_key_name] = user_session.secure_salt
        vassert(config.web.idle_secure_lifetime < config.web.idle_lifetime)
        vassert(config.web.idle_lifetime < config.web.idle_lifetime_max)

        # Case: user logs in
        user_session.last_activity = None
        login_session.set_as_logged_in(system_account, False)
        vassert(login_session.is_logged_in())
        vassert(login_session.is_logged_in(secured=True))

        # Case: user logs out
        login_session.log_out()
        vassert(not login_session.is_logged_in())
        vassert(not login_session.is_logged_in(secured=True))

        # Case: user activity is older than secure lifetime
        vassert(
            (config.web.idle_lifetime - config.web.idle_secure_lifetime) > 50)
        login_session.set_as_logged_in(system_account, False)
        user_session.last_activity = datetime.now() - timedelta(
            seconds=config.web.idle_secure_lifetime + 50)
        vassert(login_session.is_logged_in())
        vassert(not login_session.is_logged_in(secured=True))

        # Case: user activity is older than all lifetimes
        vassert(
            (config.web.idle_lifetime - config.web.idle_secure_lifetime) > 50)
        login_session.set_as_logged_in(system_account, False)
        user_session.last_activity = datetime.now() - timedelta(
            seconds=config.web.idle_lifetime + 50)
        vassert(not login_session.is_logged_in())
        vassert(not login_session.is_logged_in(secured=True))

        # Case: user activity is older than non-secure lifetime, but keep_me_logged_in is set
        vassert(
            (config.web.idle_lifetime - config.web.idle_secure_lifetime) > 50)
        vassert((config.web.idle_lifetime_max - config.web.idle_lifetime) > 50)
        login_session.set_as_logged_in(system_account, True)
        user_session.last_activity = datetime.now() - timedelta(
            seconds=config.web.idle_lifetime + 50)
        vassert(login_session.is_logged_in())
        vassert(not login_session.is_logged_in(secured=True))

        # Case: user activity is older than non-secure lifetime max, but keep_me_logged_in is set
        vassert(
            (config.web.idle_lifetime - config.web.idle_secure_lifetime) > 50)
        vassert((config.web.idle_lifetime_max - config.web.idle_lifetime) > 50)
        login_session.set_as_logged_in(system_account, True)
        Session.flush()
        user_session.last_activity = datetime.now() - timedelta(
            seconds=config.web.idle_lifetime_max + 50)
        vassert(not login_session.is_logged_in())
        vassert(not login_session.is_logged_in(secured=True))
Exemple #30
0
 def new_session(self, system_account=None):
     user_session = UserSession()
     Session.add(user_session)
     Session.flush()
     return user_session