Пример #1
0
 def setUp(self):
     self.config = testing.setUp()
     self.config.include('pyramid_mailer.testing')
     self.config.registry.settings['c3smembership.url'] = 'http://foo.com'
     self.config.registry.settings['c3smembership.mailaddr'] = '*****@*****.**'
     DBSession.remove()
     self.session = _initTestingDB()
Пример #2
0
    def test_get(self):
        """
        Tests the ShareRepository.get method.
        """
        # pylint: disable=no-member
        share = DBSession.query(Shares).filter(
            Shares.reference_code == u'share1').first()
        get_share = ShareRepository.get(share.id)
        self.assertEqual(get_share.id, share.id)

        # pylint: disable=no-member
        share = DBSession.query(Shares).filter(
            Shares.reference_code == u'share2').first()
        get_share = ShareRepository.get(share.id)
        self.assertEqual(get_share.id, share.id)

        # pylint: disable=no-member
        share = DBSession.query(Shares).filter(
            Shares.reference_code == u'share3').first()
        get_share = ShareRepository.get(share.id)
        self.assertEqual(get_share.id, share.id)

        # pylint: disable=no-member
        share = DBSession.query(Shares).filter(
            Shares.reference_code == u'share4').first()
        get_share = ShareRepository.get(share.id)
        self.assertEqual(get_share.id, share.id)
Пример #3
0
 def tearDown(self):
     """
     Tear down all test cases
     """
     DBSession.close()
     DBSession.remove()
     testing.tearDown()
Пример #4
0
 def make_member_ready_for_approval(self):
     with transaction.manager:
         member1 = C3sMember(  # german
             firstname=u'SomeFirstnäme',
             lastname=u'SomeLastnäme',
             email=u'*****@*****.**',
             address1=u"addr one",
             address2=u"addr two",
             postcode=u"12345",
             city=u"Footown Mäh",
             country=u"Foocountry",
             locale=u"DE",
             date_of_birth=date.today(),
             email_is_confirmed=False,
             email_confirm_code=u'ABCDEFGFOO',
             password=u'arandompassword',
             date_of_submission=date.today(),
             membership_type=u'normal',
             member_of_colsoc=True,
             name_of_colsoc=u"GEMA",
             num_shares=u'23',
         )
         member1.signature_received = True
         member1.payment_received = True
     DBSession.add(member1)
Пример #5
0
 def tearDown(self):
     """
     clean up after a test case
     """
     DBSession.close()
     DBSession.remove()
     testing.tearDown()
Пример #6
0
    def setUp(self):
        self.config = testing.setUp()
        self.config.include('pyramid_mailer.testing')
        try:
            DBSession.close()
            DBSession.remove()
            # print("removed old DBSession ==============================")
        except:
            # print("no DBSession to remove =============================")
            pass
        # try:
        #    os.remove('test_webtest_functional.db')
        #    #print "deleted old test database"
        # except:
        #    pass
        #    #print "never mind"

        my_settings = {
            # 'sqlalchemy.url': 'sqlite:///test_webtest_functional.db',
            'sqlalchemy.url': 'sqlite:///:memory:',
            'available_languages': 'da de en es fr',
            'c3smembership.mailaddr': '*****@*****.**',
            'testing.mail_to_console': 'false'
        }
        engine = engine_from_config(my_settings)
        DBSession.configure(bind=engine)
        self.session = DBSession  # ()

        Base.metadata.create_all(engine)
        # dummy database entries for testing
        with transaction.manager:
            member1 = C3sMember(  # german
                firstname=u'SomeFirstnäme',
                lastname=u'SomeLastnäme',
                email=u'*****@*****.**',
                address1=u"addr one",
                address2=u"addr two",
                postcode=u"12345",
                city=u"Footown Mäh",
                country=u"Foocountry",
                locale=u"DE",
                date_of_birth=date.today(),
                email_is_confirmed=False,
                email_confirm_code=u'ABCDEFGFOO',
                password=u'arandompassword',
                date_of_submission=date.today(),
                membership_type=u'normal',
                member_of_colsoc=True,
                name_of_colsoc=u"GEMA",
                num_shares=u'23',
            )
            DBSession.add(member1)
            DBSession.flush()

        from c3smembership import main
        app = main({}, **my_settings)
        app.registry.get_mailer = get_mailer

        from webtest import TestApp
        self.testapp = TestApp(app)
