Beispiel #1
0
def test_user_columns(app):
    """
    Tests user columns' restrictions. Name must be unique and mandatory.
    """

    # Uniqueness of uri
    user_1 = _get_user(username="******", id=1)
    user_2 = _get_user(username="******", id=1)
    user_2.name = "janne"
    with app.app_context():
        db.session.add(user_1)
        db.session.add(user_2)
        with pytest.raises(IntegrityError):
            db.session.commit()

        db.session.rollback()

    # Uniqueness of name
    user_1 = _get_user(username="******", id=1)
    user_2 = _get_user(username="******", id=2)
    with app.app_context():
        db.session.add(user_1)
        db.session.add(user_2)
        with pytest.raises(IntegrityError):
            db.session.commit()

        db.session.rollback()

    # Not null name
    user = _get_user()
    with app.app_context():
        user.name = None
        db.session.add(user)
        with pytest.raises(IntegrityError):
            db.session.commit()
Beispiel #2
0
def test_errors(client):
    """
    Test that the correct errors are raised in situations where they should be raised.
    """
    #two bankaccounts with the same iban should raise IntegrityError
    bankAccount1 = utils._get_bankAccount(iban="FI01", bankName="The bank")
    bankAccount2 = utils._get_bankAccount(iban="FI01", bankName="The bank")
    db.session.add(bankAccount1)
    db.session.add(bankAccount2)
    with pytest.raises(IntegrityError):
        db.session.commit()
    db.session.rollback()

    #two users with the same username should raise IntegrityError
    user1 = utils._get_user(username="******", password="******")
    user2 = utils._get_user(username="******", password="******")
    db.session.add(user1)
    db.session.add(user2)
    with pytest.raises(IntegrityError):
        db.session.commit()
    db.session.rollback()

    #two categories with the same name should raise IntegrityError
    category1 = utils._get_category(name="cat1")
    category2 = utils._get_category(name="cat1")
    db.session.add(category1)
    db.session.add(category2)
    with pytest.raises(IntegrityError):
        db.session.commit()
    db.session.rollback()

    #creating two new users for transaction
    user3 = utils._get_user(username="******", password="******")
    user4 = utils._get_user(username="******", password="******")
    db.session.add(user3)
    db.session.add(user4)
    db.session.commit()

    #transaction with price other than float should raise StatementError
    transaction = utils._get_transaction(price="en kerro",
                                         dateTime=datetime.now(),
                                         sender=user3,
                                         receiver=user4,
                                         category=[category1])
    db.session.add(transaction)
    with pytest.raises(StatementError):
        db.session.commit()
    db.session.rollback()

    #transaction with dateTime other than datetime should raise StatementError
    transaction = utils._get_transaction(price=9.99,
                                         dateTime="en kerro",
                                         sender=user3,
                                         receiver=user4,
                                         category=[category1])
    db.session.add(transaction)
    with pytest.raises(StatementError):
        db.session.commit()
    db.session.rollback()
Beispiel #3
0
def test_create_instances(client):
    """
    Tests that we can create one instance of each model and save them to the
    database using valid values for all columns. After creation, test that
    everything can be found from database, and that all relationships have been
    saved correctly.
    """

    # Create everything
    bankAccount1 = utils._get_bankAccount(iban="FI01", bankName="The bank")
    bankAccount2 = utils._get_bankAccount(iban="FI02", bankName="The bank")
    user1 = utils._get_user(username="******", password="******")
    user2 = utils._get_user(username="******", password="******")
    user1.bankAccount.append(bankAccount1)
    user2.bankAccount.append(bankAccount2)
    category1 = utils._get_category(name="cat1")
    category2 = utils._get_category(name="cat2")
    transaction = utils._get_transaction(price=3.50,
                                         dateTime=datetime.now(),
                                         sender=user1,
                                         receiver=user2,
                                         category=[category1])

    db.session.add(bankAccount1)
    db.session.add(bankAccount2)
    db.session.add(user1)
    db.session.add(user2)
    db.session.add(category1)
    db.session.add(category2)
    db.session.add(transaction)
    db.session.commit()

    # Check that everything exists
    assert BankAccount.query.count() == 2
    assert User.query.count() == 2
    assert Category.query.count() == 2
    assert Transaction.query.count() == 1
    db_bankAccounts = BankAccount.query.all()
    db_users = User.query.all()

    db_categories = Category.query.all()
    db_transaction = Transaction.query.first()

    # Check all relationships (both sides)

    assert db_transaction.sender in db_users
    assert db_transaction.receiver in db_users
    for category in db_transaction.category:
        assert category in db_categories
    for bankAccount in db_transaction.sender.bankAccount:
        assert bankAccount in db_bankAccounts
