Exemple #1
0
def session(app: Application, db: SQLAlchemy) -> Iterator[Session]:
    security.start()
    create_root_user()

    yield db.session

    security.stop()
    security.clear()
Exemple #2
0
def session(app, db):
    security.start()
    create_root_user()

    yield db.session

    security.stop()
    security.clear()
Exemple #3
0
def test_audit_collections(app, session):
    create_root_user()
    audit_service.start()

    I1 = IntegerCollection(id=1)
    I2 = IntegerCollection(id=2)
    session.add(I1)
    session.add(I2)
    session.flush()

    account = DummyAccount(name="John")
    account.integers.append(I1)
    session.add(account)
    session.flush()

    entry = AuditEntry.query.one()
    changes = entry.changes
    assert changes.collections == {"integers": (["1"], [])}
Exemple #4
0
def test_audit_collections(app, session):
    create_root_user()
    audit_service.start()

    I1 = IntegerCollection(id=1)
    I2 = IntegerCollection(id=2)
    session.add(I1)
    session.add(I2)
    session.flush()

    account = DummyAccount(name="John")
    account.integers.append(I1)
    session.add(account)
    session.flush()

    entry = AuditEntry.query.one()
    changes = entry.changes
    assert changes.collections == {"integers": (["1"], [])}
def test_form_photo(app, db):
    user = create_root_user()
    url = url_for("preferences.user")
    uploads = app.extensions["uploads"]
    with AVATAR_COLORMAP.open("rb") as f:
        handle = uploads.add_file(user, f, filename="avatar.png", mimetype="image/png")

    kwargs = {"method": "POST", "data": {"photo": handle}}

    with app.test_request_context(url, **kwargs):
        login_user(user)
        form = UserPreferencesForm(request.form)
        form.validate()
        assert form.photo.data is not None

        img_data = form.photo.data
        img_type = imghdr.what("ignored", img_data)
        # ???: should be 'png' but is 'jpeg' on Python 2
        assert img_type in ("png", "jpeg")
Exemple #6
0
def test_contacts_are_indexed(app, db_session):
    index_service.start()

    with app.test_request_context():
        root_user = create_root_user()
        login_user(root_user)

        contact = DummyContact1(first_name="John",
                                last_name="Test User",
                                email="*****@*****.**")
        db_session.add(contact)
        # commit is needed here to trigger change in index
        db_session.commit()

        search_result = index_service.search("john")
        assert len(search_result) == 1

        found = search_result[0]
        assert contact.id == found["id"]
        assert contact.name == found["name"]

        search_result = index_service.search("john")
        assert len(search_result) == 1
        assert contact.id == int(search_result[0]["id"])
Exemple #7
0
def test_contacts_are_indexed(app, db_session):
    index_service.start()

    with app.test_request_context():
        root_user = create_root_user()
        login_user(root_user)

        contact = DummyContact1(
            first_name="John", last_name="Test User", email="*****@*****.**"
        )
        db_session.add(contact)
        # commit is needed here to trigger change in index
        db_session.commit()

        search_result = index_service.search("john")
        assert len(search_result) == 1

        found = search_result[0]
        assert contact.id == found["id"]
        assert contact.name == found["name"]

        search_result = index_service.search("john")
        assert len(search_result) == 1
        assert contact.id == int(search_result[0]["id"])