Пример #7
0
    def test_create(self):
        """
        Tests the ShareRepository.create method.
        """
        # pylint: disable=no-member
        member1 = DBSession.query(C3sMember).filter(
            C3sMember.membership_number == 'member1').first()
        self.assertEqual(member1.num_shares, 12 + 23)

        share_id = ShareRepository.create('member1', 25, date(2016, 4, 23))
        self.assertEqual(member1.num_shares, 12 + 23 + 25)
        self.assertEqual(len(member1.shares), 3)

        # pylint: disable=no-member
        shares = DBSession.query(Shares).filter(Shares.id == share_id).first()
        self.assertEqual(shares.number, 25)
        self.assertEqual(shares.date_of_acquisition, date(2016, 4, 23))
        self.assertEqual(shares.reference_code, None)
        self.assertEqual(shares.signature_received, False)
        self.assertEqual(shares.signature_received_date, date(1970, 1, 1))
        self.assertEqual(shares.signature_confirmed, False)
        self.assertEqual(shares.signature_confirmed_date, date(1970, 1, 1))
        self.assertEqual(shares.payment_received, False)
        self.assertEqual(shares.payment_received_date, date(1970, 1, 1))
        self.assertEqual(shares.payment_confirmed, False)
        self.assertEqual(shares.payment_confirmed_date, date(1970, 1, 1))
        self.assertEqual(shares.accountant_comment, None)
    def setUp(self):
        self.config = testing.setUp()
        self.config.set_session_factory(session_factory_from_settings({}))
        self.config.include('pyramid_mailer.testing')
        self.config.include('pyramid_chameleon')
        self.config.include('c3smembership.presentation.view_processing')
        self.error_handler = TestErrorHandler()
        self.config.set_colander_error_handler(self.error_handler)
        DBSession.remove()
        self.db_session = init_testing_db()
        self.config.registry.settings['testing.mail_to_console'] = 'no'
        self.config.registry.settings['c3smembership.notification_sender'] = \
            '*****@*****.**'
        self.config.add_route('join', '/')
        self.config.add_route('detail', '/detail')
        self.config.add_route('dashboard', '/')
        self.config.add_route('certificate_pdf', '/')
        self.config.add_route(
            'certificate_pdf_staff', '/certificate_pdf_staff/{member_id}')
        self.config.add_route(
            'membership_listing_backend', '/membership_listing_backend')

        self.config.add_route(
            'certificate_mail', '/cert_mail/{member_id}')
        self.config.scan(
            'c3smembership.presentation.views.membership_certificate')
        self.testapp = TestApp(self.config.make_wsgi_app())
Пример #9
0
 def tearDown(self):
     """
     Clean up database
     """
     DBSession().close()
     DBSession.remove()
     testing.tearDown()
Пример #10
0
    def test_create(self):
        """
        Tests the ShareRepository.create method.
        """
        # pylint: disable=no-member
        member1 = DBSession.query(C3sMember).filter(
            C3sMember.membership_number == 'member1').first()
        self.assertEqual(member1.num_shares, 12 + 23)

        share_id = ShareRepository.create('member1', 25, date(2016, 4, 23))
        self.assertEqual(member1.num_shares, 12 + 23 + 25)
        self.assertEqual(len(member1.shares), 3)

        # pylint: disable=no-member
        shares = DBSession.query(Shares).filter(Shares.id == share_id).first()
        self.assertEqual(shares.number, 25)
        self.assertEqual(shares.date_of_acquisition, date(2016, 4, 23))
        self.assertEqual(shares.reference_code, None)
        self.assertEqual(shares.signature_received, False)
        self.assertEqual(shares.signature_received_date, date(1970, 1, 1))
        self.assertEqual(shares.signature_confirmed, False)
        self.assertEqual(shares.signature_confirmed_date, date(1970, 1, 1))
        self.assertEqual(shares.payment_received, False)
        self.assertEqual(shares.payment_received_date, date(1970, 1, 1))
        self.assertEqual(shares.payment_confirmed, False)
        self.assertEqual(shares.payment_confirmed_date, date(1970, 1, 1))
        self.assertEqual(shares.accountant_comment, None)
Пример #11
0
 def setUp(self):
     self.config = testing.setUp()
     self.config.include('pyramid_mailer.testing')
     self.config.registry.settings['c3smembership.url'] = 'http://foo.com'
     self.config.registry.settings['c3smembership.mailaddr'] = '*****@*****.**'
     DBSession.remove()
     self.session = _initTestingDB()
Пример #12
0
    def test_get(self):
        """
        Tests the ShareRepository.get method.
        """
        # pylint: disable=no-member
        share = DBSession.query(Shares).filter(
            Shares.reference_code == u'share1').first()
        get_share = ShareRepository.get(share.id)
        self.assertEqual(get_share.id, share.id)

        # pylint: disable=no-member
        share = DBSession.query(Shares).filter(
            Shares.reference_code == u'share2').first()
        get_share = ShareRepository.get(share.id)
        self.assertEqual(get_share.id, share.id)

        # pylint: disable=no-member
        share = DBSession.query(Shares).filter(
            Shares.reference_code == u'share3').first()
        get_share = ShareRepository.get(share.id)
        self.assertEqual(get_share.id, share.id)

        # pylint: disable=no-member
        share = DBSession.query(Shares).filter(
            Shares.reference_code == u'share4').first()
        get_share = ShareRepository.get(share.id)
        self.assertEqual(get_share.id, share.id)
