예제 #1
0
    def test_is_election_admin(self):
        """ Test the is_election_admin function. """
        app = flask.Flask('fedora_elections')

        with app.test_request_context():
            flask.g.fas_user = None
            self.assertFalse(
                fedora_elections.is_election_admin(
                    flask.g.fas_user, 1)
            )
            flask.g.fas_user = FakeUser()
            self.assertFalse(
                fedora_elections.is_election_admin(
                    flask.g.fas_user, 1)
            )
            flask.g.fas_user = FakeUser(
                fedora_elections.APP.config['FEDORA_ELECTIONS_ADMIN_GROUP'])
            self.assertTrue(fedora_elections.is_election_admin(
                flask.g.fas_user, 1))

        self.setup_db()

        with app.test_request_context():
            flask.g.fas_user = FakeUser('testers')
            # This is user is not an admin for election #1
            self.assertFalse(
                fedora_elections.is_election_admin(
                    flask.g.fas_user, 1)
            )

            # This is user is an admin for election #2
            self.assertTrue(
                fedora_elections.is_election_admin(
                    flask.g.fas_user, 2)
            )
예제 #2
0
    def test_is_election_admin(self):
        """ Test the is_election_admin function. """
        app = flask.Flask('fedora_elections')

        with app.test_request_context():
            flask.g.fas_user = None
            self.assertFalse(
                fedora_elections.is_election_admin(flask.g.fas_user, 1))
            flask.g.fas_user = FakeUser()
            self.assertFalse(
                fedora_elections.is_election_admin(flask.g.fas_user, 1))
            flask.g.fas_user = FakeUser(
                fedora_elections.APP.config['FEDORA_ELECTIONS_ADMIN_GROUP'])
            self.assertTrue(
                fedora_elections.is_election_admin(flask.g.fas_user, 1))

        self.setup_db()

        with app.test_request_context():
            flask.g.fas_user = FakeUser('testers')
            # This is user is not an admin for election #1
            self.assertFalse(
                fedora_elections.is_election_admin(flask.g.fas_user, 1))

            # This is user is an admin for election #2
            self.assertTrue(
                fedora_elections.is_election_admin(flask.g.fas_user, 2))
예제 #3
0
def election_results(election_alias):
    election = get_valid_election(election_alias, ended=True)

    if not isinstance(election, models.Election):  # pragma: no cover
        return election

    elif election.embargoed:
        if is_authenticated() and (
                is_admin(flask.g.fas_user)
                or is_election_admin(flask.g.fas_user, election.id)):
            flask.flash("You are only seeing this page because you are "
                        "an admin.", "warning")
            flask.flash("The results for this election are currently "
                        "embargoed pending formal announcement.",
                        "warning")
        else:
            flask.flash("We are sorry.  The results for this election "
                        "cannot be viewed because they are currently "
                        "embargoed pending formal announcement.")
            return safe_redirect_back()

    if is_authenticated() and (
            is_admin(flask.g.fas_user)
            or is_election_admin(flask.g.fas_user, election.id)):
        flask.flash(
            "Check out the <a href='%s'>Text version</a> "
            "to send the annoucement" % flask.url_for(
                'election_results_text', election_alias=election.alias)
            )

    usernamemap = build_name_map(election)

    stats = models.Vote.get_election_stats(SESSION, election.id)

    cnt = 1
    evolution_label = []
    evolution_data = []
    for delta in range((election.end_date - election.start_date).days + 1):
        day = (
            election.start_date + timedelta(days=delta)
        ).strftime('%d-%m-%Y')
        evolution_label.append([cnt, day])
        evolution_data.append([cnt, stats['vote_timestamps'].count(day)])
        cnt += 1

    return flask.render_template(
        'results.html',
        election=election,
        usernamemap=usernamemap,
        stats=stats,
        evolution_label=evolution_label,
        evolution_data=evolution_data,
    )
예제 #4
0
    def test_is_election_admin(self):
        """ Test the is_election_admin function. """
        app = flask.Flask('fedora_elections')

        with app.test_request_context():
            flask.g.fas_user = None
            self.assertFalse(
                fedora_elections.is_election_admin(flask.g.fas_user, 1))

            flask.g.oidc_id_token = 'foobar'

            flask.g.fas_user = FakeUser()
            self.assertFalse(
                fedora_elections.is_election_admin(flask.g.fas_user, 1))
            with patch('fedora_elections.OIDC.user_getfield',
                       MagicMock(return_value=['elections'])):
                flask.g.fas_user = FakeUser(
                    fedora_elections.APP.config['FEDORA_ELECTIONS_ADMIN_GROUP']
                )
                self.assertTrue(
                    fedora_elections.is_election_admin(flask.g.fas_user, 1))

        self.setup_db()

        with app.test_request_context():
            flask.g.fas_user = FakeUser('testers')
            flask.g.oidc_id_token = 'foobar'

            # This is user is not an admin for election #1
            with patch('fedora_elections.OIDC.user_getfield',
                       MagicMock(return_value=['foobar'])):
                self.assertFalse(
                    fedora_elections.is_election_admin(flask.g.fas_user, 1))

                # This is user is an admin for election #2
                self.assertTrue(
                    fedora_elections.is_election_admin(flask.g.fas_user, 2))
예제 #5
0
def election_results_text(election_alias):
    election = get_valid_election(election_alias, ended=True)

    if not isinstance(election, models.Election):  # pragma: no cover
        return election

    if not (is_authenticated() and (is_admin(flask.g.fas_user)
            or is_election_admin(flask.g.fas_user, election.id))):
        flask.flash(
            "The text results are only available to the admins", "error")
        return safe_redirect_back()

    usernamemap = build_name_map(election)

    stats = models.Vote.get_election_stats(SESSION, election.id)

    return flask.render_template(
        'results_text.html',
        election=election,
        usernamemap=usernamemap,
        stats=stats,
    )
예제 #6
0
def election_results_text(election_alias):
    election = get_valid_election(election_alias, ended=True)

    if not isinstance(election, models.Election):  # pragma: no cover
        return election

    if not (is_authenticated() and
            (is_admin(flask.g.fas_user)
             or is_election_admin(flask.g.fas_user, election.id))):
        flask.flash("The text results are only available to the admins",
                    "error")
        return safe_redirect_back()

    usernamemap = build_name_map(election)

    stats = models.Vote.get_election_stats(SESSION, election.id)

    return flask.render_template(
        'results_text.html',
        election=election,
        usernamemap=usernamemap,
        stats=stats,
    )