def test_invitation_batch(self): """ Test the invitation procedure, batch mode. """ from c3smembership.invite_members import batch_invite members = C3sMember.get_all() for member in members: self.assertEqual(member.email_invite_flag_bcgv17, False) self.assertTrue(member.email_invite_token_bcgv17 is None) self.assertTrue(member.membership_accepted is True) req = testing.DummyRequest() # have some cookies req.cookies['on_page'] = 0 req.cookies['order'] = 'asc' req.cookies['orderby'] = 'id' # with matchdict req.matchdict = {'number': 1} # this will trigger 1 invitation res = batch_invite(req) _messages = req.session.peek_flash('message_to_staff') print(_messages) self.assertTrue( 'sent out 1 mails (to members with ids [1])' in _messages) # without matchdict req.matchdict = {'number': ''} # this triggers remaining 3 res = batch_invite(req) self.assertEqual(res.status_code, 302) _messages = req.session.peek_flash('message_to_staff') self.assertTrue( 'sent out 3 mails (to members with ids [2, 3, 4])' in _messages) # send more request with POST['number'] req = testing.DummyRequest(POST={ 'number': 'foo', 'submit': True, }) res = batch_invite(req) req = testing.DummyRequest(POST={ 'number': 1, 'submit': True, }) res = batch_invite(req) _messages = req.session.peek_flash('message_to_staff') self.assertTrue('no invitees left. all done!' in _messages) mailer = get_mailer(req) self.assertEqual(len(mailer.outbox), 4) # assumptions about those members and emails sent self.assertTrue('[C3S] Einladung' in mailer.outbox[0].subject) # de self.assertTrue('[C3S] Invitation' in mailer.outbox[1].subject) # en self.assertTrue('[C3S] Einladung' in mailer.outbox[2].subject) # de self.assertTrue('[C3S] Invitation' in mailer.outbox[3].subject) # en for member in members: # has been invited self.assertEqual(member.email_invite_flag_bcgv17, True) # has a token self.assertTrue(member.email_invite_token_bcgv17 is not None) # firstname and token are in email body self.assertTrue(members[member.id - 1].firstname in mailer.outbox[member.id - 1].body) self.assertTrue(members[member.id - 1].email_invite_token_bcgv17 in mailer.outbox[member.id - 1].body)
def init_testing_db(): """ Initializes the memory database with test samples. """ my_settings = { 'sqlalchemy.url': 'sqlite:///:memory:', } engine = engine_from_config(my_settings) DBSession.configure(bind=engine) Base.metadata.create_all(engine) with transaction.manager: # There is a side effect of test_initialization.py after which there are # still records in the database although it is setup from scratch. # Therefore, remove all members to have an empty table. members = C3sMember.get_all() for member in members: DBSession.delete(member) DBSession.flush() member1 = C3sMember( # german person 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'ABCDEFG1', password=u'arandompassword', date_of_submission=date.today(), membership_type=u'normal', member_of_colsoc=False, name_of_colsoc=u"", num_shares=u'23', ) member2 = C3sMember( # english person 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'ABCDEFG2', password=u'arandompassword', date_of_submission=date.today(), membership_type=u'normal', member_of_colsoc=False, name_of_colsoc=u"", num_shares=u'23', ) member3 = C3sMember( # german legalentity firstname=u'Cooles PlattenLabel', 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'ABCDEFG3', password=u'arandompassword', date_of_submission=date.today(), membership_type=u'normal', member_of_colsoc=False, name_of_colsoc=u"", num_shares=u'42', ) member4 = C3sMember( # english legalentity firstname=u'Incredible Records', 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'ABCDEFG4', password=u'arandompassword', date_of_submission=date.today(), membership_type=u'normal', member_of_colsoc=False, name_of_colsoc=u"", num_shares=u'2', ) member1.membership_accepted = True DBSession.add(member1) member2.membership_accepted = True DBSession.add(member2) member3.membership_accepted = True DBSession.add(member3) member4.membership_accepted = True DBSession.add(member4) DBSession.flush() return DBSession
'date': date, 'new_members': [], 'num_members': 0, 'num_shares': 0, 'sum_shares': 0, 'new_shares': [], 'shares_paid_unapproved_count': 0, 'shares_paid_unapproved': [], } else: # if form not submitted, preload values form.set_appstruct(appstruct) # prepare: get information from the database # get memberships all_members = C3sMember.get_all() # prepare filtering and counting members = [] # all the members matching the criteria members_count = 0 # now filter and count the afms and members for member in all_members: # if membership granted during time period if member.membership_date >= start_date \ and member.membership_date <= end_date: members.append(member) members_count += 1 share_statistics = request.registry.share_information.get_statistics( start_date, end_date)
'num_shares': 0, 'new_members': [], 'paid_unapproved_shares': [], 'num_shares_paid_unapproved': 0, 'sum_shares': 0, 'new_shares': [], 'start_date': start_date, 'end_date': end_date, } else: # if form not submitted, preload values form.set_appstruct(appstruct) # prepare: get information from the database # get memberships all_members = C3sMember.get_all() # prepare filtering and counting members = [] # all the members matching the criteria members_count = 0 afm_shares_paid_unapproved_cnt = 0 afm_shares_paid_unapproved = [] # now filter and count the afms and members for member in all_members: if ( member.membership_accepted and # unneccessary!? (member.membership_date >= start_date) and (member.membership_date <= end_date) ):
def test_invitation_batch(self): """ Test the invitation procedure, batch mode. """ from c3smembership.invite_members import batch_invite all = C3sMember.get_all() for m in all: self.assertEqual(m.email_invite_flag_bcgv16, False) self.assertTrue(m.email_invite_token_bcgv16 is None) self.assertTrue(m.membership_accepted is True) req = testing.DummyRequest() # have some cookies req.cookies['on_page'] = 0 req.cookies['order'] = 'asc' req.cookies['orderby'] = 'id' # with matchdict req.matchdict = {'number': 1} # this will trigger 1 invitation res = batch_invite(req) _messages = req.session.peek_flash('message_to_staff') # print("messages: {}".format(_messages)) self.assertTrue( 'sent out 1 mails (to members with ids [1]' in _messages) # without matchdict req.matchdict = {'number': ''} # this triggers remaining 3 res = batch_invite(req) self.assertEqual(res.status_code, 302) _messages = req.session.peek_flash('message_to_staff') # print("messages: {}".format(_messages)) self.assertTrue( 'sent out 3 mails (to members with ids [2, 3, 4]' in _messages) # send more request with POST['number'] req = testing.DummyRequest( POST={ 'number': 'foo', 'submit': True, }) res = batch_invite(req) req = testing.DummyRequest( POST={ 'number': 1, 'submit': True, }) res = batch_invite(req) _messages = req.session.peek_flash('message_to_staff') # print("messages: {}".format(_messages)) self.assertTrue( 'no invitees left. all done!' in _messages) mailer = get_mailer(req) self.assertEqual(len(mailer.outbox), 4) # assumptions about those members and emails sent self.assertTrue('[C3S] Einladung' in mailer.outbox[0].subject) # de self.assertTrue('[C3S] Invitation' in mailer.outbox[1].subject) # en self.assertTrue('[C3S] Einladung' in mailer.outbox[2].subject) # de self.assertTrue('[C3S] Invitation' in mailer.outbox[3].subject) # en for m in all: # has been invited self.assertEqual(m.email_invite_flag_bcgv16, True) # has a token self.assertTrue(m.email_invite_token_bcgv16 is not None) # firstname and token are in email body self.assertTrue( all[m.id - 1].firstname in mailer.outbox[m.id - 1].body) self.assertTrue( all[m.id - 1].email_invite_token_bcgv16 in mailer.outbox[ m.id - 1].body)
def _initTestingDB(): my_settings = { 'sqlalchemy.url': 'sqlite:///:memory:', } engine = engine_from_config(my_settings) DBSession.configure(bind=engine) Base.metadata.create_all(engine) with transaction.manager: # There is a side effect of test_initialization.py after which there are # still records in the database although it is setup from scratch. # Therefore, remove all members to have an empty table. members = C3sMember.get_all() for member in members: DBSession.delete(member) DBSession.flush() member1 = C3sMember( # german person 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'ABCDEFG1', password=u'arandompassword', date_of_submission=date.today(), membership_type=u'normal', member_of_colsoc=False, name_of_colsoc=u"", num_shares=u'23', ) member2 = C3sMember( # english person 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'ABCDEFG2', password=u'arandompassword', date_of_submission=date.today(), membership_type=u'normal', member_of_colsoc=False, name_of_colsoc=u"", num_shares=u'23', ) member3 = C3sMember( # german legalentity firstname=u'Cooles PlattenLabel', 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'ABCDEFG3', password=u'arandompassword', date_of_submission=date.today(), membership_type=u'normal', member_of_colsoc=False, name_of_colsoc=u"", num_shares=u'42', ) member4 = C3sMember( # english legalentity firstname=u'Incredible Records', 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'ABCDEFG4', password=u'arandompassword', date_of_submission=date.today(), membership_type=u'normal', member_of_colsoc=False, name_of_colsoc=u"", num_shares=u'2', ) member1.membership_accepted = True DBSession.add(member1) member2.membership_accepted = True DBSession.add(member2) member3.membership_accepted = True DBSession.add(member3) member4.membership_accepted = True DBSession.add(member4) DBSession.flush() return DBSession