Пример #13
0
 def tearDown(self):
     """
     clean up after a test case
     """
     DBSession.close()
     DBSession.remove()
     testing.tearDown()
Пример #14
0
    def create(cls, membership_number, shares_quantity,
               board_confirmation=None):
        """
        Create a shares package.

        Args:
            membership_number: The membership number of the member for which
                the shares package is created.
            shares_quantity: The number of shares of the package to be created.
            board_confirmation: Optional. The date on which the board of
                directors confirmed the acquisition of the shares package.

        Returns:
            The technical primary key of the created shares package.
        """
        shares = Shares(
            number=shares_quantity,
            date_of_acquisition=board_confirmation,
        )
        # pylint: disable=no-member
        member = DBSession.query(C3sMember).filter(
            C3sMember.membership_number == membership_number).first()
        # pylint: disable=no-member
        DBSession.add(shares)
        member.shares.append(shares)
        member.num_shares += shares_quantity
        DBSession.flush()
        return shares.id
Пример #15
0
 def setUp(self):
     self.config = testing.setUp()
     self.config.include('pyramid_mailer.testing')
     self.config.include('pyramid_chameleon')
     DBSession.remove()
     self.session = _initTestingDB()
     self.config.registry.settings['testing.mail_to_console'] = 'no'
Пример #16
0
 def tearDown(self):
     """
     Tear down all test cases
     """
     DBSession.close()
     DBSession.remove()
     testing.tearDown()
Пример #17
0
 def delete_by_id(cls, staff_id):
     """
     Delete one C3sStaff object by id.
     """
     row = DBSession.query(cls).filter(cls.id == staff_id).first()
     row.groups = []
     DBSession.query(cls).filter(cls.id == staff_id).delete()
Пример #18
0
    def create(cls, membership_number, shares_quantity,
               board_confirmation=None):
        """
        Create a shares package.

        Args:
            membership_number: The membership number of the member for which
                the shares package is created.
            shares_quantity: The number of shares of the package to be created.
            board_confirmation: Optional. The date on which the board of
                directors confirmed the acquisition of the shares package.

        Returns:
            The technical primary key of the created shares package.
        """
        shares = Shares(
            number=shares_quantity,
            date_of_acquisition=board_confirmation,
        )
        # pylint: disable=no-member
        member = DBSession.query(C3sMember).filter(
            C3sMember.membership_number == membership_number).first()
        # pylint: disable=no-member
        DBSession.add(shares)
        member.shares.append(shares)
        member.num_shares += shares_quantity
        DBSession.flush()
        return shares.id
Пример #19
0
    def setUp(self):
        self.config = testing.setUp()
        self.config.include('pyramid_mailer.testing')
        try:
            DBSession.close()
            DBSession.remove()
            # print("removed old DBSession ==============================")
        except:
            # print("no DBSession to remove =============================")
            pass
        # try:
        #    os.remove('test_webtest_functional.db')
        #    #print "deleted old test database"
        # except:
        #    pass
        #    #print "never mind"

        my_settings = {
            # 'sqlalchemy.url': 'sqlite:///test_webtest_functional.db',
            'sqlalchemy.url': 'sqlite:///:memory:',
            'available_languages': 'da de en es fr',
            'c3smembership.notification_sender': '*****@*****.**',
            'testing.mail_to_console': 'false'}
        engine = engine_from_config(my_settings)
        DBSession.configure(bind=engine)
        self.session = DBSession  # ()

        Base.metadata.create_all(engine)
        # dummy database entries for testing
        with transaction.manager:
            member1 = C3sMember(  # german
                firstname=u'SomeFirstnäme',
                lastname=u'SomeLastnäme',
                email=u'*****@*****.**',
                address1=u"addr one",
                address2=u"addr two",
                postcode=u"12345",
                city=u"Footown Mäh",
                country=u"Foocountry",
                locale=u"DE",
                date_of_birth=date.today(),
                email_is_confirmed=False,
                email_confirm_code=u'ABCDEFGFOO',
                password=u'arandompassword',
                date_of_submission=date.today(),
                membership_type=u'normal',
                member_of_colsoc=True,
                name_of_colsoc=u"GEMA",
                num_shares=u'23',
            )
            DBSession.add(member1)
            DBSession.flush()

        from c3smembership import main
        app = main({}, **my_settings)
        app.registry.get_mailer = get_mailer

        from webtest import TestApp
        self.testapp = TestApp(app)
