예제 #1
0
    def test_team_awards(self):
        # Insert some Teams
        frc1 = Team(
            id='frc1',
            team_number=1
        )
        frc1.put()
        frc2 = Team(
            id='frc2',
            team_number=2
        )
        frc2.put()
        frc3 = Team(
            id='frc3',
            team_number=3
        )
        frc3.put()
        # Insert some Awards for some Teams
        award = Award(
            id=Award.render_key_name(self.event_ends_today.key_name, AwardType.INDUSTRIAL_DESIGN),
            name_str='Industrial Design Award sponsored by General Motors',
            award_type_enum=AwardType.INDUSTRIAL_DESIGN,
            event=self.event_ends_today.key,
            event_type_enum=EventType.REGIONAL,
            team_list=[ndb.Key(Team, 'frc1')],
            year=2020
        )
        award.put()
        winner_award = Award(
            id=Award.render_key_name(self.event_ends_today.key_name, AwardType.WINNER),
            name_str='Regional Event Winner',
            award_type_enum=AwardType.WINNER,
            event=self.event_ends_today.key,
            event_type_enum=EventType.REGIONAL,
            team_list=[ndb.Key(Team, 'frc2'), ndb.Key(Team, 'frc1')],
            year=2020
        )
        winner_award.put()

        self.assertItemsEqual(self.event_ends_today.team_awards().keys(), [frc1.key, frc2.key])
class TestAwardManipulator(unittest2.TestCase):
    def setUp(self):
        self.testbed = testbed.Testbed()
        self.testbed.activate()
        self.testbed.init_datastore_v3_stub()
        self.testbed.init_memcache_stub()
        self.testbed.init_taskqueue_stub()

        self.event = Event(
            id="2013casj",
            event_short="casj",
            year=2013,
            event_type_enum=EventType.REGIONAL,
        )

        self.old_award = Award(
            id=Award.render_key_name(self.event.key_name, AwardType.WINNER),
            name_str="Regional Winner",
            award_type_enum=AwardType.WINNER,
            year=2013,
            event=self.event.key,
            event_type_enum=EventType.REGIONAL,
            team_list=[ndb.Key(Team, 'frc111'),
                       ndb.Key(Team, 'frc234')],
            recipient_json_list=[
                json.dumps({
                    'team_number': 111,
                    'awardee': None
                }),
                json.dumps({
                    'team_number': 234,
                    'awardee': None
                })
            ],
        )

        self.new_award = Award(
            id="2013casj_1",
            name_str="Regional Champion",
            award_type_enum=AwardType.WINNER,
            year=2013,
            event=self.event.key,
            event_type_enum=EventType.REGIONAL,
            team_list=[ndb.Key(Team, 'frc359')],
            recipient_json_list=[
                json.dumps({
                    'team_number': 359,
                    'awardee': None
                })
            ],
        )

    def tearDown(self):
        self.testbed.deactivate()

    def assertMergedAward(self, award, is_auto_union):
        self.assertEqual(award.name_str, "Regional Champion")
        self.assertEqual(award.award_type_enum, AwardType.WINNER)
        self.assertEqual(award.year, 2013)
        self.assertEqual(award.event, self.event.key)
        self.assertEqual(award.event_type_enum, EventType.REGIONAL)
        if is_auto_union:
            self.assertEqual(
                set(award.team_list), {
                    ndb.Key(Team, 'frc111'),
                    ndb.Key(Team, 'frc234'),
                    ndb.Key(Team, 'frc359')
                })
            self.assertEqual(len(award.recipient_json_list), 3)
            for r in award.recipient_json_list:
                self.assertTrue(
                    json.loads(r) in [{
                        'team_number': 111,
                        'awardee': None
                    }, {
                        'team_number': 234,
                        'awardee': None
                    }, {
                        'team_number': 359,
                        'awardee': None
                    }])
        else:
            self.assertEqual(set(award.team_list), {ndb.Key(Team, 'frc359')})
            self.assertEqual(len(award.recipient_json_list), 1)
            for r in award.recipient_json_list:
                self.assertTrue(
                    json.loads(r) in [{
                        'team_number': 359,
                        'awardee': None
                    }])

    def assertOldAward(self, award):
        self.assertEqual(award.name_str, "Regional Winner")
        self.assertEqual(award.award_type_enum, AwardType.WINNER)
        self.assertEqual(award.year, 2013)
        self.assertEqual(award.event, self.event.key)
        self.assertEqual(award.event_type_enum, EventType.REGIONAL)
        self.assertEqual(set(award.team_list),
                         {ndb.Key(Team, 'frc111'),
                          ndb.Key(Team, 'frc234')})
        self.assertEqual(len(award.recipient_json_list), 2)
        for r in award.recipient_json_list:
            self.assertTrue(
                json.loads(r) in [{
                    'team_number': 111,
                    'awardee': None
                }, {
                    'team_number': 234,
                    'awardee': None
                }])

    def test_createOrUpdate(self):
        AwardManipulator.createOrUpdate(self.old_award)
        self.assertOldAward(Award.get_by_id("2013casj_1"))

        AwardManipulator.createOrUpdate(self.new_award)
        self.assertMergedAward(Award.get_by_id("2013casj_1"), True)

    def test_findOrSpawn(self):
        self.old_award.put()
        self.assertMergedAward(AwardManipulator.findOrSpawn(self.new_award),
                               True)

    def test_updateMerge(self):
        self.assertMergedAward(
            AwardManipulator.updateMerge(self.new_award, self.old_award), True)

    def test_createOrUpdate_no_auto_union(self):
        AwardManipulator.createOrUpdate(self.old_award)
        self.assertOldAward(Award.get_by_id("2013casj_1"))

        AwardManipulator.createOrUpdate(self.new_award, auto_union=False)
        self.assertMergedAward(Award.get_by_id("2013casj_1"), False)

    def test_findOrSpawn_no_auto_union(self):
        self.old_award.put()
        self.assertMergedAward(
            AwardManipulator.findOrSpawn(self.new_award, auto_union=False),
            False)

    def test_updateMerge_no_auto_union(self):
        self.assertMergedAward(
            AwardManipulator.updateMerge(self.new_award,
                                         self.old_award,
                                         auto_union=False), False)
