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)
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)
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])