def test_create_session(self, engine):
    user = User("u", "p", Permissions.READ)
    secure_engine = SecureEngine(engine, user)

    db_session = secure_engine.get_db_session()

    assert type(db_session) is SecureDBSession
  def test_commit_twice(self, engine):
    user = User("u", "p", Permissions.WRITE)
    secure_engine = SecureEngine(engine, user)
    dbs = secure_engine.get_db_session()

    catalogue_num = "cat_id"
    site = Site(123, "berkeley")
    mo = MuseumObject(catalogue_num, 234, site.id)

    dbs.add_all([mo, site])

    dbs.commit()

    mo2 = dbs.query(MuseumObject).filter_by(catalogue_num=catalogue_num).first()

    assert mo.catalogue_num == mo2.catalogue_num
    assert mo.site_id == mo2.site_id
    assert mo.object_num == mo2.object_num

    cat_num3 = "something here"
    site2 = Site(453, "portland")
    mo3 = MuseumObject(cat_num3, 345, site.id)

    dbs.add_all([mo3, site2])

    dbs.commit()
    mo4 = dbs.query(MuseumObject).filter_by(catalogue_num=cat_num3).first()
    print mo4

    assert mo3.catalogue_num == mo4.catalogue_num
    assert mo3.site_id == mo4.site_id
    assert mo3.object_num == mo4.object_num
  def test_write_read_only(self, engine):
    user = User("u", "p", Permissions.READ)
    secure_engine = SecureEngine(engine, user)
    dbs = secure_engine.get_db_session()

    catalogue_num = "cat_id"
    site = Site(123, "berkeley")
    mo = MuseumObject(catalogue_num, 234, site.id)

    with pytest.raises(InsufficientPermissions):
      dbs.add_all([mo, site])

    with pytest.raises(InsufficientPermissions):
      dbs.commit()
  def test_write(self, engine):
    user = User("u", "p", Permissions.WRITE)
    secure_engine = SecureEngine(engine, user)
    dbs = secure_engine.get_db_session()

    catalogue_num = "cat_id"
    site = Site(123, "berkeley")
    mo = MuseumObject(catalogue_num, 234, site.id)

    dbs.add_all([mo, site])

    dbs.commit()

    mo2 = dbs.query(MuseumObject).filter_by(catalogue_num=catalogue_num).first()

    assert mo.catalogue_num == mo2.catalogue_num
    assert mo.site_id == mo2.site_id
    assert mo.object_num == mo2.object_num
  def test_read_only(self, engine):
    SessionClass = sessionmaker(bind=engine, expire_on_commit=False)
    s = SessionClass()

    catalogue_num = "cat_id"

    site = Site(123, "berkeley")
    mo = MuseumObject(catalogue_num, 234, site.id)

    s.add_all([mo, site])

    s.commit()

    user = User("u", "p", Permissions.READ)
    secure_engine = SecureEngine(engine, user)
    dbs = secure_engine.get_db_session()

    mo2 = dbs.query(MuseumObject).filter_by(catalogue_num=catalogue_num).first()

    assert mo.catalogue_num == mo2.catalogue_num
    assert mo.site_id == mo2.site_id
    assert mo.object_num == mo2.object_num
  def test_create_session_no_permissions(self, engine):
    user = User("u", "p", Permissions.NONE)
    secure_engine = SecureEngine(engine, user)

    with pytest.raises(InsufficientPermissions):
      db_session = secure_engine.get_db_session()