Exemplo n.º 1
0
def test_definition(mocker):
    from indico.modules.events.agreements import util
    mocker.patch.object(util,
                        'get_agreement_definitions',
                        return_value={'foobar': 'test'})
    assert Agreement(type='foobar').definition == 'test'
    assert Agreement(type='barfoo').definition is None
Exemplo n.º 2
0
def test_reject(reason, on_behalf, expected_state):
    ip = '127.0.0.1'
    agreement = Agreement()
    agreement.reject(from_ip=ip, reason=reason, on_behalf=on_behalf)
    assert agreement.state == expected_state
    assert agreement.signed_from_ip == ip
    assert agreement.reason == reason
    assert agreement.signed_dt == now_utc()
    agreement.definition.handle_rejected.assert_called_with(agreement)
Exemplo n.º 3
0
def test_reject(reason, on_behalf, expected_state):
    ip = '127.0.0.1'
    agreement = Agreement()
    agreement.reject(from_ip=ip, reason=reason, on_behalf=on_behalf)
    assert agreement.state == expected_state
    assert agreement.signed_from_ip == ip
    assert agreement.reason == reason
    assert agreement.signed_dt == now_utc()
    agreement.definition.handle_rejected.assert_called_with(agreement)
Exemplo n.º 4
0
def test_reset():
    agreement = Agreement()
    agreement.reset()
    assert agreement.state == AgreementState.pending
    assert agreement.attachment is None
    assert agreement.attachment_filename is None
    assert agreement.data is None
    assert agreement.reason is None
    assert agreement.signed_dt is None
    assert agreement.signed_from_ip is None
Exemplo n.º 5
0
def test_reset():
    agreement = Agreement()
    agreement.reset()
    assert agreement.state == AgreementState.pending
    assert agreement.attachment is None
    assert agreement.attachment_filename is None
    assert agreement.data is None
    assert agreement.reason is None
    assert agreement.signed_dt is None
    assert agreement.signed_from_ip is None
Exemplo n.º 6
0
 def _process(self):
     agreement = self.agreement
     form = AgreementAnswerSubmissionForm()
     if form.validate_on_submit():
         if agreement is None:
             agreement = Agreement.create_from_data(
                 event=self.event_new,
                 type_=self.definition.name,
                 person=self.person)
             db.session.add(agreement)
             db.session.flush()
         if form.answer.data:
             agreement.accept(from_ip=request.remote_addr, on_behalf=True)
             agreement.attachment_filename = form.document.data.filename
             agreement.attachment = form.document.data.read()
         else:
             agreement.reject(from_ip=request.remote_addr, on_behalf=True)
         flash(
             _("Agreement answered on behalf of {0}".format(
                 agreement.person_name)), 'success')
         return jsonify(success=True)
     return WPJinjaMixin.render_template(
         'events/agreements/dialogs/agreement_submit_answer_form.html',
         form=form,
         event=self.event_new,
         agreement=agreement)
Exemplo n.º 7
0
 def _create_agreement(state):
     agreement = Agreement(uuid=str(uuid4()), event=dummy_event, type='dummy',
                           person_email=dummy_person.email, person_name=dummy_person.name, state=state,
                           identifier=dummy_person.identifier)
     db.session.add(agreement)
     db.session.flush()
     return agreement
Exemplo n.º 8
0
 def _process(self):
     event = self._conf
     people = self.definition.get_people(event)
     agreements = Agreement.find_all(Agreement.event_id == event.getId(),
                                     Agreement.type == self.definition.name,
                                     Agreement.identifier.in_(people))
     return WPAgreementManager.render_template('agreement_type_details.html', event,
                                               event=event, definition=self.definition, agreements=agreements)
Exemplo n.º 9
0
 def _process(self):
     event = self._conf
     people = self.definition.get_people(event)
     agreements = Agreement.find_all(Agreement.event_id == event.getId(),
                                     Agreement.type == self.definition.name,
                                     Agreement.identifier.in_(people))
     return WPAgreementManager.render_template('agreement_type_details.html', event,
                                               event=event, definition=self.definition, agreements=agreements)
Exemplo n.º 10
0
def redirect_old_agreement_url(confId):
    uuid = request.args['authKey']
    agreement = Agreement.find_first(event_id=confId, uuid=uuid)
    if agreement is None:
        raise NotFound
    return redirect(
        url_for('agreements.agreement_form',
                confId=confId,
                id=agreement.id,
                uuid=uuid))