Пример #20
0
 def __set_up_database(cls):
     """
     Set up the database and create staff
     """
     engine = engine_from_config(cls.SETTINGS)
     DBSession.configure(bind=engine)
     Base.metadata.create_all(engine)
     cls.__create_staff()
 def tearDown(self):
     """
     Tear down the set setup
     """
     # pylint: disable=no-member
     DBSession.close()
     # pylint: disable=no-member
     DBSession.remove()
     GeneralAssemblyRepository.datetime = datetime
 def test_usage(self):
     from c3smembership.scripts.initialize_db import usage
     argv = ['initialize_c3sMembership_db']
     try:
         usage(argv)
     except:
         pass
     DBSession.close()
     DBSession.remove()
Пример #23
0
def init():
    engine = engine_from_config({'sqlalchemy.url': 'sqlite://'})
    DBSession.configure(bind=engine)
    Base.metadata.create_all(engine)
    # Setup alembic database migration information.
    # This creates the alembic_version table in the database
    # which is the basis for migrations and the "alembic current"
    # command.
    alembic_cfg = Config('alembic.ini')
    command.stamp(alembic_cfg, 'head')
Пример #24
0
    def delete(cls, shares_id):
        """
        Deletes the shares package of the specified shares id.

        Args:
            shares_id: The technical primary key of the shares package to be
                deleted.
        """
        # pylint: disable=no-member
        DBSession.query(Shares).filter(Shares.id == shares_id).delete()
Пример #25
0
    def setUp(self):
        self.config = testing.setUp()
        self.config.include('pyramid_mailer.testing')
        self.config.registry.settings[
            'c3smembership.url'] = 'https://yes.c3s.cc'
        self.config.registry.settings['c3smembership.mailaddr'] = '*****@*****.**'
        self.config.registry.settings['testing.mail_to_console'] = 'false'

        DBSession.remove()
        self.session = _initTestingDB()
Пример #26
0
    def delete(cls, shares_id):
        """
        Deletes the shares package of the specified shares id.

        Args:
            shares_id: The technical primary key of the shares package to be
                deleted.
        """
        # pylint: disable=no-member
        DBSession.query(Shares).filter(Shares.id == shares_id).delete()
Пример #27
0
    def tearDownClass(cls):
        """
        Remove the database

        The database must be set up each time a test case is initialized in
        order to have clean data.
        """
        db_session = cls.get_db_session()
        db_session.close()
        DBSession.remove()
Пример #28
0
def init():
    engine = engine_from_config({'sqlalchemy.url': 'sqlite://'})
    DBSession.configure(bind=engine)
    Base.metadata.create_all(engine)
    # Setup alembic database migration information.
    # This creates the alembic_version table in the database
    # which is the basis for migrations and the "alembic current"
    # command.
    alembic_cfg = Config('alembic.ini')
    command.stamp(alembic_cfg, 'head')
Пример #29
0
    def setUp(self):
        self.config = testing.setUp()
        self.config.include('pyramid_mailer.testing')
        self.config.registry.settings[
            'c3smembership.url'] = 'https://yes.c3s.cc'
        self.config.registry.settings['c3smembership.mailaddr'] = '*****@*****.**'
        self.config.registry.settings['testing.mail_to_console'] = 'false'

        DBSession.remove()
        self.session = _initTestingDB()
 def test_main_correct(self):
     """
     test the initialize_c3sMembership_db script with correct arguments
     """
     from c3smembership.scripts.initialize_db import main
     filename = 'webdrivertest.db'
     if os.path.isfile(filename):
         os.unlink(filename)
     argv = ['initialize_c3sMembership_db', 'webdrivertest.ini']
     main(argv)
     DBSession.close()
     DBSession.remove()
Пример #31
0
    def setUp(self):
        self.config = testing.setUp()
        self.config.include('pyramid_mailer.testing')
        self.config.registry.settings[
            'c3smembership.url'] = 'https://yes.c3s.cc'
        self.config.registry.settings['c3smembership.notification_sender'] = \
            '*****@*****.**'
        self.config.registry.settings['c3smembership.status_receiver'] = \
            '*****@*****.**'
        self.config.registry.settings['testing.mail_to_console'] = 'false'
        self.config.registry.get_mailer = get_mailer

        DBSession.remove()
        self.session = DBSession
Пример #32
0
    def setUp(self):
        self.config = testing.setUp()
        self.config.include('pyramid_mailer.testing')
        self.config.include('c3smembership.presentation.pagination')
        self.config.registry.settings['testing.mail_to_console'] = 'false'
        self.config.add_route('dashboard', '/')
        def dashboard_content_size_provider(filtering):
            return 0
        self.config.make_pagination_route(
            'dashboard',
            'id',
            dashboard_content_size_provider)

        DBSession.remove()
        self.session = _initTestingDB()