예제 #3
0
class TestAwardsNotification(unittest2.TestCase):

    def setUp(self):
        self.testbed = testbed.Testbed()
        self.testbed.activate()
        self.testbed.init_datastore_v3_stub()
        self.testbed.init_memcache_stub()
        ndb.get_context().clear_cache()

        self.testbed.init_taskqueue_stub(root_path='.')

        self.event = Event(
            id='2020miket',
            event_type_enum=EventType.DISTRICT,
            short_name='Kettering University #1',
            name='FIM District Kettering University Event #1',
            event_short='miket',
            year=2020
        )

        self.team = Team(
            id='frc7332',
            team_number=7332
        )

        self.award = Award(
            id=Award.render_key_name(self.event.key_name, AwardType.INDUSTRIAL_DESIGN),
            name_str='Industrial Design Award sponsored by General Motors',
            award_type_enum=AwardType.INDUSTRIAL_DESIGN,
            event=self.event.key,
            event_type_enum=EventType.DISTRICT,
            year=2020
        )

        self.winner_award = Award(
            id=Award.render_key_name(self.event.key_name, AwardType.WINNER),
            name_str='District Event Winner',
            award_type_enum=AwardType.WINNER,
            event=self.event.key,
            event_type_enum=EventType.DISTRICT,
            year=2020
        )

    def tearDown(self):
        self.testbed.deactivate()

    def test_type(self):
        notification = AwardsNotification(self.event)
        self.assertEqual(AwardsNotification._type(), NotificationType.AWARDS)

    def test_fcm_notification_event(self):
        notification = AwardsNotification(self.event)
        self.assertIsNotNone(notification.fcm_notification)
        self.assertEqual(notification.fcm_notification.title, 'MIKET Awards')
        self.assertEqual(notification.fcm_notification.body, '2020 Kettering University #1 District awards have been posted.')

    def test_fcm_notification_team(self):
        self.award.team_list = [self.team.key]
        self.award.put()

        notification = AwardsNotification(self.event, self.team)

        self.assertIsNotNone(notification.fcm_notification)
        self.assertEqual(notification.fcm_notification.title, 'Team 7332 Awards')
        self.assertEqual(notification.fcm_notification.body, 'Team 7332 won the Industrial Design Award sponsored by General Motors at the 2020 Kettering University #1 District.')

    def test_fcm_notification_team_winner(self):
        self.winner_award.team_list = [self.team.key]
        self.winner_award.put()

        notification = AwardsNotification(self.event, self.team)

        self.assertIsNotNone(notification.fcm_notification)
        self.assertEqual(notification.fcm_notification.title, 'Team 7332 Awards')
        self.assertEqual(notification.fcm_notification.body, 'Team 7332 is the District Event Winner at the 2020 Kettering University #1 District.')

    def test_fcm_notification_team_finalist(self):
        self.winner_award.award_type_enum=AwardType.WINNER
        self.winner_award.name_str='District Event Finalist'
        self.winner_award.team_list = [self.team.key]
        self.winner_award.put()

        notification = AwardsNotification(self.event, self.team)

        self.assertIsNotNone(notification.fcm_notification)
        self.assertEqual(notification.fcm_notification.title, 'Team 7332 Awards')
        self.assertEqual(notification.fcm_notification.body, 'Team 7332 is the District Event Finalist at the 2020 Kettering University #1 District.')

    def test_fcm_notification_team_multiple(self):
        self.award.team_list = [self.team.key]
        self.award.put()
        self.winner_award.team_list = [self.team.key]
        self.winner_award.put()

        notification = AwardsNotification(self.event, self.team)

        self.assertIsNotNone(notification.fcm_notification)
        self.assertEqual(notification.fcm_notification.title, 'Team 7332 Awards')
        self.assertEqual(notification.fcm_notification.body, 'Team 7332 won 2 awards at the 2020 Kettering University #1 District.')

    def test_data_payload(self):
        notification = AwardsNotification(self.event)
        # No `event_name`
        payload = notification.data_payload
        self.assertEqual(len(payload), 1)
        self.assertEqual(payload['event_key'], '2020miket')

    def test_data_payload_team(self):
        notification = AwardsNotification(self.event, self.team)
        payload = notification.data_payload
        self.assertEqual(len(payload), 2)
        self.assertEqual(payload['event_key'], '2020miket')
        self.assertEqual(payload['team_key'], 'frc7332')

    def test_webhook_message_data(self):
        self.award.put()
        self.winner_award.put()

        notification = AwardsNotification(self.event)

        payload = notification.webhook_message_data
        self.assertEqual(len(payload), 3)
        self.assertEqual(payload['event_key'], '2020miket')
        self.assertEqual(payload['event_name'], 'FIM District Kettering University Event #1')
        self.assertIsNotNone(payload['awards'])
        self.assertEqual(len(payload['awards']), 2)

    def test_webhook_message_data_team(self):
        self.award.team_list = [self.team.key]
        self.award.put()

        notification = AwardsNotification(self.event, self.team)

        payload = notification.webhook_message_data
        self.assertEqual(len(payload), 4)
        self.assertEqual(payload['event_key'], '2020miket')
        self.assertEqual(payload['team_key'], 'frc7332')
        self.assertEqual(payload['event_name'], 'FIM District Kettering University Event #1')
        self.assertIsNotNone(payload['awards'])
        self.assertEqual(len(payload['awards']), 1)
