Example #1
0
def test_resource_form_definition(libres_context):
    collection = ResourceCollection(libres_context)

    resource = collection.add(title='Executive Lounge',
                              timezone='Europe/Zurich',
                              definition='Mail *= @@@')
    assert resource.form_class().mail is not None

    resource.definition = None
    assert resource.form_class is None
Example #2
0
    def handle_root(self, request):
        collection = ResourceCollection(request.app.libres_context)

        resource = collection.add('Test', 'Europe/Zurich')
        scheduler = resource.get_scheduler(request.app.libres_context)
        scheduler.allocate(
            (datetime(2015, 7, 30, 11), datetime(2015, 7, 30, 12))
        )

        # this will fail and then abort everything
        request.app.session().add(Document(id=1))
        request.app.session().add(Document(id=1))
Example #3
0
def test_resource_collection(libres_context):

    collection = ResourceCollection(libres_context)
    assert collection.query().count() == 0

    resource = collection.add('Executive Lounge', 'Europe/Zurich')
    assert resource.name == 'executive-lounge'
    assert resource.timezone == 'Europe/Zurich'
    assert resource.get_scheduler(libres_context).resource == resource.id

    assert collection.query().count() == 1
    assert collection.by_id(resource.id)
    assert collection.by_name('executive-lounge')

    collection.delete(collection.by_id(resource.id))

    assert collection.query().count() == 0
Example #4
0
def test_resource_highlight_allocations(libres_context):
    collection = ResourceCollection(libres_context)
    resource = collection.add('Executive Lounge', 'Europe/Zurich')

    assert resource.date is None
    assert resource.highlights_min is None
    assert resource.highlights_max is None

    scheduler = resource.get_scheduler(libres_context)
    dates = (datetime(2015, 8, 5, 12), datetime(2015, 8, 5, 18))
    allocations = scheduler.allocate(dates)

    resource.highlight_allocations(allocations)

    assert resource.date == date(2015, 8, 5)
    assert resource.highlights_min == allocations[0].id
    assert resource.highlights_min == allocations[-1].id
Example #5
0
def test_transaction_integration(postgres_dsn):
    Base = declarative_base()

    class App(Framework, LibresIntegration):
        pass

    class Document(Base):
        __tablename__ = 'documents'
        id = Column(Integer, primary_key=True)

    @App.path(path='/')
    class Root(object):
        pass

    @App.json(model=Root)
    def handle_root(self, request):
        collection = ResourceCollection(request.app.libres_context)

        resource = collection.add('Test', 'Europe/Zurich')
        scheduler = resource.get_scheduler(request.app.libres_context)
        scheduler.allocate(
            (datetime(2015, 7, 30, 11), datetime(2015, 7, 30, 12))
        )

        # this will fail and then abort everything
        request.app.session().add(Document(id=1))
        request.app.session().add(Document(id=1))

    # this is required for the transactions to actually work, usually this
    # would be onegov.server's job
    scan_morepath_modules(App)
    morepath.commit(App)

    app = App()
    app.configure_application(dsn=postgres_dsn, base=Base)
    app.namespace = 'libres'
    app.set_application_id('libres/foo')

    c = Client(app)
    try:
        c.get('/', expect_errors=True)
    except:
        pass

    collection = ResourceCollection(app.libres_context)
    assert collection.query().count() == 0
Example #6
0
def test_resource_save_delete(libres_context):
    collection = ResourceCollection(libres_context)

    resource = collection.add('Executive Lounge', 'Europe/Zurich')
    assert resource.name == 'executive-lounge'
    assert resource.timezone == 'Europe/Zurich'
    scheduler = resource.get_scheduler(libres_context)

    dates = (datetime(2015, 8, 5, 12), datetime(2015, 8, 5, 18))

    scheduler.allocate(dates)
    scheduler.reserve('*****@*****.**', dates)

    with pytest.raises(AssertionError):
        collection.delete(resource)

    collection.delete(resource, including_reservations=True)

    assert collection.query().count() == 0
    assert scheduler.managed_reservations().count() == 0
    assert scheduler.managed_reserved_slots().count() == 0
    assert scheduler.managed_allocations().count() == 0