Exemplo n.º 11
0
 def get_people_not_notified(cls, event):
     """Returns a dictionary of :class:`AgreementPersonInfo` yet to be notified"""
     people = cls.get_people(event)
     sent_agreements = {
         a.identifier
         for a in Agreement.find(event_id=event.getId(), type=cls.name)
     }
     return {
         k: v
         for k, v in people.items() if v.identifier not in sent_agreements
     }
Exemplo n.º 12
0
def test_create_from_data(dummy_event, dummy_person, dummy_user, person_with_user):
    type_ = 'dummy'
    dummy_person.user = dummy_user if person_with_user else None
    agreement = Agreement.create_from_data(event=dummy_event, type_=type_, person=dummy_person)
    assert agreement.event == dummy_event
    assert agreement.type == type_
    assert agreement.state == AgreementState.pending
    assert agreement.uuid
    assert agreement.identifier == dummy_person.identifier
    assert agreement.person_email == dummy_person.email
    assert agreement.person_name == dummy_person.name
    assert agreement.user == dummy_person.user
    assert agreement.data == dummy_person.data
Exemplo n.º 13
0
def test_create_from_data(dummy_event, dummy_person, dummy_user, person_with_user):
    type_ = 'dummy'
    dummy_person.user = dummy_user if person_with_user else None
    agreement = Agreement.create_from_data(event=dummy_event, type_=type_, person=dummy_person)
    assert agreement.event == dummy_event
    assert agreement.type == type_
    assert agreement.state == AgreementState.pending
    assert agreement.uuid
    assert agreement.identifier == dummy_person.identifier
    assert agreement.person_email == dummy_person.email
    assert agreement.person_name == dummy_person.name
    assert agreement.user == dummy_person.user
    assert agreement.data == dummy_person.data
Exemplo n.º 14
0
    def get_stats_for_signed_agreements(cls, event):
        """Returns a digest of signed agreements on an event

        :param event: the event
        :return: (everybody_signed, num_accepted, num_rejected)
        """
        people = cls.get_people(event)
        identifiers = [p.identifier for p in people.itervalues()]
        query = Agreement.find(Agreement.event_id == event.getId(),
                               Agreement.type == cls.name,
                               Agreement.identifier.in_(identifiers))
        num_accepted = query.filter(Agreement.accepted).count()
        num_rejected = query.filter(Agreement.rejected).count()
        everybody_signed = len(people) == (num_accepted + num_rejected)
        return everybody_signed, num_accepted, num_rejected
Exemplo n.º 15
0
Arquivo: base.py Projeto: NIIF/indico
    def get_stats_for_signed_agreements(cls, event):
        """Returns a digest of signed agreements on an event

        :param event: the event
        :return: (everybody_signed, num_accepted, num_rejected)
        """
        people = cls.get_people(event)
        identifiers = [p.identifier for p in people.itervalues()]
        query = Agreement.find(Agreement.event_id == event.getId(),
                               Agreement.type == cls.name,
                               Agreement.identifier.in_(identifiers))
        num_accepted = query.filter(Agreement.accepted).count()
        num_rejected = query.filter(Agreement.rejected).count()
        everybody_signed = len(people) == (num_accepted + num_rejected)
        return everybody_signed, num_accepted, num_rejected
Exemplo n.º 16
0
 def export_agreements(self, aw):
     sent_agreements = {a.identifier: a for a in Agreement.find(event_id=self._event.getId(),
                                                                type=self._definition.name)}
     for person in islice(sorted(self._definition.get_people(self._event).itervalues(),
                                 key=attrgetter('name', 'identifier')),
                          self._offset, self._offset + self._limit):
         agreement = sent_agreements.get(person.identifier)
         data = {
             'event_id': int(self._event.id),
             'identifier': person.identifier,
             'sent': agreement is not None,
             'accepted': None if (not agreement or agreement.pending) else agreement.accepted,
         }
         self._definition.extend_api_data(self._event, person, agreement, data)
         yield data