Пример #33
0
    def setUp(self):
        self.config = testing.setUp()
        self.config.include('pyramid_mailer.testing')
        self.config.include('c3smembership.presentation.pagination')
        self.config.registry.settings['testing.mail_to_console'] = 'false'
        self.config.add_route('dashboard', '/')

        def dashboard_content_size_provider(filtering):
            return 0

        self.config.make_pagination_route('dashboard', 'id',
                                          dashboard_content_size_provider)

        DBSession.remove()
        self.session = _initTestingDB()
    def create_general_assembly(cls, number, name, date):
        """
        Create a general assembly

        Args:
            number: Integer. The number of the general assembly as a unique
                identifier.
            name: String. The name of the general assembly.
            date: `datetime.date`. The date at which the general assembly takes
                place.
        """
        assembly = GeneralAssembly(number, name, date)
        # pylint: disable=no-member
        DBSession.add(assembly)
        DBSession.flush()
Пример #35
0
 def connect(self, cfg, customAppSettings={}, wrapper='StopableWSGIServer'):
     self.cfg = cfg
     # clear old connections
     # try:
     # DBSession.close()
     # DBSession.remove()
     # os.remove(self.cfg['app']['db'])
     # except:
     # pass
     # create appConfig from ini
     self.appSettings = appconfig(
         'config:' + os.path.join(
             os.path.dirname(__file__), '../../', self.cfg['app']['ini']
         )
     )
     # store some derived variables
     self.appSettings['sqlalchemy.url'] = 'sqlite:///'+self.cfg['app']['db']
     # merge/override appConfig with custom settings in cfg
     self.appSettings.update(self.cfg['app']['appSettings'])
     # merge/override appConfig with individual custom settings
     self.appSettings.update(customAppSettings)
     # app
     engine = engine_from_config(self.appSettings)
     DBSession.configure(bind=engine)
     Base.metadata.create_all(engine)
     from c3smembership import main
     app = main({}, **self.appSettings)
     # create srv
     if wrapper == 'StopableWSGIServer':
         self.srv = StopableWSGIServer.create(
             app,
             host=self.cfg['app']['host'],
             port=self.cfg['app']['port']
         )
         # check srv
         if not self.srv.wait():
             raise Exception('Server could not be fired up. Exiting ...')
     elif wrapper == 'TestApp':
         self.srv = TestApp(app)
     else:
         raise Exception('Wrapper could not be found. Exiting ...')
     # store some variables
     self.srv.db = DBSession
     self.srv.url = 'http://' + self.cfg['app']['host'] + ':' \
                    + self.cfg['app']['port'] + '/'
     # self.srv.lu = 'lu/' + self.cfg['member']['token'] + '/' \
     #              + self.cfg['member']['email']
     return self.srv
Пример #36
0
 def make_unconnected_shares(self):
     with transaction.manager:
         shares2 = Shares(
             number=23,
             date_of_acquisition=date.today(),
             reference_code=u'IJKLMNO',
             signature_received=True,
             signature_received_date=date(2014, 1, 7),
             payment_received=True,
             payment_received_date=date(2014, 1, 8),
             signature_confirmed=True,
             signature_confirmed_date=date(2014, 1, 8),
             payment_confirmed=True,
             payment_confirmed_date=date(2014, 1, 9),
             accountant_comment=u'not connected',
         )
     DBSession.add(shares2)
Пример #37
0
    def get_all(cls):
        """
        Get all C3sStaff objects from the database.

        Returns:
            list: list of C3sStaff objects.
        """
        return DBSession.query(cls).all()
Пример #38
0
 def make_unconnected_shares(self):
     with transaction.manager:
         shares2 = Shares(
             number=23,
             date_of_acquisition=date.today(),
             reference_code=u'IJKLMNO',
             signature_received=True,
             signature_received_date=date(2014, 1, 7),
             payment_received=True,
             payment_received_date=date(2014, 1, 8),
             signature_confirmed=True,
             signature_confirmed_date=date(2014, 1, 8),
             payment_confirmed=True,
             payment_confirmed_date=date(2014, 1, 9),
             accountant_comment=u'not connected',
         )
     DBSession.add(shares2)
    def invite_member(cls, membership_number, general_assembly_number, token):
        """
        Store the member invitation for the general assembly

        Args:
            membership_number: Integer. The membership number of the member for
                which the general assembly invitation is stored.
            general_assembly_number: Integer. The number of the general
                assembly for which the invitation is stored for the member.
            token: String. The token set to verify the member for API access by
                the ticketing application.
        """
        # pylint: disable=no-member
        member = MemberRepository.get_member(membership_number)
        assembly = cls.get_general_assembly(general_assembly_number)
        invitation = GeneralAssemblyInvitation(
            assembly, member, cls.datetime.now(), token)
        DBSession.add(invitation)
        DBSession.flush()