Exemple #8
0
def test_audit(app, session):
    create_root_user()
    audit_service.start()
    assert len(AuditEntry.query.all()) == 0

    # Creation of system user(0) should have created one entry.
    # We clear it for this test.
    AuditEntry.query.delete()
    session.flush()
    assert len(AuditEntry.query.all()) == 0

    account = DummyAccount(name="John SARL")
    session.add(account)
    session.commit()
    assert len(AuditEntry.query.all()) == 1

    entry = AuditEntry.query.one()
    assert entry.type == CREATION
    assert entry.entity_id == account.id
    assert entry.entity == account

    account.website = "http://www.john.com/"
    session.commit()
    assert len(AuditEntry.query.all()) == 2

    entry = AuditEntry.query.order_by(AuditEntry.happened_at).all()[1]
    assert entry.type == UPDATE
    assert entry.entity_id == account.id
    assert entry.entity == account
    assert entry.changes.columns == {"website": ("", "http://www.john.com/")}

    account.birthday = datetime.date(2012, 12, 25)
    session.commit()
    assert len(AuditEntry.query.all()) == 3

    entry = AuditEntry.query.order_by(AuditEntry.happened_at).all()[2]
    assert entry.type == UPDATE
    assert entry.entity_id == account.id
    assert entry.entity == account
    assert entry.changes.columns == {"birthday": (None, datetime.date(2012, 12, 25))}

    # content hiding
    account.password = "******"
    assert account.__changes__.columns == {"password": ("******", "******")}
    session.commit()

    entry = AuditEntry.query.order_by(AuditEntry.happened_at).all()[3]
    assert entry.type == UPDATE
    assert entry.entity_id == account.id
    assert entry.entity == account
    assert entry.changes.columns == {"password": ("******", "******")}

    # deletion
    session.delete(account)
    session.commit()
    assert len(AuditEntry.query.all()) == 5

    entry = AuditEntry.query.order_by(AuditEntry.happened_at).all()[4]
    assert entry.type == DELETION
    assert entry.entity_id == account.id
    assert entry.entity is None

    # check all entries are still present (but have lost reference to
    # entity)
    entries = AuditEntry.query.all()
    assert len(entries) == 5
    assert all(e.entity_id == account.id for e in entries)
    assert all(e.entity is None for e in entries)
Exemple #9
0
def test_audit_related(app, session):
    create_root_user()
    audit_service.start()

    #  helper
    audit_idx = count()
    audit_query = AuditEntry.query.order_by(AuditEntry.happened_at)

    def next_entry():
        return audit_query.all()[next(audit_idx)]

    account = DummyAccount(name="John SARL")
    session.add(account)
    session.commit()
    assert len(AuditEntry.query.all()) == 1
    next(audit_idx)

    data = AccountRelated(account=account, text="text 1")
    session.add(data)
    session.commit()

    entry = next_entry()
    assert entry.op == CREATION
    assert entry.related
    assert entry.entity_type == account.entity_type
    assert entry.entity_id == account.id
    assert entry.entity == account

    changes = entry.changes.columns
    assert len(changes) == 1
    assert "data 1" in changes
    changes = changes["data 1"]
    assert changes.columns == {
        "text": (NEVER_SET, "text 1"),
        "account_id": (NEVER_SET, 1),
        "id": (NEVER_SET, 1),
    }

    comment = CommentRelated(related=data, text="comment")
    session.add(comment)
    session.commit()
    entry = next_entry()
    assert entry.op == CREATION
    assert entry.related
    assert entry.entity_type == account.entity_type
    assert entry.entity_id == account.id

    changes = entry.changes.columns
    assert len(changes) == 1
    assert "data.comments 1 1" in changes
    changes = changes["data.comments 1 1"]
    assert changes.columns == {
        "text": (NEVER_SET, "comment"),
        "related_id": (NEVER_SET, 1),
        "id": (NEVER_SET, 1),
    }

    comment = CommentRelated(related=data, text="comment 2")
    session.add(comment)
    session.commit()
    entry = next_entry()
    assert entry.op == CREATION
    assert entry.related
    assert entry.entity_type == account.entity_type
    assert entry.entity_id == account.id

    changes = entry.changes.columns
    assert len(changes) == 1
    assert "data.comments 1 2" in changes

    changes = changes["data.comments 1 2"]
    assert changes.columns == {
        "text": (NEVER_SET, "comment 2"),
        "related_id": (NEVER_SET, 1),
        "id": (NEVER_SET, 2),
    }

    # deletion
    session.delete(comment)
    session.commit()

    entry = next_entry()
    assert entry.op == DELETION
    assert entry.related
    assert entry.entity_id == account.id
    # entity not deleted: audit should still have reference to it
    assert entry.entity == account
