Exemple #1
0
    def test_overall_rating(self):
        role_class = self.view.get_reviewer_roles()

        c = ReviewerCollection()

        self.assertIsNone(self.view.calculate_overall_rating(c))

        def make_review(id, role, rating, expertise):
            return null_tuple(Reviewer)._replace(
                id=101, role=role, review_rating=rating,
                review_state=ReviewState.DONE,
                review_extra=null_tuple(JCMTReview)._replace(
                    expertise=expertise))

        # Add reviews without ratings included in the calculation.
        c[101] = make_review(101, role_class.TECH, None, None)
        c[102] = make_review(102, role_class.EXTERNAL, 100, None)

        self.assertIsNone(self.view.calculate_overall_rating(c))

        (r, s) = self.view.calculate_overall_rating(c, with_std_dev=True)
        self.assertIsNone(r)
        self.assertIsNone(s)

        # Add some equally-weighted reviews.
        c[201] = make_review(
            201, role_class.CTTEE_OTHER, 20, JCMTReviewerExpertise.NON_EXPERT)
        c[202] = make_review(
            202, role_class.CTTEE_OTHER, 40, JCMTReviewerExpertise.NON_EXPERT)

        self.assertAlmostEqual(self.view.calculate_overall_rating(c), 30)

        (r, s) = self.view.calculate_overall_rating(c, with_std_dev=True)
        self.assertAlmostEqual(r, 30)
        self.assertIsNotNone(s)

        # Add a higher-weighted review.
        c[301] = make_review(
            301, role_class.CTTEE_PRIMARY, 70, JCMTReviewerExpertise.EXPERT)

        self.assertAlmostEqual(self.view.calculate_overall_rating(c), 50)

        (r, s) = self.view.calculate_overall_rating(c, with_std_dev=True)
        self.assertAlmostEqual(r, 50)
        self.assertIsNotNone(s)