Beispiel #4
0
def test_component_mod(app):
    """
    Tests the modification of component instance data
    """
    # Modify
    user = _get_user()
    equip = _get_equipment()
    component = _get_component()
    with app.app_context():
        db.session.add(user)
        db.session.add(equip)
        db.session.add(component)
        db.session.commit()
        component.name = "Ekakeula"
        component.brand = "Rock Shox"
        component.model = "Pike RTC3"
        component.date_added = datetime(2019, 11, 21, 11, 20, 30)
        component.date_retired = datetime(2020, 1, 1, 11, 20, 30)
        db.session.commit()
        component = Component.query.filter_by(category="Fork").first()
        assert component.name == "Ekakeula"
        assert component.brand == "Rock Shox"
        assert component.model == "Pike RTC3"
        assert str(component.date_added) == "2019-11-21 11:20:30"
        assert str(component.date_retired) == "2020-01-01 11:20:30"
Beispiel #5
0
def test_delete_instances(client):
    """
    Tests that instances behave correctly when deleted.
    """
    #create instances:
    #2 bankAccounts
    #2 Users
    #2 Categories
    #1 Transaction
    bankAccount1 = utils._get_bankAccount(iban="FI05", bankName="The bank")
    bankAccount2 = utils._get_bankAccount(iban="FI06", bankName="The bank")
    user1 = utils._get_user(username="******", password="******")
    user2 = utils._get_user(username="******", password="******")
    user1.bankAccount.append(bankAccount1)
    user2.bankAccount.append(bankAccount2)
    category1 = utils._get_category(name="cat3")
    category2 = utils._get_category(name="cat4")
    transaction = utils._get_transaction(price=9.99,
                                         dateTime=datetime.now(),
                                         sender=user1,
                                         receiver=user2,
                                         category=[category1])

    db.session.add(bankAccount1)
    db.session.add(bankAccount2)
    db.session.add(user1)
    db.session.add(user2)
    db.session.add(category1)
    db.session.add(category2)
    db.session.add(transaction)
    db.session.commit()
    #delete instances:
    #1 bankAccount
    #1 User
    #1 Category
    #1 Transaction
    db.session.delete(user1)
    db.session.delete(bankAccount2)
    db.session.delete(category2)
    db.session.delete(transaction)
    db.session.commit()
    #after deleting should be only one instance of
    #user, bankaccount, and category and no instances of transaction
    assert BankAccount.query.count() == 1
    assert User.query.count() == 1
    assert Category.query.count() == 1
    assert Transaction.query.count() == 0