class TestTeamApiController(unittest2.TestCase):

    def setUp(self):
        app = webapp2.WSGIApplication([webapp2.Route(r'/<team_key:>', ApiTeamController, methods=['GET'])], debug=True)
        self.testapp = webtest.TestApp(app)

        self.testbed = testbed.Testbed()
        self.testbed.activate()
        self.testbed.init_datastore_v3_stub()
        self.testbed.init_urlfetch_stub()
        self.testbed.init_memcache_stub()
        self.testbed.init_taskqueue_stub()

        self.team = Team(
                id="frc281",
                name="Michelin / Caterpillar / Greenville Technical College /\
                jcpenney / Baldor / ASME / Gastroenterology Associates /\
                Laserflex South & Greenville County Schools & Greenville\
                Technical Charter High School",
                team_number=281,
                nickname="EnTech GreenVillians",
                address="Greenville, SC, USA",
                website="www.entech.org",
        )

        self.team.put()

        self.event = Event(
                id="2010sc",
                name="Palmetto Regional",
                event_type_enum=EventType.REGIONAL,
                short_name="Palmetto",
                event_short="sc",
                year=datetime.now().year,
                end_date=datetime(2010, 03, 27),
                official=True,
                location='Clemson, SC',
                start_date=datetime(2010, 03, 24),
        )

        self.event.put()

        self.event_team = EventTeam(
                team=self.team.key,
                event=self.event.key,
                year=datetime.now().year
        )
        self.event_team.put()

        self.match = Match(
            id="2010sc_qm1",
            alliances_json="""{"blue": {"score": 57, "teams": ["frc3464", "frc20", "frc1073"]}, "red": {"score": 74, "teams": ["frc281", "frc571", "frc176"]}}""",
            comp_level="qm",
            event=self.event.key,
            game="frc_2012_rebr",
            set_number=1,
            match_number=1,
            team_key_names=[u'frc281', u'frc571', u'frc176', u'frc3464', u'frc20', u'frc1073'],

        )
        self.match.put()

        self.award = Award(
            name_str = "Engineering Inspiration",
            award_type_enum = AwardType.ENGINEERING_INSPIRATION,
            year=datetime.now().year,
            event = self.event.key,
            event_type_enum = EventType.REGIONAL,
            team_list = [self.team.key],
            recipient_json_list=[json.dumps({'team_number': 281, 'awardee': None})],
        )
        self.award.put()

    def tearDown(self):
        self.testbed.deactivate()

    def assertTeamJson(self, team):
        self.assertEqual(team["key"], self.team.key_name)
        self.assertEqual(team["team_number"], self.team.team_number)
        self.assertEqual(team["nickname"], self.team.nickname)
        self.assertEqual(team["location"], self.team.location)
        self.assertEqual(team["locality"], "Greenville")
        self.assertEqual(team["country_name"], "USA")
        self.assertEqual(team["region"], "SC")
        self.assertEqual(team["website"], self.team.website)

    def assertEventJson(self, event):
        self.assertEqual(event["key"], self.event.key_name)
        self.assertEqual(event["name"], self.event.name)
        self.assertEqual(event["short_name"], self.event.short_name)
        self.assertEqual(event["official"], self.event.official)
        self.assertEqual(event["start_date"], self.event.start_date.date().isoformat())
        self.assertEqual(event["end_date"], self.event.end_date.date().isoformat())
        self.assertEqual(event["event_type_string"], self.event.event_type_str)
        self.assertEqual(event["event_type"], self.event.event_type_enum)

    def assertMatchJson(self, match):
        self.assertEqual(str(match["key"]), self.match.key.string_id())
        self.assertEqual(match["comp_level"], self.match.comp_level)
        self.assertEqual(match["event_key"], self.match.event.string_id())
        self.assertEqual(match["set_number"], self.match.set_number)
        self.assertEqual(match["match_number"], self.match.match_number)

    def assertAwardJson(self, award):
        self.assertEqual(award["name"], self.award.name_str)
        self.assertEqual(award["event_key"], self.award.event.string_id())
        self.assertEqual(award["recipient_list"], self.award.recipient_list)
        self.assertEqual(award["year"], self.award.year)

    def testTeamApi(self):
        response = self.testapp.get('/frc281', headers={"X-TBA-App-Id": "tba-tests:team-controller-test:v01"})

        team_dict = json.loads(response.body)
        self.assertTeamJson(team_dict)
        self.assertEventJson(team_dict["events"][0])
        self.assertMatchJson(team_dict["events"][0]["matches"][0])
        self.assertAwardJson(team_dict["events"][0]["awards"][0])