Exemple #2
0
    def test_overall_rating(self):
        role_class = self.view.get_reviewer_roles()

        c = ReviewerCollection()

        self.assertIsNone(self.view.calculate_overall_rating(c))

        def make_review(id, role, rating, weight):
            return null_tuple(Reviewer)._replace(id=101,
                                                 role=role,
                                                 review_rating=rating,
                                                 review_weight=weight,
                                                 review_state=ReviewState.DONE)

        # Add reviews without ratings.
        c[101] = make_review(101, role_class.TECH, None, None)
        c[102] = make_review(102, role_class.TECH, None, None)

        self.assertIsNone(self.view.calculate_overall_rating(c))

        (r, s) = self.view.calculate_overall_rating(c, with_std_dev=True)
        self.assertIsNone(r)
        self.assertIsNone(s)

        # Add some equally-weighted reviews.
        c[201] = make_review(201, role_class.CTTEE_OTHER, 40, 50)
        c[202] = make_review(202, role_class.CTTEE_OTHER, 60, 50)

        self.assertAlmostEqual(self.view.calculate_overall_rating(c), 50)

        (r, s) = self.view.calculate_overall_rating(c, with_std_dev=True)
        self.assertAlmostEqual(r, 50)
        self.assertIsNotNone(s)

        # Add a higher-weighted review.
        c[301] = make_review(301, role_class.CTTEE_PRIMARY, 90, 100)

        self.assertAlmostEqual(self.view.calculate_overall_rating(c), 70)

        (r, s) = self.view.calculate_overall_rating(c, with_std_dev=True)
        self.assertAlmostEqual(r, 70)
        self.assertIsNotNone(s)
    def test_reviewer_collection_rating(self):
        c = ReviewerCollection()

        rr = BaseReviewerRole

        def rwf_inc_unweighted(reviewer):
            if reviewer.review_weight is None:
                if rr.get_info(reviewer.role).weight:
                    return (None, None)
                return (reviewer.review_rating, 1.0)
            return (reviewer.review_rating, reviewer.review_weight / 100.0)

        def rwf_exc_unweighted(reviewer):
            if reviewer.review_weight is None:
                return (None, None)
            return (reviewer.review_rating, reviewer.review_weight / 100.0)

        rating = c.get_overall_rating(rwf_inc_unweighted, with_std_dev=False)
        self.assertIsNone(rating)
        rating = c.get_overall_rating(rwf_inc_unweighted, with_std_dev=True)
        self.assertIsInstance(rating, tuple)
        self.assertEqual(len(rating), 2)
        self.assertIsNone(rating[0])
        self.assertIsNone(rating[1])

        # Add some simple review ratings.
        rs = [
            dict(role=rr.TECH),
            dict(role=rr.EXTERNAL),
            dict(role=rr.EXTERNAL, review_rating=20),
            dict(role=rr.CTTEE_PRIMARY),
            dict(role=rr.CTTEE_PRIMARY, review_rating=10),
            dict(role=rr.CTTEE_PRIMARY, review_rating=80, review_weight=100),
        ]

        for (r, n) in zip(rs, itertools.count(100)):
            c[n] = null_tuple(Reviewer)._replace(review_state=ReviewState.DONE,
                                                 **r)

        self.assertEqual(
            c.get_overall_rating(rwf_inc_unweighted, with_std_dev=False), 50)
        self.assertEqual(
            c.get_overall_rating(rwf_exc_unweighted, with_std_dev=False), 80)

        # Repeat test above, including calculation of standard deviation.
        rating = c.get_overall_rating(rwf_exc_unweighted, with_std_dev=True)
        self.assertIsInstance(rating, tuple)
        self.assertEqual(len(rating), 2)
        self.assertEqual(rating[0], 80.0)
        self.assertEqual(rating[1], 0.0)

        (rating, std_dev) = c.get_overall_rating(rwf_inc_unweighted,
                                                 with_std_dev=True)
        self.assertEqual(rating, 50.0)
        self.assertEqual(std_dev, 30.0)

        # Add some more reviews with non-100% weights.
        rs = [
            dict(role=rr.CTTEE_SECONDARY, review_rating=20, review_weight=50),
            dict(role=rr.CTTEE_SECONDARY, review_rating=40, review_weight=50),
        ]

        for (r, n) in zip(rs, itertools.count(200)):
            c[n] = null_tuple(Reviewer)._replace(review_state=ReviewState.DONE,
                                                 **r)

        self.assertEqual(
            c.get_overall_rating(rwf_exc_unweighted, with_std_dev=False), 55)

        (rating, std_dev) = c.get_overall_rating(rwf_exc_unweighted,
                                                 with_std_dev=True)
        self.assertEqual(rating, 55.0)
        self.assertAlmostEqual(std_dev, 25.981, places=3)
    def test_reviewer_collection(self):
        c = ReviewerCollection()

        c[201] = null_tuple(Reviewer)._replace(id=201,
                                               person_id=2001,
                                               role=BaseReviewerRole.TECH)
        c[202] = null_tuple(Reviewer)._replace(id=202,
                                               person_id=2002,
                                               role=BaseReviewerRole.EXTERNAL)

        self.assertFalse(c.has_person(9999))

        self.assertTrue(c.has_person(2001))

        self.assertFalse(c.has_person(2001, roles=[BaseReviewerRole.EXTERNAL]))

        self.assertTrue(c.has_person(2001, roles=[BaseReviewerRole.TECH]))

        self.assertEqual(c.person_id_by_role(BaseReviewerRole.EXTERNAL),
                         [2002])

        self.assertFalse(c.has_role(BaseReviewerRole.FEEDBACK))

        self.assertTrue(c.has_role(BaseReviewerRole.EXTERNAL))

        self.assertEqual(c.role_by_person_id(2001), [BaseReviewerRole.TECH])

        self.assertEqual(c.role_by_person_id(2002),
                         [BaseReviewerRole.EXTERNAL])

        reviewers = c.values_by_role(BaseReviewerRole.EXTERNAL)
        self.assertIsInstance(reviewers, list)
        self.assertEqual(len(reviewers), 1)
        self.assertIsInstance(reviewers[0], Reviewer)
        self.assertEqual(reviewers[0].id, 202)