def _setup_base(self): s = EventSettings.get_solo() s.initialized = True s.receipt_address = "Foo" s.save() self.session = cashdesk_session_before_factory(create_items=False) self.troubleshooter = user_factory(troubleshooter=True, superuser=False, password='******') self.backoffice_user = user_factory(troubleshooter=True, backoffice=True, password='******') self.cashier1 = user_factory(password='******') self.cashier2 = user_factory(password='******') self.item_full = Item.objects.create(name='Wristband red', description='Full pass', initial_stock=200) self.item_d1 = Item.objects.create(name='Wristband 1', description='Day 1', initial_stock=100) self.item_d2 = Item.objects.create(name='Wristband 2', description='Day 2', initial_stock=100) self.item_transport = Item.objects.create( name='Public transport', description='Public transport ticket', initial_stock=100, is_receipt=True) self.prod_full = Product.objects.create(name='Full pass', price=100, tax_rate=19) self.prod_d1 = Product.objects.create(name='Day pass Day 1', price=35, tax_rate=19) self.prod_d2 = Product.objects.create(name='Day pass Day 2', price=35, tax_rate=19) self.prod_transport = Product.objects.create(name='Public transport', price=16.7, tax_rate=0) ProductItem.objects.create(product=self.prod_full, item=self.item_full, amount=1) ProductItem.objects.create(product=self.prod_d1, item=self.item_d1, amount=1) ProductItem.objects.create(product=self.prod_d2, item=self.item_d2, amount=1) ProductItem.objects.create(product=self.prod_transport, item=self.item_transport, amount=1) self.desk1 = Cashdesk.objects.create(name='Desk 1', ip_address='10.1.1.1') self.desk2 = Cashdesk.objects.create(name='Desk 2', ip_address='10.1.1.2')
def test_reverse_wrong_session_troubleshooter(): session1 = cashdesk_session_before_factory() session2 = cashdesk_session_before_factory(user=user_factory( troubleshooter=True)) trans = transaction_factory(session1) transaction_position_factory(transaction=trans) reverse_transaction(trans_id=trans.pk, current_session=session2, authorized_by=user_factory(troubleshooter=True))
def test_search_with_usage_from_another_user(session, strict_inline_search, user): """Test correct score calculation for sticker set titles with a single sticker usage.""" # Simple search which should get nearly all stickers from both sets context = Context('awesome', '', user) other_user = user_factory(session, 100, 'other_user') used_sticker = session.query(Sticker).get('sticker_00') assert used_sticker is not None sticker_usage = StickerUsage(other_user, used_sticker) sticker_usage.usage_count = 1 session.add(sticker_usage) session.commit() matching_stickers, fuzzy_matching_stickers, duration = get_matching_stickers( session, context) assert len(matching_stickers) == 40 assert len(fuzzy_matching_stickers) == 0 for i, result in enumerate(matching_stickers): # Also do this little workaround to prevent fucky number sorting here as well if i < 10: i = f'0{i}' assert result[0] == f'sticker_{i}' assert result[1] == 0.75 assert result[2] == 'z_mega_awesome'
def test_revert_replacing_user_tags(session, user, sticker_set, tags): """Test that reverting the tags of a user and undoing this revert works.""" ban_user = user_factory(session, 3, 'testuser2') for sticker in sticker_set.stickers: # Create a new tag for each sticker tag_sticker(session, f'tag-banned-{sticker.file_id}', sticker, ban_user, replace=True) session.commit() # Revert the changes of malicious user revert_user_changes(session, ban_user) # Ensure that the mallicious user's tags have been removed and the old tags are in place for sticker in sticker_set.stickers: assert len(sticker.tags) == 1 assert sticker.tags[0].name == f'tag-{sticker.file_id}' for change in ban_user.changes: assert change.reverted # Undo the revert undo_user_changes_revert(session, ban_user) # Ensure that the mallicious user's tags have been removed and the old tags are in place for sticker in sticker_set.stickers: assert len(sticker.tags) == 1 assert sticker.tags[0].name == f'tag-banned-{sticker.file_id}' for change in ban_user.changes: assert not change.reverted
def test_search_with_usage_from_another_user(session, strict_inline_search, user): """Test correct score calculation for sticker set titles with a single sticker usage.""" # Simple search which should get nearly all stickers from both sets context = Context("awesome", "", user) other_user = user_factory(session, 100, "other_user") used_sticker = session.query(Sticker).filter( Sticker.file_id == "sticker_00").one() sticker_usage = StickerUsage(other_user, used_sticker) sticker_usage.usage_count = 1 session.add(sticker_usage) session.commit() matching_stickers, fuzzy_matching_stickers, duration = get_matching_stickers( session, context) assert len(matching_stickers) == 40 assert len(fuzzy_matching_stickers) == 0 for i, result in enumerate(matching_stickers): # Also do this little workaround to prevent fucky number sorting here as well if i < 10: i = f"0{i}" assert result[1] == f"sticker_{i}" assert result[3] == "z_mega_awesome" assert result[4] == 0.75
def test_current_items(): session = cashdesk_session_before_factory(create_items=False) buser = user_factory(troubleshooter=True, superuser=True) item_full = Item.objects.create(name='Full pass', description='', initial_stock=200) item_1d = Item.objects.create(name='One day pass', description='', initial_stock=100) prod_full = Product.objects.create(name='Full ticket', price=23, tax_rate=19) prod_1d = Product.objects.create(name='One day ticket', price=12, tax_rate=19) ProductItem.objects.create(product=prod_full, item=item_full, amount=1) ProductItem.objects.create(product=prod_1d, item=item_1d, amount=1) ItemMovement.objects.create(session=session, item=item_full, amount=20, backoffice_user=buser) ItemMovement.objects.create(session=session, item=item_1d, amount=10, backoffice_user=buser) for i in range(3): transaction_position_factory(transaction_factory(session), prod_full) for i in range(2): transaction_position_factory(transaction_factory(session), prod_1d) trans = transaction_position_factory(transaction_factory(session), prod_1d).transaction reverse_transaction(trans_id=trans.pk, current_session=session) session.end = now() session.save() ItemMovement.objects.create(session=session, item=item_full, amount=-17, backoffice_user=buser) ItemMovement.objects.create(session=session, item=item_1d, amount=-5, backoffice_user=buser) assert session.get_current_items() == [{ 'movements': 20, 'total': 0, 'transactions': 3, 'item': item_full, 'final_movements': 17 }, { 'movements': 10, 'total': 3, 'transactions': 2, 'item': item_1d, 'final_movements': 5 }]
def test_sell_list_constraint_troubleshooter_bypass(): p = product_factory() list_constraint = list_constraint_factory() ListConstraintProduct.objects.create( product=p, constraint=list_constraint, ) user = user_factory(troubleshooter=True) user.auth_token = 'abcdefg' user.save() options = {'list_{}'.format(list_constraint.pk): str(user.auth_token)} pos = sell_ticket(product=p.id, **options) assert pos.listentry is None assert pos.authorized_by == user
def test_preorder_list_constraint_troubleshooter_bypass(): pp = preorder_position_factory(paid=True) list_constraint = list_constraint_factory() ListConstraintProduct.objects.create( product=pp.product, constraint=list_constraint, ) user = user_factory(troubleshooter=True) user.auth_token = 'abcdefg' user.save() options = {'list_{}'.format(list_constraint.pk): str(user.auth_token)} pos = redeem_preorder_ticket(secret=pp.secret, **options) assert pos.listentry is None assert pos.authorized_by == user
def test_correct_session_handling(session, user): """User is created correctly.""" assert user.username == 'testuser' second_user = user_factory(session, 5, 'testuser2') first_user = session.query(User).get(2) assert first_user is not None second_user = session.query(User).get(5) assert second_user is not None session.delete(first_user) session.commit() first_user = session.query(User).get(1) assert first_user is None
def test_correct_session_handling(session, user): """User is created correctly.""" assert user.username == "testuser" second_user = user_factory(session, 5, "testuser2") # First user exists first_user = session.query(User).filter(User.id == 2).one() # Second user exists second_user = session.query(User).filter(User.id == 5).one() session.delete(first_user) session.commit() # First user is deleted first_user = session.query(User).get(1) assert first_user is None
def user(session): """Create a user.""" return user_factory(session, 2, 'TestUser')
def admin(session): """Create a user.""" return user_factory(session, 1, 'admin', True)