class TestAwardManipulator(unittest2.TestCase):
    def setUp(self):
        self.testbed = testbed.Testbed()
        self.testbed.activate()
        self.testbed.init_datastore_v3_stub()
        self.testbed.init_memcache_stub()
        self.testbed.init_taskqueue_stub(root_path=".")

        self.event = Event(
          id="2013casj",
          event_short="casj",
          year=2013,
          event_type_enum=EventType.REGIONAL,
        )

        self.old_award = Award(
            id=Award.render_key_name(self.event.key_name, AwardType.WINNER),
            name_str="Regional Winner",
            award_type_enum=AwardType.WINNER,
            year=2013,
            event=self.event.key,
            event_type_enum=EventType.REGIONAL,
            team_list=[ndb.Key(Team, 'frc111'), ndb.Key(Team, 'frc234')],
            recipient_json_list=[json.dumps({'team_number': 111, 'awardee': None}),
                                 json.dumps({'team_number': 234, 'awardee': None})],
        )

        self.new_award = Award(
            id="2013casj_1",
            name_str="Regional Champion",
            award_type_enum=AwardType.WINNER,
            year=2013,
            event=self.event.key,
            event_type_enum=EventType.REGIONAL,
            team_list=[ndb.Key(Team, 'frc359')],
            recipient_json_list=[json.dumps({'team_number': 359, 'awardee': None})],
        )

    def tearDown(self):
        self.testbed.deactivate()

    def assertMergedAward(self, award, is_auto_union):
        self.assertEqual(award.name_str, "Regional Champion")
        self.assertEqual(award.award_type_enum, AwardType.WINNER)
        self.assertEqual(award.year, 2013)
        self.assertEqual(award.event, self.event.key)
        self.assertEqual(award.event_type_enum, EventType.REGIONAL)
        if is_auto_union:
            self.assertEqual(set(award.team_list), {ndb.Key(Team, 'frc111'), ndb.Key(Team, 'frc234'), ndb.Key(Team, 'frc359')})
            self.assertEqual(len(award.recipient_json_list), 3)
            for r in award.recipient_json_list:
                self.assertTrue(json.loads(r) in [{'team_number': 111, 'awardee': None}, {'team_number': 234, 'awardee': None}, {'team_number': 359, 'awardee': None}])
        else:
            self.assertEqual(set(award.team_list), {ndb.Key(Team, 'frc359')})
            self.assertEqual(len(award.recipient_json_list), 1)
            for r in award.recipient_json_list:
                self.assertTrue(json.loads(r) in [{'team_number': 359, 'awardee': None}])

    def assertOldAward(self, award):
        self.assertEqual(award.name_str, "Regional Winner")
        self.assertEqual(award.award_type_enum, AwardType.WINNER)
        self.assertEqual(award.year, 2013)
        self.assertEqual(award.event, self.event.key)
        self.assertEqual(award.event_type_enum, EventType.REGIONAL)
        self.assertEqual(set(award.team_list), {ndb.Key(Team, 'frc111'), ndb.Key(Team, 'frc234')})
        self.assertEqual(len(award.recipient_json_list), 2)
        for r in award.recipient_json_list:
            self.assertTrue(json.loads(r) in [{'team_number': 111, 'awardee': None}, {'team_number': 234, 'awardee': None}])

    def test_createOrUpdate(self):
        AwardManipulator.createOrUpdate(self.old_award)
        self.assertOldAward(Award.get_by_id("2013casj_1"))

        AwardManipulator.createOrUpdate(self.new_award)
        self.assertMergedAward(Award.get_by_id("2013casj_1"), True)

    def test_findOrSpawn(self):
        self.old_award.put()
        self.assertMergedAward(AwardManipulator.findOrSpawn(self.new_award), True)

    def test_updateMerge(self):
        self.assertMergedAward(AwardManipulator.updateMerge(self.new_award, self.old_award), True)

    def test_createOrUpdate_no_auto_union(self):
        AwardManipulator.createOrUpdate(self.old_award)
        self.assertOldAward(Award.get_by_id("2013casj_1"))

        AwardManipulator.createOrUpdate(self.new_award, auto_union=False)
        self.assertMergedAward(Award.get_by_id("2013casj_1"), False)

    def test_findOrSpawn_no_auto_union(self):
        self.old_award.put()
        self.assertMergedAward(AwardManipulator.findOrSpawn(self.new_award, auto_union=False), False)

    def test_updateMerge_no_auto_union(self):
        self.assertMergedAward(AwardManipulator.updateMerge(self.new_award, self.old_award, auto_union=False), False)