Пример #40
0
    def setUp(self):
        """
        set up everything for a test case
        """
        self.config = testing.setUp()
        self.config.include('pyramid_mailer.testing')
        try:
            DBSession.close()
            DBSession.remove()
            # print("removing old DBSession ==============================")
        except:
            # print("no DBSession to remove ==============================")
            pass
        from sqlalchemy import create_engine
        # engine = create_engine('sqlite:///test_utils.db')
        engine = create_engine('sqlite:///:memory:')
        DBSession.configure(bind=engine)
        self.session = DBSession  # ()

        Base.metadata.create_all(engine)
        with transaction.manager:
            member1 = C3sMember(  # german
                firstname=u'SomeFirstnäme',
                lastname=u'SomeLastnäme',
                email=u'*****@*****.**',
                address1=u"addr one",
                address2=u"addr two",
                postcode=u"12345",
                city=u"Footown Mäh",
                country=u"Foocountry",
                locale=u"DE",
                date_of_birth=date.today(),
                email_is_confirmed=False,
                email_confirm_code=u'ABCDEFGBAR',
                password=u'arandompassword',
                date_of_submission=date.today(),
                membership_type=u'normal',
                member_of_colsoc=True,
                name_of_colsoc=u"GEMA",
                num_shares=u'23',
            )
            DBSession.add(member1)
            DBSession.flush()
Пример #41
0
    def setUp(self):
        """
        set up everything for a test case
        """
        self.config = testing.setUp()
        self.config.include('pyramid_mailer.testing')
        try:
            DBSession.close()
            DBSession.remove()
            # print("removing old DBSession ==============================")
        except:
            # print("no DBSession to remove ==============================")
            pass
        from sqlalchemy import create_engine
        # engine = create_engine('sqlite:///test_utils.db')
        engine = create_engine('sqlite:///:memory:')
        DBSession.configure(bind=engine)
        self.session = DBSession  # ()

        Base.metadata.create_all(engine)
        with transaction.manager:
            member1 = C3sMember(  # german
                firstname=u'SomeFirstnäme',
                lastname=u'SomeLastnäme',
                email=u'*****@*****.**',
                address1=u"addr one",
                address2=u"addr two",
                postcode=u"12345",
                city=u"Footown Mäh",
                country=u"Foocountry",
                locale=u"DE",
                date_of_birth=date.today(),
                email_is_confirmed=False,
                email_confirm_code=u'ABCDEFGBAR',
                password=u'arandompassword',
                date_of_submission=date.today(),
                membership_type=u'normal',
                member_of_colsoc=True,
                name_of_colsoc=u"GEMA",
                num_shares=u'23',
            )
            DBSession.add(member1)
            DBSession.flush()
    def get_invitees(cls, general_assembly_number, invitees_count):
        """
        Gets a number of members which have not yet been invited to the general
        assembly.

        Queries the database for members, where:

        - members are members
        - members have not received their invitation email yet

        Args:
            general_assembly_number: Integer. The number of the general
                assembly for which the invitees are returned.
            invitees_count: Integer. Number of invitees returned at maximum.

        Returns:
            A list member objects.
        """
        # pylint: disable=no-member
        # In SqlAlchemy the True comparison must be done as "a == True" and not
        # in the python default way "a is True". Therefore:
        # pylint: disable=singleton-comparison
        return (
            # Get members
            DBSession.query(C3sMember)
            # combine with the general assembly requested as a cross join with
            # the one general assembly row
            .join(
                GeneralAssembly,
                GeneralAssembly.number == general_assembly_number)
            # combine them with invitations for this member to this general
            # assembly if any
            .outerjoin(
                GeneralAssemblyInvitation,
                and_(
                    C3sMember.id == GeneralAssemblyInvitation.member_id,
                    GeneralAssemblyInvitation.general_assembly_id ==
                    GeneralAssembly.id
                )
            )
            # but only
            .filter(
                and_(
                    # if no invitation has been sent
                    GeneralAssemblyInvitation.id == None,
                    # and the member has membership at the assmebly date
                    C3sMember.is_member_filter(GeneralAssembly.date),
                )
            )
            # get as many as requested
            .slice(0, invitees_count)
            # and get all of the actual records
            .all()
        )
    def test_main_false(self):
        """
        test the initialize_c3sMembership_db script with faulty arguments

        get it wrong: wrong arguments:
        * must be at least one argument
        * must be name of an existing file

        this gets coverage for the "usage" function in scripts/initialize_db.py
        """
        from c3smembership.scripts.initialize_db import main
        argv = []
        with self.assertRaises(IndexError):
            main(argv)
        argv = ['notExisting.ini', ]
        with self.assertRaises(SystemExit) as context:
            main(argv)
        self.assertEqual(context.exception.code, 1)
        DBSession.close()
        DBSession.remove()