Beispiel #6
0
def test_update_instances(client):
    """
    First instances are created and then updated. Lastly the instances are checked to have the updated attributes.
    """
    #create instances
    bankAccount1 = utils._get_bankAccount(iban="FI03", bankName="The bank")
    bankAccount2 = utils._get_bankAccount(iban="FI04", bankName="The bank")
    user1 = utils._get_user(username="******", password="******")
    user2 = utils._get_user(username="******", password="******")
    user1.bankAccount.append(bankAccount1)
    user2.bankAccount.append(bankAccount2)
    category1 = utils._get_category(name="cat3")
    category2 = utils._get_category(name="cat4")
    transaction = utils._get_transaction(price=9.99,
                                         dateTime=datetime.now(),
                                         sender=user1,
                                         receiver=user2,
                                         category=[category1])

    db.session.add(bankAccount1)
    db.session.add(bankAccount2)
    db.session.add(user1)
    db.session.add(user2)
    db.session.add(category1)
    db.session.add(category2)
    db.session.add(transaction)
    db.session.commit()
    #update instances
    user1.bankAccount.append(bankAccount2)
    user2.bankAccount.append(bankAccount1)
    transaction.sender = User.query.filter_by(username="******").first()
    category1.categoryName = "dog"
    bankAccount1.bankName = "The other bank"
    db.session.commit()
    #check that instances are updated correctly
    db_user1 = User.query.filter_by(username="******").first()
    db_user2 = User.query.filter_by(username="******").first()
    db_transaction = Transaction.query.filter_by(id=1).first()

    assert db_user1.bankAccount == [bankAccount1, bankAccount2]
    assert db_user2.bankAccount == [bankAccount2, bankAccount1]
    assert db_transaction.sender == User.query.filter_by(
        username="******").first()
    assert Category.query.filter_by(
        categoryName="dog").first().categoryName == "dog"
    assert BankAccount.query.filter_by(
        bankName="The other bank").first().bankName == "The other bank"
Beispiel #7
0
def test_user_query(app):
    """
    Tests the querying of a user instance
    """
    # Query
    user = _get_user()
    with app.app_context():
        db.session.add(user)
        db.session.commit()
        user1 = User.query.filter_by(name="user-janne").first()
        assert user1.name == "user-janne"
Beispiel #8
0
def test_equipment_query(app):
    """
    Tests the querying of a equipment instance
    """
    # Query
    user = _get_user()
    equip = _get_equipment()
    with app.app_context():
        db.session.add(user)
        db.session.add(equip)
        db.session.commit()
        equip1 = Equipment.query.filter_by(uri="Bike-11").first()
        assert equip1.name == "Bike-1"
Beispiel #9
0
def test_user_del(app):
    """
    Tests the deletion of a user instance
    """
    # Delete
    user = _get_user()
    with app.app_context():
        db.session.add(user)
        db.session.commit()
        user = User.query.filter_by(name="user-janne").first()
        db.session.delete(user)
        db.session.commit()
        assert User.query.count() == 0
Beispiel #10
0
def test_user_mod(app):
    """
    Tests the modification of user instance data
    """
    # Modify
    user = _get_user()
    with app.app_context():
        db.session.add(user)
        db.session.commit()
        user = User.query.filter_by(name="user-janne").first()
        user.name = "user-joonas"
        db.session.commit()
        user = User.query.filter_by(name="user-joonas").first()
        assert user.name == "user-joonas"
Beispiel #11
0
def test_component_query(app):
    """
    Tests the querying of a component instance
    """
    # Query
    user = _get_user()
    equip = _get_equipment()
    component = _get_component()
    with app.app_context():
        db.session.add(user)
        db.session.add(equip)
        db.session.add(component)
        db.session.commit()
        component1 = Component.query.filter_by(brand="Fox").first()
        assert component1.brand == "Fox"
Beispiel #12
0
def test_ride_query(app):
    """
    Tests the querying of a ride instance
    """
    # Query
    user = _get_user()
    equip = _get_equipment()
    ride = _get_ride()
    with app.app_context():
        db.session.add(user)
        db.session.add(equip)
        db.session.add(ride)
        db.session.commit()
        ride1 = Ride.query.filter_by(name="Ajo-1").first()
        assert ride1.name == "Ajo-1"
Beispiel #13
0
def test_equipment_del(app):
    """
    Tests the deletion of a equipment instance
    """
    # Delete
    user = _get_user()
    equip = _get_equipment()
    with app.app_context():
        db.session.add(user)
        db.session.add(equip)
        db.session.commit()
        equip = Equipment.query.get(1)
        db.session.delete(equip)
        db.session.commit()
        assert Equipment.query.count() == 0