예제 #6
0
class TestTeamApiController(unittest2.TestCase):
    def setUp(self):
        app = webapp2.WSGIApplication([
            webapp2.Route(r'/<team_key:>', ApiTeamController, methods=['GET'])
        ],
                                      debug=True)
        self.testapp = webtest.TestApp(app)

        self.testbed = testbed.Testbed()
        self.testbed.activate()
        self.testbed.init_datastore_v3_stub()
        self.testbed.init_urlfetch_stub()
        self.testbed.init_memcache_stub()
        self.testbed.init_taskqueue_stub()

        self.team = Team(
            id="frc281",
            name="Michelin / Caterpillar / Greenville Technical College /\
                jcpenney / Baldor / ASME / Gastroenterology Associates /\
                Laserflex South & Greenville County Schools & Greenville\
                Technical Charter High School",
            team_number=281,
            nickname="EnTech GreenVillians",
            address="Greenville, SC, USA",
            website="www.entech.org",
        )

        self.team.put()

        self.event = Event(
            id="2010sc",
            name="Palmetto Regional",
            event_type_enum=EventType.REGIONAL,
            short_name="Palmetto",
            event_short="sc",
            year=datetime.now().year,
            end_date=datetime(2010, 03, 27),
            official=True,
            location='Clemson, SC',
            start_date=datetime(2010, 03, 24),
        )

        self.event.put()

        self.event_team = EventTeam(team=self.team.key,
                                    event=self.event.key,
                                    year=datetime.now().year)
        self.event_team.put()

        self.match = Match(
            id="2010sc_qm1",
            alliances_json=
            """{"blue": {"score": 57, "teams": ["frc3464", "frc20", "frc1073"]}, "red": {"score": 74, "teams": ["frc281", "frc571", "frc176"]}}""",
            comp_level="qm",
            event=self.event.key,
            game="frc_2012_rebr",
            set_number=1,
            match_number=1,
            team_key_names=[
                u'frc281', u'frc571', u'frc176', u'frc3464', u'frc20',
                u'frc1073'
            ],
        )
        self.match.put()

        self.award = Award(
            name_str="Engineering Inspiration",
            award_type_enum=AwardType.ENGINEERING_INSPIRATION,
            year=datetime.now().year,
            event=self.event.key,
            event_type_enum=EventType.REGIONAL,
            team_list=[self.team.key],
            recipient_json_list=[
                json.dumps({
                    'team_number': 281,
                    'awardee': None
                })
            ],
        )
        self.award.put()

    def tearDown(self):
        self.testbed.deactivate()

    def assertTeamJson(self, team):
        self.assertEqual(team["key"], self.team.key_name)
        self.assertEqual(team["team_number"], self.team.team_number)
        self.assertEqual(team["nickname"], self.team.nickname)
        self.assertEqual(team["location"], self.team.location)
        self.assertEqual(team["locality"], "Greenville")
        self.assertEqual(team["country_name"], "USA")
        self.assertEqual(team["region"], "SC")
        self.assertEqual(team["website"], self.team.website)

    def assertEventJson(self, event):
        self.assertEqual(event["key"], self.event.key_name)
        self.assertEqual(event["name"], self.event.name)
        self.assertEqual(event["short_name"], self.event.short_name)
        self.assertEqual(event["official"], self.event.official)
        self.assertEqual(event["start_date"],
                         self.event.start_date.isoformat())
        self.assertEqual(event["end_date"], self.event.end_date.isoformat())
        self.assertEqual(event["event_type_string"], self.event.event_type_str)
        self.assertEqual(event["event_type"], self.event.event_type_enum)

    def assertMatchJson(self, match):
        self.assertEqual(str(match["key"]), self.match.key.string_id())
        self.assertEqual(match["comp_level"], self.match.comp_level)
        self.assertEqual(match["event_key"], self.match.event.string_id())
        self.assertEqual(match["set_number"], self.match.set_number)
        self.assertEqual(match["match_number"], self.match.match_number)

    def assertAwardJson(self, award):
        self.assertEqual(award["name"], self.award.name_str)
        self.assertEqual(award["event_key"], self.award.event.string_id())
        self.assertEqual(award["recipient_list"], self.award.recipient_list)
        self.assertEqual(award["year"], self.award.year)

    def testTeamApi(self):
        response = self.testapp.get(
            '/frc281',
            headers={"X-TBA-App-Id": "tba-tests:team-controller-test:v01"})

        team_dict = json.loads(response.body)
        self.assertTeamJson(team_dict)
        self.assertEventJson(team_dict["events"][0])
        self.assertMatchJson(team_dict["events"][0]["matches"][0])
        self.assertAwardJson(team_dict["events"][0]["awards"][0])