Exemplo n.º 17
0
 def _checkParams(self, params):
     RHAgreementManagerDetails._checkParams(self, params)
     if 'id' in request.view_args:
         self.agreement = Agreement.find_one(id=request.view_args['id'])
         if self._conf != self.agreement.event:
             raise NotFound
         if not self.agreement.pending:
             raise NoReportError(_("The agreement is already signed"))
     else:
         self.agreement = None
         identifier = request.args['identifier']
         try:
             self.person = self.definition.get_people(self._conf)[identifier]
         except KeyError:
             raise NotFound
Exemplo n.º 18
0
 def _checkParams(self, params):
     RHAgreementManagerDetails._checkParams(self, params)
     if 'id' in request.view_args:
         self.agreement = Agreement.find_one(id=request.view_args['id'])
         if self._conf != self.agreement.event:
             raise NotFound
         if not self.agreement.pending:
             raise NoReportError(_("The agreement is already signed"))
     else:
         self.agreement = None
         identifier = request.args['identifier']
         try:
             self.person = self.definition.get_people(self._conf)[identifier]
         except KeyError:
             raise NotFound
Exemplo n.º 19
0
 def export_agreements(self, aw):
     sent_agreements = {a.identifier: a for a in Agreement.find(event_id=self._event.getId(),
                                                                type=self._definition.name)}
     for person in islice(sorted(self._definition.get_people(self._event).itervalues(),
                                 key=attrgetter('name', 'identifier')),
                          self._offset, self._offset + self._limit):
         agreement = sent_agreements.get(person.identifier)
         data = {
             'event_id': int(self._event.id),
             'identifier': person.identifier,
             'sent': agreement is not None,
             'accepted': None if (not agreement or agreement.pending) else agreement.accepted,
         }
         self._definition.extend_api_data(self._event, person, agreement, data)
         yield data
Exemplo n.º 20
0
 def _process_args(self):
     RHAgreementManagerDetails._process_args(self)
     if 'id' in request.view_args:
         self.agreement = Agreement.get_one(request.view_args['id'])
         if self.event != self.agreement.event:
             raise NotFound
         if not self.agreement.pending:
             raise NoReportError(_("The agreement is already signed"))
     else:
         self.agreement = None
         identifier = request.args['identifier']
         try:
             self.person = self.definition.get_people(self.event)[identifier]
         except KeyError:
             raise NotFound
Exemplo n.º 21
0
 def _process_args(self):
     RHAgreementManagerDetails._process_args(self)
     if 'id' in request.view_args:
         self.agreement = Agreement.get_one(request.view_args['id'])
         if self.event != self.agreement.event:
             raise NotFound
         if not self.agreement.pending:
             raise NoReportError(_("The agreement is already signed"))
     else:
         self.agreement = None
         identifier = request.args['identifier']
         try:
             self.person = self.definition.get_people(self.event)[identifier]
         except KeyError:
             raise NotFound
Exemplo n.º 22
0
 def _process(self):
     event = self._conf
     agreement = self.agreement
     form = AgreementAnswerSubmissionForm()
     if form.validate_on_submit():
         if agreement is None:
             agreement = Agreement.create_from_data(event=self._conf, type_=self.definition.name, person=self.person)
             db.session.add(agreement)
             db.session.flush()
         if form.answer.data:
             agreement.accept(from_ip=request.remote_addr, on_behalf=True)
             agreement.attachment_filename = form.document.data.filename
             agreement.attachment = form.document.data.read()
         else:
             agreement.reject(from_ip=request.remote_addr, on_behalf=True)
         flash(_("Agreement answered on behalf of {0}".format(agreement.person_name)), 'success')
         return jsonify(success=True)
     return WPJinjaMixin.render_template('events/agreements/dialogs/agreement_submit_answer_form.html', form=form,
                                         event=event, agreement=agreement)
Exemplo n.º 23
0
def send_new_agreements(event, name, people, email_body, cc_addresses, from_address):
    """Creates and send agreements for a list of people on a given event.

    :param event: The `Event` associated with the agreement
    :param name: The agreement type matcing a :class:`AgreementDefinition` name
    :param people: The list of people for whom agreements will be created
    :param email_body: The body of the email
    :param cc_addresses: Email addresses to send CCs to
    :param from_address: Email address of the sender
    """
    agreements = []
    for person in people.itervalues():
        agreement = Agreement.create_from_data(event=event, type_=name, person=person)
        db.session.add(agreement)
        agreements.append(agreement)
    db.session.flush()
    for agreement in agreements:
        notify_agreement_new(agreement, email_body, cc_addresses, from_address)
    return agreements