Beispiel #14
0
def populate_db():

    bankAccount1 = utils._get_bankAccount(iban="FI01", bankName="The bank")
    bankAccount2 = utils._get_bankAccount(iban="FI02", bankName="The bank")
    user1 = utils._get_user(username="******", password="******")
    user2 = utils._get_user(username="******", password="******")
    user1.bankAccount.append(bankAccount1)
    user2.bankAccount.append(bankAccount2)
    category1 = utils._get_category(name="cat1")
    category2 = utils._get_category(name="cat2")
    transaction = utils._get_transaction(price=3.50,
                                         dateTime=datetime.now(),
                                         sender=user1,
                                         receiver=user2,
                                         category=[category1])

    db.session.add(bankAccount1)
    db.session.add(bankAccount2)
    db.session.add(user1)
    db.session.add(user2)
    db.session.add(category1)
    db.session.add(category2)
    db.session.add(transaction)
    db.session.commit()
Beispiel #15
0
def test_equipment_ondelete_user(app):
    """
    Tests that equipments's owner foreign key is set to null
    when the user is deleted.
    """

    equipment = _get_equipment()
    user = _get_user()
    equipment.ownedBy = user
    with app.app_context():
        db.session.add(equipment)
        db.session.commit()
        db.session.delete(user)
        db.session.commit()
        assert equipment.owner is None
Beispiel #16
0
def test_ride_del(app):
    """
    Tests the deletion of a ride instance
    """
    # Delete
    user = _get_user()
    equip = _get_equipment()
    ride = _get_ride()
    with app.app_context():
        db.session.add(user)
        db.session.add(equip)
        db.session.add(ride)
        db.session.commit()
        db.session.delete(ride)
        db.session.commit()
        assert Ride.query.count() == 0
Beispiel #17
0
def test_component_ondelete_equipment(app):
    """
    Tests that components are deleted when parent equipment is deleted.
    """

    user = _get_user()
    equipment = _get_equipment()
    component = _get_component()
    component.owner = user
    component.installedTo = equipment
    with app.app_context():
        db.session.add(user)
        db.session.add(component)
        db.session.commit()
        db.session.delete(equipment)
        db.session.commit()
        assert Component.query.count() == 0
Beispiel #18
0
def test_create_instances(app):
    """
    Tests that we can create one instance of each model and save them to the
    database using valid values for all columns. After creation, test that
    everything can be found from database, and that all relationships have been
    saved correctly.
    """

    # Create everything
    user = _get_user()
    equipment = _get_equipment()
    component = _get_component()
    ride = _get_ride()
    # Connect relationships (just one side)
    equipment.ownedBy = user
    component.installedTo = equipment
    ride.riddenWith = equipment
    ride.riddenBy = user
    # Put to database
    with app.app_context():
        db.session.add(user)
        db.session.add(equipment)
        db.session.add(component)
        db.session.add(ride)
        db.session.commit()

        # Check that everything exists
        assert User.query.count() == 1
        assert Equipment.query.count() == 1
        assert Component.query.count() == 1
        assert Ride.query.count() == 1
        db_user = User.query.first()
        db_equipment = Equipment.query.first()
        db_component = Component.query.first()
        db_ride = Ride.query.first()

        # Check all relationships (both sides)
        # One to one
        assert db_user == db_ride.riddenBy
        assert db_equipment == db_ride.riddenWith
        # Others
        assert db_equipment in db_user.hasEquip
        assert db_component in db_equipment.hasCompos
Beispiel #19
0
def test_ride_mod(app):
    """
    Tests the modification of ride instance data
    """
    # Modify
    user = _get_user()
    equip = _get_equipment()
    ride = _get_ride()
    with app.app_context():
        db.session.add(user)
        db.session.add(equip)
        db.session.add(ride)
        db.session.commit()
        ride.name = "Ajo-2"
        ride.duration = 1200
        ride.datetime = datetime(2020, 1, 1, 11, 20, 30)
        db.session.commit()
        ride = Ride.query.get(1)
        assert ride.name == "Ajo-2"
        assert ride.duration == 1200
        assert str(ride.datetime) == "2020-01-01 11:20:30"