Пример #44
0
 def connect(self, cfg, customAppSettings=None,
             wrapper='StopableWSGIServer'):
     if customAppSettings is None:
         customAppSettings = {}
     self.cfg = cfg
     self.app_settings = appconfig(
         'config:' + os.path.join(
             os.path.dirname(__file__), '../../', self.cfg['app']['ini']
         )
     )
     # store some derived variables
     self.app_settings['sqlalchemy.url'] = 'sqlite:///'+self.cfg['app']['db']
     # merge/override appConfig with custom settings in cfg
     self.app_settings.update(self.cfg['app']['appSettings'])
     # merge/override appConfig with individual custom settings
     self.app_settings.update(customAppSettings)
     # app
     engine = engine_from_config(self.app_settings)
     DBSession.configure(bind=engine)
     Base.metadata.create_all(engine)
     from c3smembership import main
     app = main({}, **self.app_settings)
     # create srv
     if wrapper == 'StopableWSGIServer':
         self.srv = StopableWSGIServer.create(
             app,
             host=self.cfg['app']['host'],
             port=self.cfg['app']['port']
         )
         # check srv
         if not self.srv.wait():
             raise Exception('Server could not be fired up. Exiting ...')
     elif wrapper == 'TestApp':
         self.srv = TestApp(app)
     else:
         raise Exception('Wrapper could not be found. Exiting ...')
     # store some variables
     self.srv.db = DBSession
     self.srv.url = 'http://' + self.cfg['app']['host'] + ':' \
                    + self.cfg['app']['port'] + '/'
     return self.srv
Пример #45
0
    def set_reference_code(cls, shares_id, reference_code):
        """
        Sets the reference code of the shares package.

        Args:
            shares_id: The technical primary key of the shares package for
                which the payment confirmation is set.
            reference_code: The reference code which is set.
        """
        # pylint: disable=no-member
        shares = DBSession.query(Shares).filter(Shares.id == shares_id).first()
        shares.reference_code = reference_code
Пример #46
0
    def get(cls, shares_id):
        """
        Gets the shares package for the specified shares id.

        Args:
            shares_id: The technical primary key of the shares package for
                which the payment confirmation is set.

        Returns:
            The shares package for the specified shares id.
        """
        # pylint: disable=no-member
        return DBSession.query(Shares).filter(Shares.id == shares_id).first()
Пример #47
0
 def make_member_with_shares2(self):
     with transaction.manager:
         member1 = C3sMember(  # german
             firstname=u'SomeFirstnäme',
             lastname=u'SomeLastnäme',
             email=u'*****@*****.**',
             address1=u"addr one",
             address2=u"addr two",
             postcode=u"12345",
             city=u"Footown Mäh",
             country=u"Foocountry",
             locale=u"DE",
             date_of_birth=date.today(),
             email_is_confirmed=False,
             email_confirm_code=u'ABCDEFGFOO',
             password=u'arandompassword',
             date_of_submission=date.today(),
             membership_type=u'normal',
             member_of_colsoc=True,
             name_of_colsoc=u"GEMA",
             num_shares=u'23',
         )
         shares1 = Shares(
             number=2,
             date_of_acquisition=date.today(),
             reference_code=u'ABCDEFGH',
             signature_received=True,
             signature_received_date=date(2014, 6, 7),
             payment_received=True,
             payment_received_date=date(2014, 6, 8),
             signature_confirmed=True,
             signature_confirmed_date=date(2014, 6, 8),
             payment_confirmed=True,
             payment_confirmed_date=date(2014, 6, 9),
             accountant_comment=u'no comment',
         )
         member1.shares = [shares1]
     DBSession.add(member1)
     DBSession.add(shares1)
Пример #48
0
    def get_member(cls, membership_number):
        """
        Gets the member of the specified membership number.

        Args:
            membership_number: The membership number of the member which is
                returned.

        Returns:
            The membership of the specified membership number.
        """
        # pylint: disable=no-member
        return DBSession.query(C3sMember).filter(
            C3sMember.membership_number == membership_number).first()
Пример #49
0
    def test_set_reference_code(self):
        """
        Tests the ShareRepository.set_reference_code method.
        """
        # pylint: disable=no-member
        member1 = DBSession.query(C3sMember).filter(
            C3sMember.membership_number == 'member1').first()
        shares = member1.shares[0]

        ShareRepository.set_reference_code(shares.id, u'test_reference_code')
        self.assertEqual(shares.reference_code, u'test_reference_code')

        ShareRepository.set_reference_code(shares.id, None)
        self.assertEqual(shares.reference_code, None)