Exemplo n.º 24
0
 def _checkParams(self, params):
     RHAgreementManagerDetails._checkParams(self, params)
     self.agreement = Agreement.get_one(request.view_args['id'])
Exemplo n.º 25
0
 def _process_args(self):
     RHAgreementManagerDetails._process_args(self)
     self.agreement = Agreement.get_one(request.view_args['id'])
Exemplo n.º 26
0
def _merge_users(target, source, **kwargs):
    Agreement.find(user_id=source.id).update({Agreement.user_id: target.id})
Exemplo n.º 27
0
def test_rejected(dummy_agreement, state, expected):
    dummy_agreement.state = state
    assert dummy_agreement.rejected == expected
    assert Agreement.find_one(rejected=expected) == dummy_agreement
Exemplo n.º 28
0
def test_is_orphan_no_definition(monkeypatch):
    monkeypatch.setattr(Agreement, 'definition', property(lambda s: None))
    agreement = Agreement()
    with pytest.raises(ServiceUnavailable):
        agreement.is_orphan()
Exemplo n.º 29
0
def test_signed_on_behalf(dummy_agreement, state, expected):
    dummy_agreement.state = state
    assert dummy_agreement.signed_on_behalf == expected
    assert Agreement.find_one(signed_on_behalf=expected) == dummy_agreement
Exemplo n.º 30
0
 def _get_agreements(self):
     return Agreement.find_all(Agreement.pending, Agreement.person_email != None,
                               Agreement.event_id == self._conf.getId(), Agreement.type == self.definition.name)
Exemplo n.º 31
0
def test_is_orphan_no_definition(monkeypatch):
    monkeypatch.setattr(Agreement, 'definition', property(lambda s: None))
    agreement = Agreement()
    with pytest.raises(ServiceUnavailable):
        agreement.is_orphan()
Exemplo n.º 32
0
def test_render():
    agreement = Agreement()
    agreement.render(None)
    agreement.definition.render_form.assert_called_with(agreement, None)
Exemplo n.º 33
0
def test_is_orphan(dummy_event_new):
    agreement = Agreement(event_new=dummy_event_new)
    agreement.is_orphan()
    agreement.definition.is_agreement_orphan(agreement.event_new, agreement)
Exemplo n.º 34
0
def test_belongs_to():
    agreement = Agreement(identifier='foo')
    assert agreement.belongs_to(MagicMock(identifier='foo'))
    assert not agreement.belongs_to(MagicMock(identifier='bar'))
Exemplo n.º 35
0
def test_is_orphan(dummy_event):
    agreement = Agreement(event=dummy_event)
    agreement.is_orphan()
    agreement.definition.is_agreement_orphan(agreement.event, agreement)
Exemplo n.º 36
0
def test_pending(dummy_agreement, state, expected):
    dummy_agreement.state = state
    filter_ = Agreement.pending if expected else ~Agreement.pending
    assert dummy_agreement.pending == expected
    assert Agreement.find_one(filter_) == dummy_agreement
    assert not Agreement.find_first(~filter_)
Exemplo n.º 37
0
def test_belongs_to():
    agreement = Agreement(identifier='foo')
    assert agreement.belongs_to(MagicMock(identifier='foo'))
    assert not agreement.belongs_to(MagicMock(identifier='bar'))
Exemplo n.º 38
0
 def _get_agreements(self):
     ids = set(request.form.getlist('references'))
     return Agreement.find_all(Agreement.id.in_(ids), Agreement.person_email != None)
Exemplo n.º 39
0
def test_is_orphan(dummy_event):
    agreement = Agreement(event_id=dummy_event.id)
    agreement.is_orphan()
    agreement.definition.is_agreement_orphan(agreement.event, agreement)
Exemplo n.º 40
0
 def _checkParams(self, params):
     RHAgreementManagerDetails._checkParams(self, params)
     self.agreement = Agreement.find_one(id=request.view_args['id'])
     if self._conf != self.agreement.event:
         raise NotFound
Exemplo n.º 41
0
def test_accepted(dummy_agreement, state, expected):
    dummy_agreement.state = state
    assert dummy_agreement.accepted == expected
    assert Agreement.find_one(accepted=expected) == dummy_agreement
