Esempio n. 1
0
    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')
Esempio n. 2
0
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))
Esempio n. 3
0
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'
Esempio n. 4
0
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
Esempio n. 5
0
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
Esempio n. 6
0
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
    }]
Esempio n. 7
0
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
Esempio n. 8
0
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
Esempio n. 9
0
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
Esempio n. 10
0
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
Esempio n. 11
0
def user(session):
    """Create a user."""
    return user_factory(session, 2, 'TestUser')
Esempio n. 12
0
def admin(session):
    """Create a user."""
    return user_factory(session, 1, 'admin', True)