Beispiel #20
0
def test_equipment_mod(app):
    """
    Tests the modification of equipment instance data
    """
    # Modify
    user = _get_user()
    equip = _get_equipment()
    with app.app_context():
        db.session.add(user)
        db.session.add(equip)
        db.session.commit()
        equip = Equipment.query.get(1)
        equip.name = "Bike-2"
        equip.brand = "Canyon"
        equip.model = "Spectral"
        equip.date_added = datetime(2019, 11, 21, 11, 20, 30)
        equip.date_retired = datetime(2020, 1, 1, 11, 20, 30)
        db.session.commit()
        equip = Equipment.query.get(1)
        assert equip.name == "Bike-2"
        assert equip.brand == "Canyon"
        assert equip.model == "Spectral"
        assert str(equip.date_added) == "2019-11-21 11:20:30"
        assert str(equip.date_retired) == "2020-01-01 11:20:30"
Beispiel #21
0
def test_equipment_columns(app):
    """
    Tests equipment columns' restrictions. Name must be unique.
    Name, category, brand, model and date_added must be mandatory.
    Date_added and date_retired must be type datetime and owner accepts
    only numerical values.
    Date_added must be less than date_retired.
    """

    # Uniqueness of uri
    user_1 = _get_user(username="******", id=1)
    user_2 = _get_user(username="******", id=2)
    equip_1 = _get_equipment(own=1)
    equip_2 = _get_equipment(own=2)
    with app.app_context():
        db.session.add(user_1)
        db.session.add(user_2)
        db.session.add(equip_1)
        db.session.add(equip_2)
        with pytest.raises(IntegrityError):
            db.session.commit()

        db.session.rollback()

    # Uniqueness of name + owner
    user_1 = _get_user(username="******", id=1)
    user_2 = _get_user(username="******", id=2)
    equip_1 = _get_equipment(id=1)
    equip_2 = _get_equipment(id=2)
    with app.app_context():
        db.session.add(user_1)
        db.session.add(user_2)
        db.session.add(equip_1)
        db.session.add(equip_2)
        with pytest.raises(IntegrityError):
            db.session.commit()

        db.session.rollback()

    # Not null name
    equipment = _get_equipment()
    equipment.name = None
    with app.app_context():
        db.session.add(equipment)
        with pytest.raises(IntegrityError):
            db.session.commit()

        db.session.rollback()

    # Not null category
    equipment = _get_equipment()
    equipment.category = None
    with app.app_context():
        db.session.add(equipment)
        with pytest.raises(IntegrityError):
            db.session.commit()

        db.session.rollback()

    # Not null brand
    equipment = _get_equipment()
    equipment.brand = None
    with app.app_context():
        db.session.add(equipment)
        with pytest.raises(IntegrityError):
            db.session.commit()

        db.session.rollback()

    # Not null model
    equipment = _get_equipment()
    equipment.model = None
    with app.app_context():
        db.session.add(equipment)
        with pytest.raises(IntegrityError):
            db.session.commit()

        db.session.rollback()

    # Not null date_added
    equipment = _get_equipment()
    equipment.date_added = None
    with app.app_context():
        db.session.add(equipment)
        with pytest.raises(IntegrityError):
            db.session.commit()

        db.session.rollback()

    # Type int owner
    equipment = _get_equipment()
    equipment.owner = str(equipment.owner) + "kg"
    with app.app_context():
        db.session.add(equipment)
        with pytest.raises(IntegrityError):
            db.session.commit()

        db.session.rollback()

    # Type datetime date_added
    equipment = _get_equipment()
    equipment.date_added = time.time()
    with app.app_context():
        db.session.add(equipment)
        with pytest.raises(StatementError):
            db.session.commit()

        db.session.rollback()

    # Type datetime date_retired
    equipment = _get_equipment()
    equipment.date_retired = time.time()
    with app.app_context():
        db.session.add(equipment)
        with pytest.raises(StatementError):
            db.session.commit()

        db.session.rollback()

    # date_retired greater than date_added
    equipment = _get_equipment()
    equipment.date_added = datetime.now()
    equipment.date_retired = datetime(2020, 1, 1, 0, 0, 0)
    with app.app_context():
        db.session.add(equipment)
        with pytest.raises(StatementError):
            db.session.commit()