Exemplo n.º 42
0
 def _checkParams(self, params):
     RHConferenceBaseDisplay._checkParams(self, params)
     self.agreement = Agreement.find_one(id=request.view_args['id'])
     if self.agreement.is_orphan():
         raise NotFound('The agreement is not active anymore')
Exemplo n.º 43
0
 def _process_args(self):
     RHDisplayEventBase._process_args(self)
     self.agreement = Agreement.get_one(request.view_args['id'])
     if self.agreement.is_orphan():
         raise NotFound('The agreement is not active anymore')
Exemplo n.º 44
0
 def _process_args(self):
     RHAgreementManagerDetails._process_args(self)
     self.agreement = Agreement.get_one(request.view_args['id'])
Exemplo n.º 45
0
 def _get_agreements(self):
     return Agreement.find_all(Agreement.pending, Agreement.person_email != None,
                               Agreement.event_id == self._conf.getId(), Agreement.type == self.definition.name)
Exemplo n.º 46
0
 def _process_args(self):
     RHDisplayEventBase._process_args(self)
     self.agreement = Agreement.get_one(request.view_args['id'])
     if self.agreement.is_orphan():
         raise NotFound('The agreement is not active anymore')
Exemplo n.º 47
0
def test_locator():
    id_ = 1337
    event_id = 9000
    agreement = Agreement(id=id_, event_id=event_id)
    assert agreement.locator == {'id': id_,
                                 'confId': event_id}
Exemplo n.º 48
0
 def _checkParams(self, params):
     RHAgreementManagerDetails._checkParams(self, params)
     self.agreement = Agreement.get_one(request.view_args['id'])
Exemplo n.º 49
0
 def _checkParams(self, params):
     RHConferenceBaseDisplay._checkParams(self, params)
     self.agreement = Agreement.find_one(id=request.view_args['id'])
     if self.agreement.is_orphan():
         raise NotFound('The agreement is not active anymore')
Exemplo n.º 50
0
def test_pending(dummy_agreement, state, expected):
    dummy_agreement.state = state
    filter_ = Agreement.pending if expected else ~Agreement.pending
    assert dummy_agreement.pending == expected
    assert Agreement.find_one(filter_) == dummy_agreement
    assert not Agreement.find_first(~filter_)
Exemplo n.º 51
0
def _merge_users(target, source, **kwargs):
    Agreement.find(user_id=source.id).update({Agreement.user_id: target.id})
Exemplo n.º 52
0
 def _get_agreements(self):
     ids = set(request.form.getlist('references'))
     return Agreement.find_all(Agreement.id.in_(ids), Agreement.person_email != None)
Exemplo n.º 53
0
def test_rejected(dummy_agreement, state, expected):
    dummy_agreement.state = state
    assert dummy_agreement.rejected == expected
    assert Agreement.find_one(rejected=expected) == dummy_agreement
Exemplo n.º 54
0
 def _checkParams(self, params):
     RHAgreementManagerDetails._checkParams(self, params)
     self.agreement = Agreement.find_one(id=request.view_args['id'])
     if self._conf != self.agreement.event:
         raise NotFound
Exemplo n.º 55
0
def test_signed_on_behalf(dummy_agreement, state, expected):
    dummy_agreement.state = state
    assert dummy_agreement.signed_on_behalf == expected
    assert Agreement.find_one(signed_on_behalf=expected) == dummy_agreement
Exemplo n.º 56
0
def test_event_setter(dummy_event):
    agreement = Agreement()
    agreement.event = dummy_event
    assert agreement.event_id == int(dummy_event.getId())
Exemplo n.º 57
0
def test_belongs_to():
    agreement = Agreement(identifier="foo")
    assert agreement.belongs_to(MagicMock(identifier="foo"))
    assert not agreement.belongs_to(MagicMock(identifier="bar"))
Exemplo n.º 58
0
def test_render_no_definition(monkeypatch):
    monkeypatch.setattr(Agreement, 'definition', property(lambda s: None))
    agreement = Agreement()
    with pytest.raises(IndicoError):
        agreement.render(None)
Exemplo n.º 59
0
def test_accepted(dummy_agreement, state, expected):
    dummy_agreement.state = state
    assert dummy_agreement.accepted == expected
    assert Agreement.find_one(accepted=expected) == dummy_agreement