Exemple #10
0
def test_audit(app, session):
    create_root_user()
    audit_service.start()
    assert len(AuditEntry.query.all()) == 0

    # Creation of system user(0) should have created one entry.
    # We clear it for this test.
    AuditEntry.query.delete()
    session.flush()
    assert len(AuditEntry.query.all()) == 0

    account = DummyAccount(name="John SARL")
    session.add(account)
    session.commit()
    assert len(AuditEntry.query.all()) == 1

    entry = AuditEntry.query.one()
    assert entry.type == CREATION
    assert entry.entity_id == account.id
    assert entry.entity == account

    account.website = "http://www.john.com/"
    session.commit()
    assert len(AuditEntry.query.all()) == 2

    entry = AuditEntry.query.order_by(AuditEntry.happened_at).all()[1]
    assert entry.type == UPDATE
    assert entry.entity_id == account.id
    assert entry.entity == account
    assert entry.changes.columns == {"website": ("", "http://www.john.com/")}

    account.birthday = datetime.date(2012, 12, 25)
    session.commit()
    assert len(AuditEntry.query.all()) == 3

    entry = AuditEntry.query.order_by(AuditEntry.happened_at).all()[2]
    assert entry.type == UPDATE
    assert entry.entity_id == account.id
    assert entry.entity == account
    assert entry.changes.columns == {"birthday": (None, datetime.date(2012, 12, 25))}

    # content hiding
    account.password = "******"
    assert account.__changes__.columns == {"password": ("******", "******")}
    session.commit()

    entry = AuditEntry.query.order_by(AuditEntry.happened_at).all()[3]
    assert entry.type == UPDATE
    assert entry.entity_id == account.id
    assert entry.entity == account
    assert entry.changes.columns == {"password": ("******", "******")}

    # deletion
    session.delete(account)
    session.commit()
    assert len(AuditEntry.query.all()) == 5

    entry = AuditEntry.query.order_by(AuditEntry.happened_at).all()[4]
    assert entry.type == DELETION
    assert entry.entity_id == account.id
    assert entry.entity is None

    # check all entries are still present (but have lost reference to
    # entity)
    entries = AuditEntry.query.all()
    assert len(entries) == 5
    assert all(e.entity_id == account.id for e in entries)
    assert all(e.entity is None for e in entries)
Exemple #11
0
def test_audit_related(app, session):
    create_root_user()
    audit_service.start()

    #  helper
    audit_idx = count()
    audit_query = AuditEntry.query.order_by(AuditEntry.happened_at)

    def next_entry():
        return audit_query.all()[next(audit_idx)]

    account = DummyAccount(name="John SARL")
    session.add(account)
    session.commit()
    assert len(AuditEntry.query.all()) == 1
    next(audit_idx)

    data = AccountRelated(account=account, text="text 1")
    session.add(data)
    session.commit()

    entry = next_entry()
    assert entry.op == CREATION
    assert entry.related
    assert entry.entity_type == account.entity_type
    assert entry.entity_id == account.id
    assert entry.entity == account

    changes = entry.changes.columns
    assert len(changes) == 1
    assert "data 1" in changes
    changes = changes["data 1"]
    assert changes.columns == {
        "text": (NEVER_SET, "text 1"),
        "account_id": (NEVER_SET, 1),
        "id": (NEVER_SET, 1),
    }

    comment = CommentRelated(related=data, text="comment")
    session.add(comment)
    session.commit()
    entry = next_entry()
    assert entry.op == CREATION
    assert entry.related
    assert entry.entity_type == account.entity_type
    assert entry.entity_id == account.id

    changes = entry.changes.columns
    assert len(changes) == 1
    assert "data.comments 1 1" in changes
    changes = changes["data.comments 1 1"]
    assert changes.columns == {
        "text": (NEVER_SET, "comment"),
        "related_id": (NEVER_SET, 1),
        "id": (NEVER_SET, 1),
    }

    comment = CommentRelated(related=data, text="comment 2")
    session.add(comment)
    session.commit()
    entry = next_entry()
    assert entry.op == CREATION
    assert entry.related
    assert entry.entity_type == account.entity_type
    assert entry.entity_id == account.id

    changes = entry.changes.columns
    assert len(changes) == 1
    assert "data.comments 1 2" in changes

    changes = changes["data.comments 1 2"]
    assert changes.columns == {
        "text": (NEVER_SET, "comment 2"),
        "related_id": (NEVER_SET, 1),
        "id": (NEVER_SET, 2),
    }

    # deletion
    session.delete(comment)
    session.commit()

    entry = next_entry()
    assert entry.op == DELETION
    assert entry.related
    assert entry.entity_id == account.id
    # entity not deleted: audit should still have reference to it
    assert entry.entity == account