Пример #50
0
def _initTestingDB():
    # from sqlalchemy import create_engine
    # from c3smembership.models import initialize_sql
    # session = initialize_sql(create_engine('sqlite:///memory'))
    # session = DBSession
    my_settings = {
        'sqlalchemy.url': 'sqlite:///:memory:', }
    engine = engine_from_config(my_settings)
    DBSession.configure(bind=engine)
    Base.metadata.create_all(engine)
    with transaction.manager:
        member1 = C3sMember(  # german
            firstname=u'SomeFirstnäme',
            lastname=u'SomeLastnäme',
            email=u'*****@*****.**',
            address1=u"addr one",
            address2=u"addr two",
            postcode=u"12345",
            city=u"Footown Mäh",
            country=u"Foocountry",
            locale=u"de",
            date_of_birth=date.today(),
            email_is_confirmed=False,
            email_confirm_code=u'ABCDEFGFOO',
            password=u'arandompassword',
            date_of_submission=date.today(),
            membership_type=u'normal',
            member_of_colsoc=True,
            name_of_colsoc=u"GEMA",
            num_shares=u'23',
        )
        member2 = C3sMember(  # german
            firstname=u'AAASomeFirstnäme',
            lastname=u'XXXSomeLastnäme',
            email=u'*****@*****.**',
            address1=u"addr one",
            address2=u"addr two",
            postcode=u"12345",
            city=u"Footown Mäh",
            country=u"Foocountry",
            locale=u"en",
            date_of_birth=date.today(),
            email_is_confirmed=False,
            email_confirm_code=u'ABCDEFGBAR',
            password=u'arandompassword',
            date_of_submission=date.today(),
            membership_type=u'normal',
            member_of_colsoc=True,
            name_of_colsoc=u"GEMA",
            num_shares=u'23',
        )
        DBSession.add(member1)
        DBSession.add(member2)

    return DBSession
Пример #51
0
    def get_member_by_id(cls, member_id):
        """
        Gets the member of the specified member ID.

        TODO: The member ID is a database internal ID and must not be exposed
        from the data layer. Therefore, the implementation must be adjusted to
        use the get_member method using the membership number.

        Args:
            member_id: The technical ID of the member which is returned.

        Returns:
            The membership of the specified member id.
        """
        # pylint: disable=no-member
        return DBSession.query(C3sMember).filter(
            C3sMember.id == member_id).first()
Пример #52
0
    def get_member_shares(cls, membership_number):
        """
        Gets the share of a members.

        Args:
            membership_number: The membership number of the member of which the
                shares are returned.

        Returns:
            The shares of the member.
        """
        # pylint: disable=no-member
        return DBSession.query(Shares) \
            .join(members_shares) \
            .join(C3sMember) \
            .filter(C3sMember.membership_number == membership_number) \
            .all()
Пример #53
0
    def get_approved(cls, start_date, end_date):
        """
        Gets all shares approved between and including both start date and end
        date.

        Args:
            start_date: The first date for which approved shares are returned.
            end_date: The last date for which approved shares are returned.

        Returns:
            All shares approved between and including both start date and end
            date.
        """
        # pylint: disable=no-member
        return DBSession.query(Shares).filter(
            expression.and_(
                Shares.date_of_acquisition >= start_date,
                Shares.date_of_acquisition <= end_date)).all()
Пример #54
0
    def set_payment_confirmation(cls, shares_id, confirmation_date=None):
        """
        Sets the payment confirmation of the shares package.

        Args:
            shares_id: The technical ID of the shares package for which the
                payment confirmation is set.
            confirmation_date: Optional. The payment confirmation date which is
                set. If not specified the payment confirmation date is unset.

        """
        # pylint: disable=no-member
        shares = DBSession.query(Shares).filter(Shares.id == shares_id).first()
        shares.payment_confirmed_date = confirmation_date
        shares.payment_confirmed = \
            confirmation_date is not None \
            and \
            confirmation_date > date(1970, 1, 1)
Пример #55
0
    def _accepted_members_query(cls, effective_date=None):
        """
        Gets the query to retrieve members accepted until and including the
        specified effective date.

        Args:
            effective_date: Optional. The date on which the membership has been
                accepted. If not specified system date is used as effective
                date.

        Returns:
            The query to retrieve members accepted until and including the
            specified effective date.
        """
        # pylint: disable=no-member
        all_members_query = DBSession.query(C3sMember)
        accepted_members_query = cls._filter_accepted_member(
            all_members_query, effective_date)
        return accepted_members_query
Пример #56
0
    def set_signature_confirmation(cls, shares_id, confirmation_date=None):
        """
        Sets the signature reception date.

        Args:
            shares_id: The technical ID of the shares package for which the
                signature reception date is set.
            confirmation_date: Optional. The signature confirmation date to be
                set to the share process. If not specified the signature
                confirmation date is unset.
        """
        # pylint: disable=no-member
        shares = DBSession.query(Shares).filter(Shares.id == shares_id).first()
        shares.signature_confirmed_date = confirmation_date
        shares.signature_confirmed = (
            confirmation_date is not None
            and
            confirmation_date > date(1970, 1, 1)
        )