コード例 #1
0
def _upload_stats(team_name, stats):
    query = Team.all()
    query.filter('name =', team_name)
    result = query.fetch(1)

    if len(result) > 0:
        for team in result:
            team.year = Const.LAST_YEAR
            team.offense_passing = stats['offense']['pass']
            team.offense_rushing = stats['offense']['rush']
            team.offense_first_down = stats['offense']['first_down']
            team.defense_passing = stats['defense']['pass']
            team.defense_rushing = stats['defense']['rush']
            team.defense_first_down = stats['defense']['first_down']

            team.put()
    else:
        team = Team(name=team_name,
                    year=Const.LAST_YEAR,
                    offense_passing=stats['offense']['pass'],
                    offense_rushing=stats['offense']['rush'],
                    offense_first_down=stats['offense']['first_down'],
                    defense_passing=stats['defense']['pass'],
                    defense_rushing=stats['defense']['rush'],
                    defense_first_down=stats['defense']['first_down'])

        team.put()
コード例 #2
0
    def setUp(self):
        self.testbed = testbed.Testbed()
        self.testbed.activate()
        self.testbed.init_datastore_v3_stub()
        self.testbed.init_memcache_stub()

        event = Event(
            id="2011ct",
            end_date=datetime.datetime(2011, 4, 2, 0, 0),
            event_short="ct",
            event_type_enum=EventType.REGIONAL,
            first_eid="5561",
            name="Northeast Utilities FIRST Connecticut Regional",
            start_date=datetime.datetime(2011, 3, 31, 0, 0),
            year=2011,
            venue_address="Connecticut Convention Center\r\n100 Columbus Blvd\r\nHartford, CT 06103\r\nUSA",
            website="http://www.ctfirst.org/ctr"
        )
        event.put()

        team = Team(
            id="frc177",
            team_number=177,
            website="http://www.bobcatrobotics.org"
        )
        team.put()

        event_team = EventTeam(
            id="%s_%s" % (event.key.id(), team.key.id()),
            event=event.key,
            team=team.key,
            year=None)
        event_team.put()
コード例 #3
0
def _upload_stats(team_name, stats):
    query = Team.all()
    query.filter('name =', team_name)
    result = query.fetch(1)

    if len(result) > 0:
        for team in result:
            team.year = Const.LAST_YEAR
            team.offense_passing = stats['offense']['pass']
            team.offense_rushing = stats['offense']['rush']
            team.offense_first_down = stats['offense']['first_down']
            team.defense_passing = stats['defense']['pass']
            team.defense_rushing = stats['defense']['rush']
            team.defense_first_down = stats['defense']['first_down']

            team.put()
    else:
        team = Team(name = team_name,
                    year = Const.LAST_YEAR,
                    offense_passing = stats['offense']['pass'],
                    offense_rushing = stats['offense']['rush'],
                    offense_first_down = stats['offense']['first_down'],
                    defense_passing = stats['defense']['pass'],
                    defense_rushing = stats['defense']['rush'],
                    defense_first_down = stats['defense']['first_down'])

        team.put()
コード例 #4
0
class TestTeamMediaApiController(unittest2.TestCase):
    def setUp(self):
        app = webapp2.WSGIApplication([webapp2.Route(r'/<team_key:>/<year:>', ApiTeamMediaController, 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(root_path=".")

        self.team = Team(
                id="frc254",
                name="very long name",
                team_number=254,
                nickname="Teh Chezy Pofs",
                address="Greenville, SC, USA"
        )
        self.team.put()

        self.cdmedia = Media(
                        key=ndb.Key('Media', 'cdphotothread_39894'),
                        details_json=u'{"image_partial": "fe3/fe38d320428adf4f51ac969efb3db32c_l.jpg"}',
                        foreign_key=u'39894',
                        media_type_enum=1,
                        references=[ndb.Key('Team', 'frc254')],
                        year=2014)
        self.cdmedia.put()
        self.cddetails = dict()
        self.cddetails["image_partial"] = "fe3/fe38d320428adf4f51ac969efb3db32c_l.jpg"

        self.ytmedia = Media(
                        key=ndb.Key('Media', 'youtube_aFZy8iibMD0'),
                        details_json=None,
                        foreign_key=u'aFZy8iibMD0',
                        media_type_enum=0,
                        references=[ndb.Key('Team', 'frc254')],
                        year=2014)
        self.ytmedia.put()

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

    def testTeamMediaApi(self):
        response = self.testapp.get('/frc254/2014', headers={"X-TBA-App-Id": "tba-tests:team_media-controller-test:v01"})
        media = json.loads(response.body)

        self.assertEqual(len(media), 2)

        cd = media[0]
        self.assertEqual(cd["type"], "cdphotothread")
        self.assertEqual(cd["foreign_key"], "39894")
        self.assertEqual(cd["details"], self.cddetails)

        yt = media[1]
        self.assertEqual(yt["type"], "youtube")
        self.assertEqual(yt["foreign_key"], "aFZy8iibMD0")
        self.assertEqual(yt["details"], {})
コード例 #5
0
class TestDistrictTeamsApiController(unittest2.TestCase):
    def setUp(self):
        app = webapp2.WSGIApplication([webapp2.Route(r'/<district_abbrev:>/<year:([0-9]*)>', ApiDistrictTeamsController, 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()
        ndb.get_context().clear_cache()  # Prevent data from leaking between tests

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

        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",
                city="Greenville",
                state_prov="SC",
                country="USA",
                website="www.entech.org",
                motto = "Infiltrating Young Minds One Robot at a Time",
        )

        self.district_team = DistrictTeam(
                id="2015ne_frc281",
                team=self.team.key,
                year=2015,
                district=3
        )

        self.team.put()
        self.district_team.put()


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

    def assertTeamJson(self, team):
        team = team[0]
        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)
        self.assertEqual(team["motto"], self.team.motto)

    def testDistrictsApi(self):
        response = self.testapp.get('/ne/2015', headers={"X-TBA-App-Id": "tba-tests:team-districts-controller-test:v01"})
        teams = json.loads(response.body)
        self.assertTeamJson(teams)
class TestDistrictTeamsApiController(unittest2.TestCase):
    def setUp(self):
        app = webapp2.WSGIApplication(
            [webapp2.Route(r"/<district_abbrev:>/<year:([0-9]*)>", ApiDistrictTeamsController, 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()
        ndb.get_context().clear_cache()  # Prevent data from leaking between tests

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

        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",
            city="Greenville",
            state_prov="SC",
            country="USA",
            website="www.entech.org",
            motto="Infiltrating Young Minds One Robot at a Time",
        )

        self.district_team = DistrictTeam(id="2015ne_frc281", team=self.team.key, year=2015, district=3)

        self.team.put()
        self.district_team.put()

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

    def assertTeamJson(self, team):
        team = team[0]
        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)
        self.assertEqual(team["motto"], self.team.motto)

    def testDistrictsApi(self):
        response = self.testapp.get(
            "/ne/2015", headers={"X-TBA-App-Id": "tba-tests:team-districts-controller-test:v01"}
        )
        teams = json.loads(response.body)
        self.assertTeamJson(teams)
コード例 #7
0
class TestTeamHistoryDistrictsApiController(unittest2.TestCase):
    def setUp(self):
        app = webapp2.WSGIApplication([
            webapp2.Route(r'/<team_key:>',
                          ApiTeamHistoryDistrictsController,
                          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()
        ndb.get_context().clear_cache(
        )  # Prevent data from leaking between tests

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

        self.team = Team(
            id="frc1124",
            name="UberBots",
            team_number=1124,
            nickname="UberBots",
        )

        self.district_team = DistrictTeam(id="2015ne_frc1124",
                                          team=self.team.key,
                                          year=2015,
                                          district_key=ndb.Key(
                                              District, '2015ne'))

        self.district = District(
            id='2015ne',
            year=2015,
        )

        self.team.put()
        self.district_team.put()
        self.district.put()

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

    def testDistrictsApi(self):
        response = self.testapp.get(
            '/frc1124',
            headers={
                "X-TBA-App-Id":
                "tba-tests:team-history-districts-controller-test:v01"
            })
        district_dict = json.loads(response.body)

        self.assertTrue("2015" in district_dict)
        district_key = district_dict["2015"]

        self.assertEqual(district_key, "2015ne")
コード例 #8
0
class TestTeamListApiController(unittest2.TestCase):
    def setUp(self):
        app = webapp2.WSGIApplication([webapp2.Route(r'/<page_num:([0-9]*)>', ApiTeamListController, 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(root_path=".")

        self.team1 = Team(
                id="frc123",
                name="SomeName",
                team_number=123,
                nickname="SomeNickname",
                address="San Jose, CA, USA",
                website="www.website.com",
        )

        self.team2 = Team(
                id="frc4567",
                name="SomeName",
                team_number=4567,
                nickname="SomeNickname",
                address="San Jose, CA, USA",
                website="www.website.com",
        )

        self.team1.put()
        self.team2.put()

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

    def assertTeam1Json(self, team):
        self.assertEqual(team["key"], self.team1.key_name)
        self.assertEqual(team["name"], self.team1.name)
        self.assertEqual(team["team_number"], self.team1.team_number)

    def assertTeam2Json(self, team):
        self.assertEqual(team["key"], self.team2.key_name)
        self.assertEqual(team["name"], self.team2.name)
        self.assertEqual(team["team_number"], self.team2.team_number)

    def testTeamListApi(self):
        response = self.testapp.get('/0', headers={"X-TBA-App-Id": "tba-tests:team_list-controller-test:v01"})
        team_list = json.loads(response.body)
        self.assertTeam1Json(team_list[0])

        response = self.testapp.get('/9', headers={"X-TBA-App-Id": "tba-tests:team_list-controller-test:v01"})
        team_list = json.loads(response.body)
        self.assertTeam2Json(team_list[0])

        response = self.testapp.get('/10', headers={"X-TBA-App-Id": "tba-tests:team_list-controller-test:v01"})
        team_list = json.loads(response.body)
        self.assertEqual(team_list, [])
コード例 #9
0
ファイル: team_svc.py プロジェクト: mattrjacobs/Prdict
    def create_entry_from_params(self, params):
        new_team = Team(title = params["title"],
                        description = params["description"],
                        location = params["location"],
                        league = params["league"],
                        ref_id = params["ref_id"])

        new_team.put()
        return new_team
コード例 #10
0
class TestDatafeedUsfirstLegacyTeams(unittest2.TestCase):
    def setUp(self):
        self.testbed = testbed.Testbed()
        self.testbed.activate()
        self.testbed.init_urlfetch_stub()
        self.testbed.init_datastore_v3_stub()
        self.testbed.init_memcache_stub()

        self.datafeed = DatafeedUsfirstLegacy()

        self.team177 = Team(
            id="frc177",
            team_number=177,
            first_tpid=211521,
            first_tpid_year=2014,
        )
        self.team177.put()

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

    def test_getTeamDetails(self):
        team = self.datafeed.getTeamDetails(self.team177)

        self.assertEqual(team.key.id(), 'frc177')
        self.assertEqual(
            team.name,
            "United Technologies / ClearEdge Power / Gain Talent / EBA&D & South Windsor High School"
        )
        self.assertEqual(team.address, u"South Windsor, CT\xa0 USA")
        self.assertEqual(team.nickname, "Bobcat Robotics")
        self.assertEqual(team.rookie_year, 1995)
        self.assertEqual(team.website, "http://www.bobcatrobotics.org")

    def test_getTeamsTpids(self):
        Team(
            id="frc4409",
            team_number=4409,
            first_tpid=0,  # should be 74735
            first_tpid_year=2011).put()

        # We can skip 2000 records, paginate, and still get frc4409 and frc4410 in 2012
        self.datafeed.getTeamsTpids(2012, skip=2000)

        # Check new team insertion
        frc4410 = Team.get_by_id("frc4410")
        self.assertEqual(frc4410.team_number, 4410)
        self.assertEqual(frc4410.first_tpid, 74193)
        self.assertEqual(frc4410.first_tpid_year, 2012)

        # Check old team updating
        frc4409 = Team.get_by_id("frc4409")
        self.assertEqual(frc4409.team_number, 4409)
        self.assertEqual(frc4409.first_tpid, 74735)
        self.assertEqual(frc4409.first_tpid_year, 2012)
コード例 #11
0
class TestTeamHistoryRobotsApiController(unittest2.TestCase):
    def setUp(self):
        app = webapp2.WSGIApplication([
            webapp2.Route(r'/<team_key:>',
                          ApiTeamHistoryRobotsController,
                          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()
        ndb.get_context().clear_cache(
        )  # Prevent data from leaking between tests

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

        self.team = Team(
            id="frc1124",
            name="UberBots",
            team_number=1124,
            nickname="UberBots",
        )

        self.robot = Robot(id="frc1124_2015",
                           team=self.team.key,
                           year=2015,
                           robot_name="Orion")

        self.team.put()
        self.robot.put()

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

    def testRobotApi(self):
        response = self.testapp.get(
            '/frc1124',
            headers={
                "X-TBA-App-Id": "tba-tests:team_list-controller-test:v01"
            })
        robot_dict = json.loads(response.body)

        self.assertTrue("2015" in robot_dict)
        robot = robot_dict["2015"]

        self.assertEqual(robot["key"], "frc1124_2015")
        self.assertEqual(robot["team_key"], "frc1124")
        self.assertEqual(robot["year"], 2015)
        self.assertEqual(robot["name"], "Orion")
コード例 #12
0
class TestDatafeedUsfirstLegacyTeams(unittest2.TestCase):
    def setUp(self):
        self.testbed = testbed.Testbed()
        self.testbed.activate()
        self.testbed.init_urlfetch_stub()
        self.testbed.init_datastore_v3_stub()
        self.testbed.init_memcache_stub()

        self.datafeed = DatafeedUsfirstLegacy()

        self.team177 = Team(
            id="frc177",
            team_number=177,
            first_tpid=211521,
            first_tpid_year=2014,
        )
        self.team177.put()

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

    def test_getTeamDetails(self):
        team = self.datafeed.getTeamDetails(self.team177)

        self.assertEqual(team.key.id(), 'frc177')
        self.assertEqual(team.name, "United Technologies / ClearEdge Power / Gain Talent / EBA&D & South Windsor High School")
        self.assertEqual(team.address, u"South Windsor, CT\xa0 USA")
        self.assertEqual(team.nickname, "Bobcat Robotics")
        self.assertEqual(team.rookie_year, 1995)
        self.assertEqual(team.website, "http://www.bobcatrobotics.org")

    def test_getTeamsTpids(self):
        Team(
          id="frc4409",
          team_number=4409,
          first_tpid=0,  # should be 74735
          first_tpid_year=2011
        ).put()

        # We can skip 2000 records, paginate, and still get frc4409 and frc4410 in 2012
        self.datafeed.getTeamsTpids(2012, skip=2000)

        # Check new team insertion
        frc4410 = Team.get_by_id("frc4410")
        self.assertEqual(frc4410.team_number, 4410)
        self.assertEqual(frc4410.first_tpid, 74193)
        self.assertEqual(frc4410.first_tpid_year, 2012)

        # Check old team updating
        frc4409 = Team.get_by_id("frc4409")
        self.assertEqual(frc4409.team_number, 4409)
        self.assertEqual(frc4409.first_tpid, 74735)
        self.assertEqual(frc4409.first_tpid_year, 2012)
コード例 #13
0
class TestDatafeedUsfirstTeams(unittest2.TestCase):
    def setUp(self):
        self.testbed = testbed.Testbed()
        self.testbed.activate()
        self.testbed.init_urlfetch_stub()
        self.testbed.init_datastore_v3_stub()
        self.testbed.init_memcache_stub()

        self.datafeed = DatafeedUsfirst()

        self.team177 = Team(
            id="frc177",
            team_number=177,
            first_tpid=61771,
            first_tpid_year=2012
        )
        self.team177.put()

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

    def test_getTeamDetails(self):
        team = self.datafeed.getTeamDetails(self.team177)

        ## Broken as result of FIRST website redesign -gregmarra 20151122
        # self.assertEqual(team.name, "UTC Power/Ensign Bickford Aerospace & Defense & South Windsor High School")
        # self.assertEqual(team.address, u"South Windsor, CT, USA")
        # self.assertEqual(team.nickname, "Bobcat Robotics")
        # self.assertEqual(team.website, "http://www.bobcatrobotics.org")

    def test_getTeamsTpids(self):
        Team(
          id="frc4409",
          team_number=4409,
          first_tpid=0,  # should be 74735
          first_tpid_year=2011
        ).put()

        # We can skip 2000 records, paginate, and still get frc4409 and frc4410 in 2012
        self.datafeed.getTeamsTpids(2012, skip=2000)

        # Check new team insertion
        frc4410 = Team.get_by_id("frc4410")
        self.assertEqual(frc4410.team_number, 4410)
        self.assertEqual(frc4410.first_tpid, 74193)
        self.assertEqual(frc4410.first_tpid_year, 2012)

        # Check old team updating
        frc4409 = Team.get_by_id("frc4409")
        self.assertEqual(frc4409.team_number, 4409)
        self.assertEqual(frc4409.first_tpid, 74735)
        self.assertEqual(frc4409.first_tpid_year, 2012)
コード例 #14
0
class TestDatafeedUsfirstTeams(unittest2.TestCase):
    def setUp(self):
        self.testbed = testbed.Testbed()
        self.testbed.activate()
        self.testbed.init_urlfetch_stub()
        self.testbed.init_datastore_v3_stub()
        self.testbed.init_memcache_stub()

        self.datafeed = DatafeedUsfirst()

        self.team177 = Team(id="frc177",
                            team_number=177,
                            first_tpid=61771,
                            first_tpid_year=2012)
        self.team177.put()

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

    def test_getTeamDetails(self):
        team = self.datafeed.getTeamDetails(self.team177)

        self.assertEqual(
            team.name,
            "UTC Power/Ensign Bickford Aerospace & Defense & South Windsor High School"
        )
        self.assertEqual(team.address, u"South Windsor, CT, USA")
        self.assertEqual(team.nickname, "Bobcat Robotics")
        self.assertEqual(team.website, "http://www.bobcatrobotics.org")

    def test_getTeamsTpids(self):
        Team(
            id="frc4409",
            team_number=4409,
            first_tpid=0,  # should be 74735
            first_tpid_year=2011).put()

        # We can skip 2000 records, paginate, and still get frc4409 and frc4410 in 2012
        self.datafeed.getTeamsTpids(2012, skip=2000)

        # Check new team insertion
        frc4410 = Team.get_by_id("frc4410")
        self.assertEqual(frc4410.team_number, 4410)
        self.assertEqual(frc4410.first_tpid, 74193)
        self.assertEqual(frc4410.first_tpid_year, 2012)

        # Check old team updating
        frc4409 = Team.get_by_id("frc4409")
        self.assertEqual(frc4409.team_number, 4409)
        self.assertEqual(frc4409.first_tpid, 74735)
        self.assertEqual(frc4409.first_tpid_year, 2012)
コード例 #15
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(root_path=".")

        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,
            rookie_year=1999,
            nickname="EnTech GreenVillians",
            address="Greenville, SC, USA",
            website="www.entech.org",
        )
        self.team.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)
        self.assertEqual(team["rookie_year"], self.team.rookie_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)
コード例 #16
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(root_path=".")

        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,
                rookie_year=1999,
                nickname="EnTech GreenVillians",
                city="Greenville",
                state_prov="SC",
                country="USA",
                website="www.entech.org",
                motto = "Infiltrating Young Minds One Robot at a Time",
        )
        self.team.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)
        self.assertEqual(team["rookie_year"], self.team.rookie_year)
        self.assertEqual(team["motto"], self.team.motto)

    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)
コード例 #17
0
class TestTeamHistoryDistrictsApiController(unittest2.TestCase):
    def setUp(self):
        app = webapp2.WSGIApplication([webapp2.Route(r'/<team_key:>', ApiTeamHistoryDistrictsController, 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()
        ndb.get_context().clear_cache()  # Prevent data from leaking between tests

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

        self.team = Team(
            id="frc1124",
            name="UberBots",
            team_number=1124,
            nickname="UberBots"
        )

        self.district_team = DistrictTeam(
            id="2015ne_frc1124",
            team=self.team.key,
            year=2015,
            district_key=ndb.Key(District, '2015ne')
        )

        self.district = District(
            id='2015ne',
            year=2015
        )

        self.team.put()
        self.district_team.put()
        self.district.put()

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

    def testDistrictsApi(self):
        response = self.testapp.get('/frc1124', headers={"X-TBA-App-Id": "tba-tests:team-history-districts-controller-test:v01"})
        district_dict = json.loads(response.body)

        self.assertTrue("2015" in district_dict)
        district_key = district_dict["2015"]

        self.assertEqual(district_key, "2015ne")
コード例 #18
0
class TestTeamHistoryRobotsApiController(unittest2.TestCase):
    def setUp(self):
        app = webapp2.WSGIApplication([webapp2.Route(r'/<team_key:>', ApiTeamHistoryRobotsController, 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()
        ndb.get_context().clear_cache()  # Prevent data from leaking between tests

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

        self.team = Team(
            id="frc1124",
            name="UberBots",
            team_number=1124,
            nickname="UberBots"
        )

        self.robot = Robot(
            id="frc1124_2015",
            team=self.team.key,
            year=2015,
            robot_name="Orion"
        )

        self.team.put()
        self.robot.put()

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

    def testRobotApi(self):
        response = self.testapp.get('/frc1124', headers={"X-TBA-App-Id": "tba-tests:team_list-controller-test:v01"})
        robot_dict = json.loads(response.body)

        self.assertTrue("2015" in robot_dict)
        robot = robot_dict["2015"]

        self.assertEqual(robot["key"], "frc1124_2015")
        self.assertEqual(robot["team_key"], "frc1124")
        self.assertEqual(robot["year"], 2015)
        self.assertEqual(robot["name"], "Orion")
コード例 #19
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])
コード例 #20
0
class TestSuggestTeamMediaController(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_user_stub()
        ndb.get_context().clear_cache(
        )  # Prevent data from leaking between tests

        app = webapp2.WSGIApplication([
            RedirectRoute(r'/suggest/team/media',
                          SuggestTeamMediaController,
                          'suggest-team-media',
                          strict_slash=True),
        ],
                                      debug=True)
        self.testapp = webtest.TestApp(app)

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

    def loginUser(self):
        self.testbed.setup_env(user_email="*****@*****.**",
                               user_id="123",
                               user_is_admin='0',
                               overwrite=True)

        Account.get_or_insert("123", email="*****@*****.**", registered=True)

    def storeTeam(self):
        self.team = Team(
            id="frc1124",
            team_number=1124,
        )
        self.team.put()

    def getSuggestionForm(self, team_key, year):
        response = self.testapp.get(
            '/suggest/team/media?team_key={}&year={}'.format(team_key, year))
        self.assertEqual(response.status_int, 200)

        form = response.forms.get('suggest_media', None)
        self.assertIsNotNone(form)
        return form

    def test_login_redirect(self):
        response = self.testapp.get(
            '/suggest/team/media?team_key=frc1124&year=2016', status='3*')
        response = response.follow(expect_errors=True)
        self.assertTrue(
            response.request.path.startswith("/account/login_required"))

    def test_no_params(self):
        self.loginUser()
        response = self.testapp.get('/suggest/team/media', status='3*')
        response = response.follow(expect_errors=True)
        self.assertEqual(response.request.path, '/')

    def test_submit_empty_form(self):
        self.loginUser()
        self.storeTeam()
        form = self.getSuggestionForm('frc1124', 2016)
        response = form.submit().follow()
        self.assertEqual(response.status_int, 200)

        request = response.request
        self.assertEqual(request.GET.get('status'), 'bad_url')

    def test_bad_team(self):
        self.loginUser()
        response = self.testapp.get(
            '/suggest/team/media?team_key=frc1124&year=2016', status='3*')
        response = response.follow(expect_errors=True)
        self.assertEqual(response.request.path, '/')

    def test_suggest_media(self):
        self.loginUser()
        self.storeTeam()
        form = self.getSuggestionForm('frc1124', 2016)
        form['media_url'] = 'http://imgur.com/aF8T5ZE'
        response = form.submit().follow()
        self.assertEqual(response.status_int, 200)

        request = response.request
        self.assertEqual(request.GET.get('status'), 'success')

        suggestion = Suggestion.get_by_id(
            'media_2016_team_frc1124_imgur_aF8T5ZE')
        self.assertIsNotNone(suggestion)
コード例 #21
0
class TestTeamAdminRedeem(unittest2.TestCase):
    def setUp(self):
        self.policy = datastore_stub_util.PseudoRandomHRConsistencyPolicy(
            probability=1)
        self.testbed = testbed.Testbed()
        self.testbed.activate()
        self.testbed.init_datastore_v3_stub(consistency_policy=self.policy)
        self.testbed.init_memcache_stub()
        self.testbed.init_user_stub()
        self.testbed.init_urlfetch_stub()
        self.testbed.init_taskqueue_stub(_all_queues_valid=True)
        ndb.get_context().clear_cache(
        )  # Prevent data from leaking between tests

        app = webapp2.WSGIApplication([
            RedirectRoute(
                r'/mod/redeem',
                TeamAdminRedeem,
                'team-admin',
                strict_slash=True),
        ])
        self.testapp = webtest.TestApp(app)

        self.team = Team(
            id="frc1124",
            name="Team",
            team_number=1124,
        )
        self.team.put()
        self.now = datetime.datetime.now()

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

    def loginUser(self):
        self.testbed.setup_env(
            user_email="*****@*****.**",
            user_id="123",
            user_is_admin='0',
            overwrite=True)

        self.account = Account.get_or_insert(
            "123", email="*****@*****.**", registered=True)

    def addTeamAdminAccess(self, account, team_number=1124):
        access = TeamAdminAccess(
            id="test_access",
            access_code="abc123",
            team_number=team_number,
            year=self.now.year,
            expiration=self.now + datetime.timedelta(days=1),
            account=account,
        )
        return access.put()

    def getForm(self):
        response = self.testapp.get('/mod/redeem')
        self.assertEqual(response.status_int, 200)

        form = response.forms.get('redeem', None)
        self.assertIsNotNone(form)
        return form

    def test_login_redirect(self):
        response = self.testapp.get('/mod/redeem', status='3*')
        response = response.follow(expect_errors=True)
        self.assertTrue(
            response.request.path.startswith("/account/login_required"))

    def test_cant_redeem_with_code_linked(self):
        self.loginUser()
        access_key = self.addTeamAdminAccess(account=self.account.key)
        response = self.testapp.get('/mod/redeem')
        self.assertEqual(response.status_int, 200)

        # If there's an existing code linked, the form shouldn't render
        form = response.forms.get('redeem', None)
        self.assertIsNone(form)

    def test_redeem_bad_code(self):
        self.loginUser()

        form = self.getForm()
        form['auth_code'] = 'abc123'
        response = form.submit().follow()

        self.assertEqual(response.request.GET['status'], 'invalid_code')

    def test_redeem_no_team(self):
        self.loginUser()
        access_key = self.addTeamAdminAccess(account=None)

        form = self.getForm()
        form['auth_code'] = 'abc123'
        response = form.submit().follow()

        self.assertEqual(response.request.GET['status'], 'invalid_code')

    def test_redeem_garbage_team(self):
        self.loginUser()
        access_key = self.addTeamAdminAccess(account=None)

        form = self.getForm()
        form['auth_code'] = 'abc123'
        form['team_number'] = 'meow'
        response = form.submit().follow()

        self.assertEqual(response.request.GET['status'], 'invalid_code')

    def test_redeem_bad_team(self):
        self.loginUser()
        access_key = self.addTeamAdminAccess(account=None)

        form = self.getForm()
        form['auth_code'] = 'abc123'
        form['team_number'] = '11245'
        response = form.submit().follow()

        self.assertEqual(response.request.GET['status'], 'invalid_code')

    def test_redeem_code(self):
        self.loginUser()
        access_key = self.addTeamAdminAccess(account=None)

        form = self.getForm()
        form['auth_code'] = 'abc123'
        form['team_number'] = '1124'
        response = form.submit().follow()

        access = access_key.get()
        self.assertEqual(response.request.GET['status'], 'success')
        self.assertEqual(self.account.key, access.account)

    def test_redeem_code_with_whitespace(self):
        self.loginUser()
        access_key = self.addTeamAdminAccess(account=None)

        form = self.getForm()
        form['auth_code'] = ' abc123 '
        form['team_number'] = '1124'
        response = form.submit().follow()

        access = access_key.get()
        self.assertEqual(response.request.GET['status'], 'success')
        self.assertEqual(self.account.key, access.account)

    def test_redeem_used_code(self):
        self.loginUser()
        access_key = self.addTeamAdminAccess(
            account=ndb.Key(Account, '*****@*****.**'))

        form = self.getForm()
        form['auth_code'] = 'abc123'
        form['team_number'] = '1124'
        response = form.submit().follow()

        self.assertEqual(response.request.GET['status'], 'code_used')

    def test_redeem_code_existing_link(self):
        self.loginUser()
        access_key = self.addTeamAdminAccess(account=None)

        form = self.getForm()
        form['auth_code'] = 'abc123'

        access = access_key.get()
        access.account = self.account.key
        access.put()

        response = form.submit().follow()

        self.assertEqual(response.request.GET['status'], 'already_linked')
コード例 #22
0
class TestApiTeamShow(unittest2.TestCase):

    # TODO: Add event_keys testing. -brandondean 10/21/2012
    def setUp(self):
        app = webapp2.WSGIApplication([(r'/', ApiTeamsShow)], 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=2010,
                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()

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

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

    def testTeamShow(self):
        response = self.testapp.get('/?teams=frc281', headers={"User-Agent": "tests"})

        team_dict = json.loads(response.body)
        self.assertTeamJson(team_dict[0])

    def testNonexistentTeam(self):
        response = self.testapp.get('/?teams=frc3141579265', headers={"User-Agent": "tests"}, status=404)

        self.assertEqual(response.status_int, 404)

    def test_validate_user_agent(self):
        response = self.testapp.get('/?teams=frc254', expect_errors=True)  # By default get() doesn't send a user agent
        self.assertEqual(response.status, "400 Bad Request")
        self.assertEqual(response.body, '{"Error": "User-Agent is a required header."}')
コード例 #23
0
class TestShortController(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()  # Prevent data from leaking between tests

        app = webapp2.WSGIApplication([
            RedirectRoute(r"/team/<team_number:[0-9]+>", TeamCanonical, "team-canonical"),
            RedirectRoute(r"/event/<event_key>", EventDetail, "event-detail"),
            RedirectRoute(r"/<:(frc)?><team_number:[0-9]+>", ShortTeamHandler, "short-team-canonical"),
            RedirectRoute(r"/<event_key:[0-9]{4}[a-z0-9]+>", ShortEventHandler, "short-event-detail"),
        ], debug=True)
        self.testapp = webtest.TestApp(app)

        self.team1 = Team(
            id="frc1",
            team_number=1,
        )
        self.team2 = Team(
            id="frc16",
            team_number=16,
        )
        self.team3 = Team(
            id="frc254",
            team_number=254,
        )
        self.team4 = Team(
            id="frc2521",
            team_number=2521,
        )

        self.event1 = Event(
            id="2017necmp",
            name="New England District Championship",
            event_type_enum=EventType.DISTRICT_CMP,
            short_name="New England",
            event_short="necmp",
            year=2017,
            end_date=datetime(2017, 03, 27),
            official=True,
            city="Hartford",
            state_prov="CT",
            country="USA",
            venue="Some Venue",
            venue_address="Some Venue, Hartford, CT, USA",
            timezone_id="America/New_York",
            start_date=datetime(2017, 03, 24),
            webcast_json="[{\"type\": \"twitch\", \"channel\": \"frcgamesense\"}]",
            website="http://www.firstsv.org"
        )

        self.event2 = Event(
            id="2017mndu2",
            name="Northern Lights Regional",
            event_type_enum=EventType.REGIONAL,
            short_name="Northern Lights",
            event_short="mndu2",
            year=2017,
            end_date=datetime(2017, 03, 04),
            official=True,
            city="Duluth",
            state_prov="MN",
            country="USA",
            venue="Duluth Entertainment Convention Center",
            venue_address="Duluth Entertainment Convention Center, Duluth, MN, USA",
            timezone_id="America/New_York",
            start_date=datetime(2017, 03, 1),
            webcast_json="[{\"type\": \"twitch\", \"channel\": \"frcgamesense\"}]",
            website="http://www.mnfirst.org"
        )

        self.team1.put()
        self.team2.put()
        self.team3.put()
        self.team4.put()
        self.event1.put()
        self.event2.put()

    def test_team_redirect(self):
        # 1 digit team
        response = self.testapp.get("/1", status="3*")
        response = response.follow()
        self.assertEqual(response.request.path, "/team/1")

        response = self.testapp.get("/frc1", status="3*")
        response = response.follow()
        self.assertEqual(response.request.path, "/team/1")

        # 2 digit team
        response = self.testapp.get("/16", status="3*")
        response = response.follow()
        self.assertEqual(response.request.path, "/team/16")

        response = self.testapp.get("/frc16", status="3*")
        response = response.follow()
        self.assertEqual(response.request.path, "/team/16")

        # 3 digit team
        response = self.testapp.get("/254", status="3*")
        response = response.follow()
        self.assertEqual(response.request.path, "/team/254")

        response = self.testapp.get("/frc254", status="3*")
        response = response.follow()
        self.assertEqual(response.request.path, "/team/254")

        # 4 digit team
        response = self.testapp.get("/2521", status="3*")
        response = response.follow()
        self.assertEqual(response.request.path, "/team/2521")

        response = self.testapp.get("/frc2521", status="3*")
        response = response.follow()
        self.assertEqual(response.request.path, "/team/2521")

    def test_event_redirect(self):
        # Normal event code
        response = self.testapp.get("/2017necmp", status="3*")
        response = response.follow()
        self.assertEqual(response.request.path, "/event/2017necmp")

        # Event code with numbers
        response = self.testapp.get("/2017mndu2", status="3*")
        response = response.follow()
        self.assertEqual(response.request.path, "/event/2017mndu2")

        # Non-existing event code
        response = self.testapp.get("/2017meow", status="3*")
        response = response.follow(expect_errors=True)
        self.assertEqual(response.request.path, "/event/2017meow")
        self.assertEqual(response.status_int, 404)

    def test_no_redirect(self):
        # Teams

        # Negative team number
        response = self.testapp.get("/-2521", status=404)
        self.assertEqual(response.status_int, 404)

        # Events

        # Semi-real year
        response = self.testapp.get("/217nytr", status=404)
        self.assertEqual(response.status_int, 404)
コード例 #24
0
class TestTeamManipulator(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(
        )  # Prevent data from leaking between tests

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

        self.old_team = Team(
            id="frc177",
            team_number=177,
            rookie_year=1996,
            first_tpid=61771,
            first_tpid_year=2012,
        )

        self.new_team = Team(
            id="frc177",
            team_number=177,
            rookie_year=1995,
            website="http://www.bobcatrobotics.org",
        )

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

    def assertMergedTeam(self, team):
        self.assertOldTeam(team)
        self.assertEqual(team.website, "http://www.bobcatrobotics.org")
        self.assertEqual(team.rookie_year, 1995)

    def assertOldTeam(self, team):
        self.assertEqual(team.first_tpid, 61771)
        self.assertEqual(team.first_tpid_year, 2012)
        self.assertEqual(team.key_name, "frc177")
        self.assertEqual(team.team_number, 177)

    def test_createOrUpdate(self):
        TeamManipulator.createOrUpdate(self.old_team)
        self.assertOldTeam(Team.get_by_id("frc177"))
        TeamManipulator.createOrUpdate(self.new_team)
        self.assertMergedTeam(Team.get_by_id("frc177"))

    def test_findOrSpawn(self):
        self.old_team.put()
        self.assertMergedTeam(TeamManipulator.findOrSpawn(self.new_team))

    def test_updateMerge(self):
        self.assertMergedTeam(
            TeamManipulator.updateMerge(self.new_team, self.old_team))

    def test_create_lots_of_teams(self):
        number = 500
        teams = [
            Team(id="frc%s" % team_number, team_number=team_number)
            for team_number in range(number)
        ]
        TeamManipulator.createOrUpdate(teams)

        team = Team.get_by_id("frc177")
        self.assertEqual(team.key_name, "frc177")
        self.assertEqual(team.team_number, 177)

        team = Team.get_by_id("frc%s" % (number - 1))
        self.assertEqual(team.key_name, "frc%s" % (number - 1))
        self.assertEqual(team.team_number, number - 1)
コード例 #25
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.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])
コード例 #26
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])
コード例 #27
0
class TestTeamListApiController(unittest2.TestCase):
    def setUp(self):
        app = webapp2.WSGIApplication(
            [webapp2.Route(r"/<page_num:([0-9]*)>", ApiTeamListController, 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()
        ndb.get_context().clear_cache()  # Prevent data from leaking between tests

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

        self.team1 = Team(
            id="frc123",
            name="SomeName",
            team_number=123,
            nickname="SomeNickname",
            city="San Jose",
            state_prov="CA",
            country="USA",
            website="www.website.com",
        )

        self.team2 = Team(
            id="frc4567",
            name="SomeName",
            team_number=4567,
            nickname="SomeNickname",
            city="San Jose",
            state_prov="CA",
            country="USA",
            website="www.website.com",
        )

        self.team1.put()
        self.team2.put()

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

    def assertTeam1Json(self, team):
        self.assertEqual(team["key"], self.team1.key_name)
        self.assertEqual(team["name"], self.team1.name)
        self.assertEqual(team["team_number"], self.team1.team_number)

    def assertTeam2Json(self, team):
        self.assertEqual(team["key"], self.team2.key_name)
        self.assertEqual(team["name"], self.team2.name)
        self.assertEqual(team["team_number"], self.team2.team_number)

    def testTeamListApi(self):
        response = self.testapp.get("/0", headers={"X-TBA-App-Id": "tba-tests:team_list-controller-test:v01"})
        team_list = json.loads(response.body)
        self.assertTeam1Json(team_list[0])

        response = self.testapp.get("/9", headers={"X-TBA-App-Id": "tba-tests:team_list-controller-test:v01"})
        team_list = json.loads(response.body)
        self.assertTeam2Json(team_list[0])

        response = self.testapp.get("/10", headers={"X-TBA-App-Id": "tba-tests:team_list-controller-test:v01"})
        team_list = json.loads(response.body)
        self.assertEqual(team_list, [])
コード例 #28
0
class TestTeamController(unittest2.TestCase):
    def setUp(self):
        self.testbed = testbed.Testbed()
        self.testbed.activate()
        self.testbed.init_datastore_v3_stub()
        self.testbed.init_memcache_stub()
        app = webapp2.WSGIApplication([
            RedirectRoute(r'/team/<team_number:[0-9]+>', TeamCanonical, 'team-canonical'),
            RedirectRoute(r'/team/<team_number:[0-9]+>/<year:[0-9]+>', TeamDetail, 'team-detail'),
            RedirectRoute(r'/team/<team_number:[0-9]+>/history', TeamHistory, 'team-history'),
            RedirectRoute(r'/teams/<page:[0-9]+>', TeamList, 'team-list-year'),
            RedirectRoute(r'/teams', TeamList, 'team-list'),
        ])
        self.testapp = webtest.TestApp(app)

        self.team = Team(
                id="frc1124",
                name="Really Long Name",
                team_number=1124,
                rookie_year=2003,
                nickname="The UberBots",
                city="Avon",
                state_prov="CT",
                country="USA",
                website="www.uberbots.org",
                motto="This is a motto",
        )
        self.event = Event(
                id="2016necmp",
                name="New England District Championship",
                event_type_enum=EventType.DISTRICT_CMP,
                short_name="New England",
                event_short="necmp",
                year=2016,
                end_date=datetime(2016, 03, 27),
                official=True,
                city='Hartford',
                state_prov='CT',
                country='USA',
                venue="Some Venue",
                venue_address="Some Venue, Hartford, CT, USA",
                timezone_id="America/New_York",
                start_date=datetime(2016, 03, 24),
        )
        self.event_team = EventTeam(
                id="2016necmp_frc1124",
                team=self.team.key,
                event=self.event.key,
                year=2016
        )
        self.event2 = Event(
                id="2015necmp",
                name="New England District Championship",
                event_type_enum=EventType.DISTRICT_CMP,
                short_name="New England",
                event_short="necmp",
                year=2015,
                end_date=datetime(2015, 03, 27),
                official=True,
                city='Hartford',
                state_prov='CT',
                country='USA',
                venue="Some Venue",
                venue_address="Some Venue, Hartford, CT, USA",
                timezone_id="America/New_York",
                start_date=datetime(2015, 03, 24),
        )
        self.event_team2 = EventTeam(
                id="2015necmp_frc1124",
                team=self.team.key,
                event=self.event2.key,
                year=2015
        )
        self.event_team.put()
        self.team.put()
        self.event.put()
        self.event_team.put()
        self.event2.put()
        self.event_team2.put()

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

    def testTeamListDefaultPage(self):
        response = self.testapp.get("/teams")
        self.assertEqual(response.status_int, 200)

    def testTeamListExplicitPage(self):
        response = self.testapp.get("/teams/1")
        self.assertEqual(response.status_int, 200)

    def testTeamListBadPage(self):
        response = self.testapp.get("/teams/19", status=404)
        self.assertEqual(response.status_int, 404)

    def testTeamCanonical(self):
        response = self.testapp.get("/team/1124")
        self.assertEqual(response.status_int, 200)

    def testBadTeamCanonical(self):
        response = self.testapp.get("/team/1337", status=404)
        self.assertEqual(response.status_int, 404)

    def testTeamDetail(self):
        response = self.testapp.get("/team/1124/2016")
        self.assertEqual(response.status_int, 200)

    # Because 2015 is special :/
    def testTeamDetail2015(self):
        response = self.testapp.get("/team/1124/2015")
        self.assertEqual(response.status_int, 200)

    def testTeamDetailBadYear(self):
        response = self.testapp.get("/team/1124/2014", status=404)
        self.assertEqual(response.status_int, 404)

    def testBadTeamDetail(self):
        response = self.testapp.get("/team/1337/2016", status=404)
        self.assertEqual(response.status_int, 404)

    def testTeamHistory(self):
        response = self.testapp.get("/team/1124/history")
        self.assertEqual(response.status_int, 200)

    def testBadTeamHistory(self):
        response = self.testapp.get("/team/1337/history", status=404)
        self.assertEqual(response.status_int, 404)
コード例 #29
0
class TestTeamAdminRedeem(unittest2.TestCase):
    def setUp(self):
        self.policy = datastore_stub_util.PseudoRandomHRConsistencyPolicy(
            probability=1)
        self.testbed = testbed.Testbed()
        self.testbed.activate()
        self.testbed.init_datastore_v3_stub(consistency_policy=self.policy)
        self.testbed.init_memcache_stub()
        self.testbed.init_user_stub()
        self.testbed.init_urlfetch_stub()
        self.testbed.init_taskqueue_stub(_all_queues_valid=True)
        ndb.get_context().clear_cache(
        )  # Prevent data from leaking between tests

        app = webapp2.WSGIApplication([
            RedirectRoute(r'/mod/redeem',
                          TeamAdminRedeem,
                          'team-admin',
                          strict_slash=True),
        ])
        self.testapp = webtest.TestApp(app)

        self.team = Team(
            id="frc1124",
            name="Team",
            team_number=1124,
        )
        self.team.put()
        self.now = datetime.datetime.now()

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

    def loginUser(self):
        self.testbed.setup_env(user_email="*****@*****.**",
                               user_id="123",
                               user_is_admin='0',
                               overwrite=True)

        self.account = Account.get_or_insert("123",
                                             email="*****@*****.**",
                                             registered=True)

    def addTeamAdminAccess(self, account, team_number=1124):
        access = TeamAdminAccess(
            id="test_access",
            access_code="abc123",
            team_number=team_number,
            year=self.now.year,
            expiration=self.now + datetime.timedelta(days=1),
            account=account,
        )
        return access.put()

    def getForm(self):
        response = self.testapp.get('/mod/redeem')
        self.assertEqual(response.status_int, 200)

        form = response.forms.get('redeem', None)
        self.assertIsNotNone(form)
        return form

    def test_login_redirect(self):
        response = self.testapp.get('/mod/redeem', status='3*')
        response = response.follow(expect_errors=True)
        self.assertTrue(
            response.request.path.startswith("/account/login_required"))

    def test_cant_redeem_with_code_linked(self):
        self.loginUser()
        access_key = self.addTeamAdminAccess(account=self.account.key)
        response = self.testapp.get('/mod/redeem')
        self.assertEqual(response.status_int, 200)

        # If there's an existing code linked, the form shouldn't render
        form = response.forms.get('redeem', None)
        self.assertIsNone(form)

    def test_redeem_bad_code(self):
        self.loginUser()

        form = self.getForm()
        form['auth_code'] = 'abc123'
        response = form.submit().follow()

        self.assertEqual(response.request.GET['status'], 'invalid_code')

    def test_redeem_no_team(self):
        self.loginUser()
        access_key = self.addTeamAdminAccess(account=None)

        form = self.getForm()
        form['auth_code'] = 'abc123'
        response = form.submit().follow()

        self.assertEqual(response.request.GET['status'], 'invalid_code')

    def test_redeem_garbage_team(self):
        self.loginUser()
        access_key = self.addTeamAdminAccess(account=None)

        form = self.getForm()
        form['auth_code'] = 'abc123'
        form['team_number'] = 'meow'
        response = form.submit().follow()

        self.assertEqual(response.request.GET['status'], 'invalid_code')

    def test_redeem_bad_team(self):
        self.loginUser()
        access_key = self.addTeamAdminAccess(account=None)

        form = self.getForm()
        form['auth_code'] = 'abc123'
        form['team_number'] = '11245'
        response = form.submit().follow()

        self.assertEqual(response.request.GET['status'], 'invalid_code')

    def test_redeem_code(self):
        self.loginUser()
        access_key = self.addTeamAdminAccess(account=None)

        form = self.getForm()
        form['auth_code'] = 'abc123'
        form['team_number'] = '1124'
        response = form.submit().follow()

        access = access_key.get()
        self.assertEqual(response.request.GET['status'], 'success')
        self.assertEqual(self.account.key, access.account)

    def test_redeem_used_code(self):
        self.loginUser()
        access_key = self.addTeamAdminAccess(
            account=ndb.Key(Account, '*****@*****.**'))

        form = self.getForm()
        form['auth_code'] = 'abc123'
        form['team_number'] = '1124'
        response = form.submit().follow()

        self.assertEqual(response.request.GET['status'], 'code_used')

    def test_redeem_code_existing_link(self):
        self.loginUser()
        access_key = self.addTeamAdminAccess(account=None)

        form = self.getForm()
        form['auth_code'] = 'abc123'

        access = access_key.get()
        access.account = self.account.key
        access.put()

        response = form.submit().follow()

        self.assertEqual(response.request.GET['status'], 'already_linked')
コード例 #30
0
class TestSuggestTeamAdminSuggestionReview(unittest2.TestCase):
    def setUp(self):
        self.policy = datastore_stub_util.PseudoRandomHRConsistencyPolicy(
            probability=1)
        self.testbed = testbed.Testbed()
        self.testbed.activate()
        self.testbed.init_datastore_v3_stub(consistency_policy=self.policy)
        self.testbed.init_memcache_stub()
        self.testbed.init_user_stub()
        self.testbed.init_urlfetch_stub()
        self.testbed.init_taskqueue_stub(_all_queues_valid=True)
        ndb.get_context().clear_cache(
        )  # Prevent data from leaking between tests

        app = webapp2.WSGIApplication([
            RedirectRoute(
                r'/mod', TeamAdminDashboard, 'team-admin', strict_slash=True),
            RedirectRoute(r'/suggest/cad/review',
                          SuggestDesignsReviewController,
                          'review-designs',
                          strict_slash=True),
            RedirectRoute(r'/suggest/team/media/review',
                          SuggestTeamMediaReviewController,
                          'review-media',
                          strict_slash=True),
            RedirectRoute(r'/suggest/team/social/review',
                          SuggestSocialMediaReviewController,
                          'review-social',
                          strict_slash=True),
        ],
                                      debug=True)
        self.testapp = webtest.TestApp(app)

        self.team = Team(
            id="frc1124",
            name="Team",
            team_number=1124,
        )
        self.team.put()
        self.now = datetime.datetime.now()

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

    def loginUser(self):
        self.testbed.setup_env(user_email="*****@*****.**",
                               user_id="123",
                               user_is_admin='0',
                               overwrite=True)

        self.account = Account.get_or_insert("123",
                                             email="*****@*****.**",
                                             registered=True)

    def giveTeamAdminAccess(self, expiration_days=1):
        access = TeamAdminAccess(
            id="test_access",
            team_number=1124,
            year=self.now.year,
            expiration=self.now + datetime.timedelta(days=expiration_days),
            account=self.account.key,
        )
        return access.put()

    def createMediaSuggestion(self):
        status = SuggestionCreator.createTeamMediaSuggestion(
            self.account.key, 'http://imgur.com/foobar', 'frc1124',
            self.now.year)
        self.assertEqual(status[0], 'success')
        return Suggestion.query().fetch(keys_only=True)[0].id()

    def createSocialMediaSuggestion(self):
        status = SuggestionCreator.createTeamMediaSuggestion(
            self.account.key, 'http://twitter.com/frc1124', 'frc1124', None,
            None, True)
        self.assertEqual(status[0], 'success')
        return Suggestion.query().fetch(keys_only=True)[0].id()

    def createDesignSuggestion(self):
        status = SuggestionCreator.createTeamMediaSuggestion(
            self.account.key,
            'https://grabcad.com/library/2016-148-robowranglers-1', 'frc1124',
            '2016')
        self.assertEqual(status[0], 'success')
        return Suggestion.render_media_key_name('2016', 'team', 'frc1124',
                                                'grabcad',
                                                '2016-148-robowranglers-1')

    def getSuggestionForm(self, suggestion_type):
        response = self.testapp.get('/mod')
        self.assertEqual(response.status_int, 200)

        form = response.forms.get('review_{}'.format(suggestion_type), None)
        self.assertIsNotNone(form)
        return form

    def getMediaAdminForm(self, action, media_key_name):
        response = self.testapp.get('/mod')
        self.assertEqual(response.status_int, 200)

        form = response.forms.get('{}_{}'.format(action, media_key_name), None)
        self.assertIsNotNone(form)
        return form

    def test_login_redirect(self):
        response = self.testapp.get('/mod', status='3*')
        response = response.follow(expect_errors=True)
        self.assertTrue(
            response.request.path.startswith("/account/login_required"))

    def test_no_access(self):
        self.loginUser()
        response = self.testapp.get('/mod', status='403', expect_errors=True)
        self.assertEqual(response.status_int, 403)

    def test_expired_access(self):
        self.loginUser()
        self.giveTeamAdminAccess(expiration_days=-1)
        response = self.testapp.get('/mod', status='403', expect_errors=True)
        self.assertEqual(response.status_int, 403)

    def test_nothing_to_review(self):
        self.loginUser()
        self.giveTeamAdminAccess()
        response = self.testapp.get('/mod')
        self.assertEqual(response.status_int, 200)

    """
    Test moderating existing media items (remove reference, manage preferred)
    """

    def test_manage_media_expired_auth(self):
        self.loginUser()
        access_key = self.giveTeamAdminAccess()

        team_reference = Media.create_reference('team', 'frc1124')
        suggestion_id = self.createSocialMediaSuggestion()
        suggestion = Suggestion.get_by_id(suggestion_id)
        media = MediaCreator.create_media_model(suggestion, team_reference)
        media_id = media.put()
        self.assertTrue(ndb.Key(Team, 'frc1124') in media.references)

        form = self.getMediaAdminForm('remove_media', media_id.id())
        access = access_key.get()
        access.expiration += datetime.timedelta(days=-7)
        access.put()

        response = form.submit(status='403', expect_errors=True)
        self.assertEqual(response.status_int, 403)

    def test_remove_social_media_reference(self):
        self.loginUser()
        self.giveTeamAdminAccess()

        team_reference = Media.create_reference('team', 'frc1124')
        suggestion_id = self.createSocialMediaSuggestion()
        suggestion = Suggestion.get_by_id(suggestion_id)
        media = MediaCreator.create_media_model(suggestion, team_reference)
        media_id = media.put()
        self.assertTrue(ndb.Key(Team, 'frc1124') in media.references)

        form = self.getMediaAdminForm('remove_media', media_id.id())
        response = form.submit().follow()
        self.assertEqual(response.status_int, 301)

        media = media_id.get()
        self.assertFalse(team_reference in media.references)

    def test_remove_media_reference(self):
        self.loginUser()
        self.giveTeamAdminAccess()

        team_reference = Media.create_reference('team', 'frc1124')
        suggestion_id = self.createMediaSuggestion()
        suggestion = Suggestion.get_by_id(suggestion_id)
        media = MediaCreator.create_media_model(suggestion, team_reference)
        media_id = media.put()
        self.assertTrue(ndb.Key(Team, 'frc1124') in media.references)

        form = self.getMediaAdminForm('remove_media', media_id.id())
        response = form.submit().follow()
        self.assertEqual(response.status_int, 301)

        media = media_id.get()
        self.assertFalse(team_reference in media.references)

    def test_make_media_preferred(self):
        self.loginUser()
        self.giveTeamAdminAccess()

        team_reference = Media.create_reference('team', 'frc1124')
        suggestion_id = self.createMediaSuggestion()
        suggestion = Suggestion.get_by_id(suggestion_id)
        media = MediaCreator.create_media_model(suggestion, team_reference)
        media_id = media.put()
        self.assertTrue(ndb.Key(Team, 'frc1124') in media.references)

        form = self.getMediaAdminForm('add_preferred', media_id.id())
        response = form.submit().follow()
        self.assertEqual(response.status_int, 301)

        media = media_id.get()
        self.assertTrue(team_reference in media.references)
        self.assertTrue(team_reference in media.preferred_references)

    def test_remove_media_preferred(self):
        self.loginUser()
        self.giveTeamAdminAccess()

        team_reference = Media.create_reference('team', 'frc1124')
        suggestion_id = self.createMediaSuggestion()
        suggestion = Suggestion.get_by_id(suggestion_id)
        media = MediaCreator.create_media_model(suggestion, team_reference)
        media.preferred_references.append(team_reference)
        media_id = media.put()
        self.assertTrue(ndb.Key(Team, 'frc1124') in media.references)

        form = self.getMediaAdminForm('remove_preferred', media_id.id())
        response = form.submit().follow()
        self.assertEqual(response.status_int, 301)

        media = media_id.get()
        self.assertTrue(team_reference in media.references)
        self.assertFalse(team_reference in media.preferred_references)

    """
    Test accepting/rejecting suggestions for the given team
    These are basically the same tests as the individual suggestion review
    controller tests, but since we post to that same URL, we'll want to make
    sure everything works from both paths
    """

    def test_accept_team_media_expired_auth(self):
        self.loginUser()
        access_key = self.giveTeamAdminAccess()

        suggestion_id = self.createMediaSuggestion()
        form = self.getSuggestionForm('media')
        form['accept_reject-{}'.format(suggestion_id)] = 'accept::{}'.format(
            suggestion_id)
        access = access_key.get()
        access.expiration += datetime.timedelta(days=-7)
        access.put()
        response = form.submit().follow(expect_errors=True)
        self.assertEqual(response.request.path, "/")

        suggestion = Suggestion.get_by_id(suggestion_id)
        self.assertIsNotNone(suggestion)
        self.assertEqual(suggestion.review_state, Suggestion.REVIEW_PENDING)

    def test_reject_team_media_expired_auth(self):
        self.loginUser()
        access_key = self.giveTeamAdminAccess()

        suggestion_id = self.createMediaSuggestion()
        form = self.getSuggestionForm('media')
        form['accept_reject-{}'.format(suggestion_id)] = 'reject::{}'.format(
            suggestion_id)
        access = access_key.get()
        access.expiration += datetime.timedelta(days=-7)
        access.put()
        response = form.submit().follow(expect_errors=True)
        self.assertEqual(response.request.path, "/")

        suggestion = Suggestion.get_by_id(suggestion_id)
        self.assertIsNotNone(suggestion)
        self.assertEqual(suggestion.review_state, Suggestion.REVIEW_PENDING)

    def test_accept_team_media(self):
        self.loginUser()
        self.giveTeamAdminAccess()

        suggestion_id = self.createMediaSuggestion()
        form = self.getSuggestionForm('media')
        form['accept_reject-{}'.format(suggestion_id)] = 'accept::{}'.format(
            suggestion_id)
        response = form.submit().follow()
        self.assertEqual(response.status_int, 200)

        suggestion = Suggestion.get_by_id(suggestion_id)
        self.assertIsNotNone(suggestion)
        self.assertEqual(suggestion.review_state, Suggestion.REVIEW_ACCEPTED)

        medias = Media.query().fetch()
        self.assertEqual(len(medias), 1)
        media = medias[0]
        self.assertIsNotNone(media)
        self.assertEqual(media.foreign_key, 'foobar')
        self.assertEqual(media.media_type_enum, MediaType.IMGUR)
        self.assertTrue(ndb.Key(Team, 'frc1124') in media.references)

    def test_accept_team_media_as_preferred(self):
        self.loginUser()
        self.giveTeamAdminAccess()

        suggestion_id = self.createMediaSuggestion()
        form = self.getSuggestionForm('media')
        form['accept_reject-{}'.format(suggestion_id)] = 'accept::{}'.format(
            suggestion_id)
        form['preferred_keys[]'] = ['preferred::{}'.format(suggestion_id)]
        response = form.submit().follow()
        self.assertEqual(response.status_int, 200)

        suggestion = Suggestion.get_by_id(suggestion_id)
        self.assertIsNotNone(suggestion)
        self.assertEqual(suggestion.review_state, Suggestion.REVIEW_ACCEPTED)

        medias = Media.query().fetch()
        self.assertEqual(len(medias), 1)
        media = medias[0]
        self.assertIsNotNone(media)
        self.assertEqual(media.foreign_key, 'foobar')
        self.assertEqual(media.media_type_enum, MediaType.IMGUR)
        self.assertTrue(ndb.Key(Team, 'frc1124') in media.preferred_references)

    def test_reject_team_media(self):
        self.loginUser()
        self.giveTeamAdminAccess()

        suggestion_id = self.createMediaSuggestion()
        form = self.getSuggestionForm('media')
        form['accept_reject-{}'.format(suggestion_id)] = 'reject::{}'.format(
            suggestion_id)
        response = form.submit().follow()
        self.assertEqual(response.status_int, 200)

        suggestion = Suggestion.get_by_id(suggestion_id)
        self.assertIsNotNone(suggestion)
        self.assertEqual(suggestion.review_state, Suggestion.REVIEW_REJECTED)

        medias = Media.query().fetch()
        self.assertEqual(len(medias), 0)

    def test_accept_social_media_expired_auth(self):
        self.loginUser()
        access_key = self.giveTeamAdminAccess()

        suggestion_id = self.createSocialMediaSuggestion()
        form = self.getSuggestionForm('social-media')
        form['accept_reject-{}'.format(suggestion_id)] = 'accept::{}'.format(
            suggestion_id)
        access = access_key.get()
        access.expiration += datetime.timedelta(days=-7)
        access.put()
        response = form.submit().follow(expect_errors=True)
        self.assertEqual(response.request.path, "/")

        suggestion = Suggestion.get_by_id(suggestion_id)
        self.assertIsNotNone(suggestion)
        self.assertEqual(suggestion.review_state, Suggestion.REVIEW_PENDING)

    def test_reject_social_media_expired_auth(self):
        self.loginUser()
        access_key = self.giveTeamAdminAccess()

        suggestion_id = self.createSocialMediaSuggestion()
        form = self.getSuggestionForm('social-media')
        form['accept_reject-{}'.format(suggestion_id)] = 'reject::{}'.format(
            suggestion_id)
        access = access_key.get()
        access.expiration += datetime.timedelta(days=-7)
        access.put()
        response = form.submit().follow(expect_errors=True)
        self.assertEqual(response.request.path, "/")

        suggestion = Suggestion.get_by_id(suggestion_id)
        self.assertIsNotNone(suggestion)
        self.assertEqual(suggestion.review_state, Suggestion.REVIEW_PENDING)

    def test_accept_social_media(self):
        self.loginUser()
        self.giveTeamAdminAccess()

        suggestion_id = self.createSocialMediaSuggestion()
        form = self.getSuggestionForm('social-media')
        form['accept_reject-{}'.format(suggestion_id)] = 'accept::{}'.format(
            suggestion_id)
        response = form.submit().follow()
        self.assertEqual(response.status_int, 200)

        suggestion = Suggestion.get_by_id(suggestion_id)
        self.assertIsNotNone(suggestion)
        self.assertEqual(suggestion.review_state, Suggestion.REVIEW_ACCEPTED)

        medias = Media.query().fetch()
        self.assertEqual(len(medias), 1)
        media = medias[0]
        self.assertIsNotNone(media)
        self.assertEqual(media.foreign_key, 'frc1124')
        self.assertEqual(media.media_type_enum, MediaType.TWITTER_PROFILE)
        self.assertTrue(ndb.Key(Team, 'frc1124') in media.references)

    def test_reject_social_media(self):
        self.loginUser()
        self.giveTeamAdminAccess()

        suggestion_id = self.createSocialMediaSuggestion()
        form = self.getSuggestionForm('social-media')
        form['accept_reject-{}'.format(suggestion_id)] = 'reject::{}'.format(
            suggestion_id)
        response = form.submit().follow()
        self.assertEqual(response.status_int, 200)

        suggestion = Suggestion.get_by_id(suggestion_id)
        self.assertIsNotNone(suggestion)
        self.assertEqual(suggestion.review_state, Suggestion.REVIEW_REJECTED)

        medias = Media.query().fetch()
        self.assertEqual(len(medias), 0)

    def test_accept_robot_design_expired_auth(self):
        self.loginUser()
        access_key = self.giveTeamAdminAccess()

        suggestion_id = self.createDesignSuggestion()
        form = self.getSuggestionForm('robot')
        form['accept_reject-{}'.format(suggestion_id)] = 'accept::{}'.format(
            suggestion_id)
        access = access_key.get()
        access.expiration += datetime.timedelta(days=-7)
        access.put()
        response = form.submit().follow(expect_errors=True)
        self.assertEqual(response.request.path, "/")

        suggestion = Suggestion.get_by_id(suggestion_id)
        self.assertIsNotNone(suggestion)
        self.assertEqual(suggestion.review_state, Suggestion.REVIEW_PENDING)

    def test_reject_robot_design_expired_auth(self):
        self.loginUser()
        access_key = self.giveTeamAdminAccess()

        suggestion_id = self.createDesignSuggestion()
        form = self.getSuggestionForm('robot')
        form['accept_reject-{}'.format(suggestion_id)] = 'reject::{}'.format(
            suggestion_id)
        access = access_key.get()
        access.expiration += datetime.timedelta(days=-7)
        access.put()
        response = form.submit().follow(expect_errors=True)
        self.assertEqual(response.request.path, "/")

        suggestion = Suggestion.get_by_id(suggestion_id)
        self.assertIsNotNone(suggestion)
        self.assertEqual(suggestion.review_state, Suggestion.REVIEW_PENDING)

    def test_accept_robot_design(self):
        self.loginUser()
        self.giveTeamAdminAccess()

        suggestion_id = self.createDesignSuggestion()
        form = self.getSuggestionForm('robot')
        form['accept_reject-{}'.format(suggestion_id)] = 'accept::{}'.format(
            suggestion_id)
        response = form.submit().follow()
        self.assertEqual(response.status_int, 200)

        # Make sure the Media object gets created
        media = Media.query().fetch()[0]
        self.assertIsNotNone(media)
        self.assertEqual(media.media_type_enum, MediaType.GRABCAD)
        self.assertEqual(media.year, 2016)
        self.assertListEqual(media.references, [self.team.key])

        # Make sure we mark the Suggestion as REVIEWED
        suggestion = Suggestion.get_by_id(suggestion_id)
        self.assertIsNotNone(suggestion)
        self.assertEqual(suggestion.review_state, Suggestion.REVIEW_ACCEPTED)

    def test_reject_robot_design(self):
        self.loginUser()
        self.giveTeamAdminAccess()

        suggestion_id = self.createDesignSuggestion()
        form = self.getSuggestionForm('robot')
        form['accept_reject-{}'.format(suggestion_id)] = 'reject::{}'.format(
            suggestion_id)
        response = form.submit().follow()
        self.assertEqual(response.status_int, 200)

        # Make sure the Media object doesn't get created
        medias = Media.query().fetch(keys_only=True)
        self.assertEqual(len(medias), 0)

        # Make sure we mark the Suggestion as REVIEWED
        suggestion = Suggestion.get_by_id(suggestion_id)
        self.assertIsNotNone(suggestion)
        self.assertEqual(suggestion.review_state, Suggestion.REVIEW_REJECTED)
コード例 #31
0
class TestTeamEventsApiController(unittest2.TestCase):

    def setUp(self):
        app = webapp2.WSGIApplication([webapp2.Route(r'/<team_key:>/<year:>', ApiTeamEventsController, 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(root_path=".")

        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=2010
        )
        self.event_team.put()

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

    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 testTeamApi(self):
        response = self.testapp.get('/frc281/2010', headers={"X-TBA-App-Id": "tba-tests:team-controller-test:v01"})

        event_dict = json.loads(response.body)
        self.assertEventJson(event_dict[0])
コード例 #32
0
class TestSuggestTeamAdminSuggestionReview(unittest2.TestCase):
    def setUp(self):
        self.policy = datastore_stub_util.PseudoRandomHRConsistencyPolicy(
            probability=1)
        self.testbed = testbed.Testbed()
        self.testbed.activate()
        self.testbed.init_datastore_v3_stub(consistency_policy=self.policy)
        self.testbed.init_memcache_stub()
        self.testbed.init_user_stub()
        self.testbed.init_urlfetch_stub()
        self.testbed.init_taskqueue_stub(_all_queues_valid=True)
        ndb.get_context().clear_cache(
        )  # Prevent data from leaking between tests

        app = webapp2.WSGIApplication(
            [
                RedirectRoute(
                    r'/mod',
                    TeamAdminDashboard,
                    'team-admin',
                    strict_slash=True),
                RedirectRoute(
                    r'/mod/redeem',
                    TeamAdminRedeem,
                    'team-admin',
                    strict_slash=True),
                RedirectRoute(
                    r'/suggest/cad/review',
                    SuggestDesignsReviewController,
                    'review-designs',
                    strict_slash=True),
                RedirectRoute(
                    r'/suggest/team/media/review',
                    SuggestTeamMediaReviewController,
                    'review-media',
                    strict_slash=True),
                RedirectRoute(
                    r'/suggest/team/social/review',
                    SuggestSocialMediaReviewController,
                    'review-social',
                    strict_slash=True),
            ],
            debug=True)
        self.testapp = webtest.TestApp(app)

        self.team = Team(
            id="frc1124",
            name="Team",
            team_number=1124,
        )
        self.team.put()
        self.now = datetime.datetime.now()

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

    def loginUser(self):
        self.testbed.setup_env(
            user_email="*****@*****.**",
            user_id="123",
            user_is_admin='0',
            overwrite=True)

        self.account = Account.get_or_insert(
            "123", email="*****@*****.**", registered=True)

    def giveTeamAdminAccess(self, expiration_days=1):
        access = TeamAdminAccess(
            id="test_access",
            team_number=1124,
            year=self.now.year,
            expiration=self.now + datetime.timedelta(days=expiration_days),
            account=self.account.key,
        )
        return access.put()

    def createMediaSuggestion(self):
        status = SuggestionCreator.createTeamMediaSuggestion(
            self.account.key, 'http://imgur.com/foobar', 'frc1124',
            self.now.year)
        self.assertEqual(status[0], 'success')
        return Suggestion.query().fetch(keys_only=True)[0].id()

    def createSocialMediaSuggestion(self):
        status = SuggestionCreator.createTeamMediaSuggestion(
            self.account.key, 'http://twitter.com/frc1124', 'frc1124', None,
            None, True)
        self.assertEqual(status[0], 'success')
        return Suggestion.query().fetch(keys_only=True)[0].id()

    def createDesignSuggestion(self):
        status = SuggestionCreator.createTeamMediaSuggestion(
            self.account.key,
            'https://grabcad.com/library/2016-148-robowranglers-1', 'frc1124',
            '2016')
        self.assertEqual(status[0], 'success')
        return Suggestion.render_media_key_name(
            '2016', 'team', 'frc1124', 'grabcad', '2016-148-robowranglers-1')

    def getSuggestionForm(self, suggestion_type):
        response = self.testapp.get('/mod')
        self.assertEqual(response.status_int, 200)

        form = response.forms.get('review_{}'.format(suggestion_type), None)
        self.assertIsNotNone(form)
        return form

    def getMediaAdminForm(self, action, media_key_name):
        response = self.testapp.get('/mod')
        self.assertEqual(response.status_int, 200)

        form = response.forms.get('{}_{}'.format(action, media_key_name), None)
        self.assertIsNotNone(form)
        return form

    def getTeamInfoForm(self, team_number):
        response = self.testapp.get('/mod')
        self.assertEqual(response.status_int, 200)

        form = response.forms.get('team-info-frc{}'.format(team_number), None)
        self.assertIsNotNone(form)
        return form

    def test_login_redirect(self):
        response = self.testapp.get('/mod', status='3*')
        response = response.follow(expect_errors=True)
        self.assertTrue(
            response.request.path.startswith("/account/login_required"))

    def test_no_access(self):
        self.loginUser()
        response = self.testapp.get('/mod', status='3*').follow()
        self.assertEqual(response.status_int, 200)
        self.assertEqual(response.request.path, "/mod/redeem")

    def test_expired_access(self):
        self.loginUser()
        self.giveTeamAdminAccess(expiration_days=-1)
        response = self.testapp.get('/mod', status='3*').follow()
        self.assertEqual(response.status_int, 200)
        self.assertEqual(response.request.path, "/mod/redeem")

    def test_nothing_to_review(self):
        self.loginUser()
        self.giveTeamAdminAccess()
        response = self.testapp.get('/mod')
        self.assertEqual(response.status_int, 200)

    """
    Test moderating existing media items (remove reference, manage preferred)
    """

    def test_manage_media_expired_auth(self):
        self.loginUser()
        access_key = self.giveTeamAdminAccess()

        team_reference = Media.create_reference('team', 'frc1124')
        suggestion_id = self.createSocialMediaSuggestion()
        suggestion = Suggestion.get_by_id(suggestion_id)
        media = MediaCreator.create_media_model(suggestion, team_reference)
        media_id = media.put()
        self.assertTrue(ndb.Key(Team, 'frc1124') in media.references)

        form = self.getMediaAdminForm('remove_media', media_id.id())
        access = access_key.get()
        access.expiration += datetime.timedelta(days=-7)
        access.put()

        response = form.submit(status='403', expect_errors=True)
        self.assertEqual(response.status_int, 403)

    def test_remove_social_media_reference(self):
        self.loginUser()
        self.giveTeamAdminAccess()

        team_reference = Media.create_reference('team', 'frc1124')
        suggestion_id = self.createSocialMediaSuggestion()
        suggestion = Suggestion.get_by_id(suggestion_id)
        media = MediaCreator.create_media_model(suggestion, team_reference)
        media_id = media.put()
        self.assertTrue(ndb.Key(Team, 'frc1124') in media.references)

        form = self.getMediaAdminForm('remove_media', media_id.id())
        response = form.submit().follow()
        self.assertEqual(response.status_int, 301)

        media = media_id.get()
        self.assertFalse(team_reference in media.references)

    def test_remove_media_reference(self):
        self.loginUser()
        self.giveTeamAdminAccess()

        team_reference = Media.create_reference('team', 'frc1124')
        suggestion_id = self.createMediaSuggestion()
        suggestion = Suggestion.get_by_id(suggestion_id)
        media = MediaCreator.create_media_model(suggestion, team_reference)
        media_id = media.put()
        self.assertTrue(ndb.Key(Team, 'frc1124') in media.references)

        form = self.getMediaAdminForm('remove_media', media_id.id())
        response = form.submit().follow()
        self.assertEqual(response.status_int, 301)

        media = media_id.get()
        self.assertFalse(team_reference in media.references)

    def test_make_media_preferred(self):
        self.loginUser()
        self.giveTeamAdminAccess()

        team_reference = Media.create_reference('team', 'frc1124')
        suggestion_id = self.createMediaSuggestion()
        suggestion = Suggestion.get_by_id(suggestion_id)
        media = MediaCreator.create_media_model(suggestion, team_reference)
        media_id = media.put()
        self.assertTrue(ndb.Key(Team, 'frc1124') in media.references)

        form = self.getMediaAdminForm('add_preferred', media_id.id())
        response = form.submit().follow()
        self.assertEqual(response.status_int, 301)

        media = media_id.get()
        self.assertTrue(team_reference in media.references)
        self.assertTrue(team_reference in media.preferred_references)

    def test_remove_media_preferred(self):
        self.loginUser()
        self.giveTeamAdminAccess()

        team_reference = Media.create_reference('team', 'frc1124')
        suggestion_id = self.createMediaSuggestion()
        suggestion = Suggestion.get_by_id(suggestion_id)
        media = MediaCreator.create_media_model(suggestion, team_reference)
        media.preferred_references.append(team_reference)
        media_id = media.put()
        self.assertTrue(ndb.Key(Team, 'frc1124') in media.references)

        form = self.getMediaAdminForm('remove_preferred', media_id.id())
        response = form.submit().follow()
        self.assertEqual(response.status_int, 301)

        media = media_id.get()
        self.assertTrue(team_reference in media.references)
        self.assertFalse(team_reference in media.preferred_references)

    """
    Test modifying team properties
    """

    def test_set_robot_name(self):
        self.loginUser()
        self.giveTeamAdminAccess()

        # There is no Robot models that exists yet for this team
        form = self.getTeamInfoForm(1124)
        form['robot_name'] = 'Test Robot Name'
        response = form.submit().follow()
        self.assertEqual(response.status_int, 301)

        robot = Robot.get_by_id(Robot.renderKeyName('frc1124', self.now.year))
        self.assertIsNotNone(robot)
        self.assertEqual(robot.robot_name, 'Test Robot Name')

    def test_update_robot_name(self):
        self.loginUser()
        self.giveTeamAdminAccess()

        Robot(
            id=Robot.renderKeyName(self.team.key_name, self.now.year),
            team=self.team.key,
            year=self.now.year,
            robot_name='First Robot Name',
        ).put()

        form = self.getTeamInfoForm(1124)
        self.assertEqual(form['robot_name'].value, 'First Robot Name')
        form['robot_name'] = 'Second Robot Name'
        response = form.submit().follow()
        self.assertEqual(response.status_int, 301)

        robot = Robot.get_by_id(Robot.renderKeyName('frc1124', self.now.year))
        self.assertIsNotNone(robot)
        self.assertEqual(robot.robot_name, 'Second Robot Name')

    def test_delete_robot_name(self):
        self.loginUser()
        self.giveTeamAdminAccess()

        Robot(
            id=Robot.renderKeyName(self.team.key_name, self.now.year),
            team=self.team.key,
            year=self.now.year,
            robot_name='First Robot Name',
        ).put()

        form = self.getTeamInfoForm(1124)
        self.assertEqual(form['robot_name'].value, 'First Robot Name')
        form['robot_name'] = ''
        response = form.submit().follow()
        self.assertEqual(response.status_int, 301)

        robot = Robot.get_by_id(Robot.renderKeyName('frc1124', self.now.year))
        self.assertIsNone(robot)

    """
    Test accepting/rejecting suggestions for the given team
    These are basically the same tests as the individual suggestion review
    controller tests, but since we post to that same URL, we'll want to make
    sure everything works from both paths
    """

    def test_accept_team_media_expired_auth(self):
        self.loginUser()
        access_key = self.giveTeamAdminAccess()

        suggestion_id = self.createMediaSuggestion()
        form = self.getSuggestionForm('media')
        form['accept_reject-{}'.format(suggestion_id)] = 'accept::{}'.format(
            suggestion_id)
        access = access_key.get()
        access.expiration += datetime.timedelta(days=-7)
        access.put()
        response = form.submit().follow(expect_errors=True)
        self.assertEqual(response.request.path, "/")

        suggestion = Suggestion.get_by_id(suggestion_id)
        self.assertIsNotNone(suggestion)
        self.assertEqual(suggestion.review_state, Suggestion.REVIEW_PENDING)

    def test_reject_team_media_expired_auth(self):
        self.loginUser()
        access_key = self.giveTeamAdminAccess()

        suggestion_id = self.createMediaSuggestion()
        form = self.getSuggestionForm('media')
        form['accept_reject-{}'.format(suggestion_id)] = 'reject::{}'.format(
            suggestion_id)
        access = access_key.get()
        access.expiration += datetime.timedelta(days=-7)
        access.put()
        response = form.submit().follow(expect_errors=True)
        self.assertEqual(response.request.path, "/")

        suggestion = Suggestion.get_by_id(suggestion_id)
        self.assertIsNotNone(suggestion)
        self.assertEqual(suggestion.review_state, Suggestion.REVIEW_PENDING)

    def test_accept_team_media(self):
        self.loginUser()
        self.giveTeamAdminAccess()

        suggestion_id = self.createMediaSuggestion()
        form = self.getSuggestionForm('media')
        form['accept_reject-{}'.format(suggestion_id)] = 'accept::{}'.format(
            suggestion_id)
        response = form.submit().follow()
        self.assertEqual(response.status_int, 200)

        suggestion = Suggestion.get_by_id(suggestion_id)
        self.assertIsNotNone(suggestion)
        self.assertEqual(suggestion.review_state, Suggestion.REVIEW_ACCEPTED)

        medias = Media.query().fetch()
        self.assertEqual(len(medias), 1)
        media = medias[0]
        self.assertIsNotNone(media)
        self.assertEqual(media.foreign_key, 'foobar')
        self.assertEqual(media.media_type_enum, MediaType.IMGUR)
        self.assertTrue(ndb.Key(Team, 'frc1124') in media.references)

    def test_accept_team_media_as_preferred(self):
        self.loginUser()
        self.giveTeamAdminAccess()

        suggestion_id = self.createMediaSuggestion()
        form = self.getSuggestionForm('media')
        form['accept_reject-{}'.format(suggestion_id)] = 'accept::{}'.format(
            suggestion_id)
        form['preferred_keys[]'] = ['preferred::{}'.format(suggestion_id)]
        response = form.submit().follow()
        self.assertEqual(response.status_int, 200)

        suggestion = Suggestion.get_by_id(suggestion_id)
        self.assertIsNotNone(suggestion)
        self.assertEqual(suggestion.review_state, Suggestion.REVIEW_ACCEPTED)

        medias = Media.query().fetch()
        self.assertEqual(len(medias), 1)
        media = medias[0]
        self.assertIsNotNone(media)
        self.assertEqual(media.foreign_key, 'foobar')
        self.assertEqual(media.media_type_enum, MediaType.IMGUR)
        self.assertTrue(ndb.Key(Team, 'frc1124') in media.preferred_references)

    def test_reject_team_media(self):
        self.loginUser()
        self.giveTeamAdminAccess()

        suggestion_id = self.createMediaSuggestion()
        form = self.getSuggestionForm('media')
        form['accept_reject-{}'.format(suggestion_id)] = 'reject::{}'.format(
            suggestion_id)
        response = form.submit().follow()
        self.assertEqual(response.status_int, 200)

        suggestion = Suggestion.get_by_id(suggestion_id)
        self.assertIsNotNone(suggestion)
        self.assertEqual(suggestion.review_state, Suggestion.REVIEW_REJECTED)

        medias = Media.query().fetch()
        self.assertEqual(len(medias), 0)

    def test_accept_social_media_expired_auth(self):
        self.loginUser()
        access_key = self.giveTeamAdminAccess()

        suggestion_id = self.createSocialMediaSuggestion()
        form = self.getSuggestionForm('social-media')
        form['accept_reject-{}'.format(suggestion_id)] = 'accept::{}'.format(
            suggestion_id)
        access = access_key.get()
        access.expiration += datetime.timedelta(days=-7)
        access.put()
        response = form.submit().follow(expect_errors=True)
        self.assertEqual(response.request.path, "/")

        suggestion = Suggestion.get_by_id(suggestion_id)
        self.assertIsNotNone(suggestion)
        self.assertEqual(suggestion.review_state, Suggestion.REVIEW_PENDING)

    def test_reject_social_media_expired_auth(self):
        self.loginUser()
        access_key = self.giveTeamAdminAccess()

        suggestion_id = self.createSocialMediaSuggestion()
        form = self.getSuggestionForm('social-media')
        form['accept_reject-{}'.format(suggestion_id)] = 'reject::{}'.format(
            suggestion_id)
        access = access_key.get()
        access.expiration += datetime.timedelta(days=-7)
        access.put()
        response = form.submit().follow(expect_errors=True)
        self.assertEqual(response.request.path, "/")

        suggestion = Suggestion.get_by_id(suggestion_id)
        self.assertIsNotNone(suggestion)
        self.assertEqual(suggestion.review_state, Suggestion.REVIEW_PENDING)

    def test_accept_social_media(self):
        self.loginUser()
        self.giveTeamAdminAccess()

        suggestion_id = self.createSocialMediaSuggestion()
        form = self.getSuggestionForm('social-media')
        form['accept_reject-{}'.format(suggestion_id)] = 'accept::{}'.format(
            suggestion_id)
        response = form.submit().follow()
        self.assertEqual(response.status_int, 200)

        suggestion = Suggestion.get_by_id(suggestion_id)
        self.assertIsNotNone(suggestion)
        self.assertEqual(suggestion.review_state, Suggestion.REVIEW_ACCEPTED)

        medias = Media.query().fetch()
        self.assertEqual(len(medias), 1)
        media = medias[0]
        self.assertIsNotNone(media)
        self.assertEqual(media.foreign_key, 'frc1124')
        self.assertEqual(media.media_type_enum, MediaType.TWITTER_PROFILE)
        self.assertTrue(ndb.Key(Team, 'frc1124') in media.references)

    def test_reject_social_media(self):
        self.loginUser()
        self.giveTeamAdminAccess()

        suggestion_id = self.createSocialMediaSuggestion()
        form = self.getSuggestionForm('social-media')
        form['accept_reject-{}'.format(suggestion_id)] = 'reject::{}'.format(
            suggestion_id)
        response = form.submit().follow()
        self.assertEqual(response.status_int, 200)

        suggestion = Suggestion.get_by_id(suggestion_id)
        self.assertIsNotNone(suggestion)
        self.assertEqual(suggestion.review_state, Suggestion.REVIEW_REJECTED)

        medias = Media.query().fetch()
        self.assertEqual(len(medias), 0)

    def test_accept_robot_design_expired_auth(self):
        self.loginUser()
        access_key = self.giveTeamAdminAccess()

        suggestion_id = self.createDesignSuggestion()
        form = self.getSuggestionForm('robot')
        form['accept_reject-{}'.format(suggestion_id)] = 'accept::{}'.format(
            suggestion_id)
        access = access_key.get()
        access.expiration += datetime.timedelta(days=-7)
        access.put()
        response = form.submit().follow(expect_errors=True)
        self.assertEqual(response.request.path, "/")

        suggestion = Suggestion.get_by_id(suggestion_id)
        self.assertIsNotNone(suggestion)
        self.assertEqual(suggestion.review_state, Suggestion.REVIEW_PENDING)

    def test_reject_robot_design_expired_auth(self):
        self.loginUser()
        access_key = self.giveTeamAdminAccess()

        suggestion_id = self.createDesignSuggestion()
        form = self.getSuggestionForm('robot')
        form['accept_reject-{}'.format(suggestion_id)] = 'reject::{}'.format(
            suggestion_id)
        access = access_key.get()
        access.expiration += datetime.timedelta(days=-7)
        access.put()
        response = form.submit().follow(expect_errors=True)
        self.assertEqual(response.request.path, "/")

        suggestion = Suggestion.get_by_id(suggestion_id)
        self.assertIsNotNone(suggestion)
        self.assertEqual(suggestion.review_state, Suggestion.REVIEW_PENDING)

    def test_accept_robot_design(self):
        self.loginUser()
        self.giveTeamAdminAccess()

        suggestion_id = self.createDesignSuggestion()
        form = self.getSuggestionForm('robot')
        form['accept_reject-{}'.format(suggestion_id)] = 'accept::{}'.format(
            suggestion_id)
        response = form.submit().follow()
        self.assertEqual(response.status_int, 200)

        # Make sure the Media object gets created
        media = Media.query().fetch()[0]
        self.assertIsNotNone(media)
        self.assertEqual(media.media_type_enum, MediaType.GRABCAD)
        self.assertEqual(media.year, 2016)
        self.assertListEqual(media.references, [self.team.key])

        # Make sure we mark the Suggestion as REVIEWED
        suggestion = Suggestion.get_by_id(suggestion_id)
        self.assertIsNotNone(suggestion)
        self.assertEqual(suggestion.review_state, Suggestion.REVIEW_ACCEPTED)

    def test_reject_robot_design(self):
        self.loginUser()
        self.giveTeamAdminAccess()

        suggestion_id = self.createDesignSuggestion()
        form = self.getSuggestionForm('robot')
        form['accept_reject-{}'.format(suggestion_id)] = 'reject::{}'.format(
            suggestion_id)
        response = form.submit().follow()
        self.assertEqual(response.status_int, 200)

        # Make sure the Media object doesn't get created
        medias = Media.query().fetch(keys_only=True)
        self.assertEqual(len(medias), 0)

        # Make sure we mark the Suggestion as REVIEWED
        suggestion = Suggestion.get_by_id(suggestion_id)
        self.assertIsNotNone(suggestion)
        self.assertEqual(suggestion.review_state, Suggestion.REVIEW_REJECTED)
コード例 #33
0
class TestEventTeamsApiController(unittest2.TestCase):
    def setUp(self):
        app = webapp2.WSGIApplication([webapp2.Route(r'/<event_key:>', ApiEventTeamsController, 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(root_path=".")

        self.event = Event(
                id="2010sc",
                name="Palmetto Regional",
                event_type_enum=EventType.REGIONAL,
                short_name="Palmetto",
                event_short="sc",
                year=2010,
                end_date=datetime(2010, 03, 27),
                official=True,
                city="Clemson",
                state_prov="SC",
                country="USA",
                start_date=datetime(2010, 03, 24),
        )
        self.event.put()

        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",
                city="Greenville",
                state_prov="SC",
                country="USA",
                website="www.entech.org",
        )
        self.team.put()

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

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

    def assertTeamJson(self, team):
        team = team[0]
        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 testEventTeamsApi(self):
        response = self.testapp.get('/2010sc', headers={"X-TBA-App-Id": "tba-tests:event-controller-test:v01"})

        team_dict = json.loads(response.body)
        self.assertTeamJson(team_dict)
コード例 #34
0
class TestShortController(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(
        )  # Prevent data from leaking between tests

        app = webapp2.WSGIApplication([
            RedirectRoute(r"/team/<team_number:[0-9]+>", TeamCanonical,
                          "team-canonical"),
            RedirectRoute(r"/event/<event_key>", EventDetail, "event-detail"),
            RedirectRoute(r"/<:(frc)?><team_number:[0-9]+>", ShortTeamHandler,
                          "short-team-canonical"),
            RedirectRoute(r"/<event_key:[0-9]{4}[a-z0-9]+>", ShortEventHandler,
                          "short-event-detail"),
        ],
                                      debug=True)
        self.testapp = webtest.TestApp(app)

        self.team1 = Team(
            id="frc1",
            team_number=1,
        )
        self.team2 = Team(
            id="frc16",
            team_number=16,
        )
        self.team3 = Team(
            id="frc254",
            team_number=254,
        )
        self.team4 = Team(
            id="frc2521",
            team_number=2521,
        )

        self.event1 = Event(
            id="2017necmp",
            name="New England District Championship",
            event_type_enum=EventType.DISTRICT_CMP,
            short_name="New England",
            event_short="necmp",
            year=2017,
            end_date=datetime(2017, 03, 27),
            official=True,
            city="Hartford",
            state_prov="CT",
            country="USA",
            venue="Some Venue",
            venue_address="Some Venue, Hartford, CT, USA",
            timezone_id="America/New_York",
            start_date=datetime(2017, 03, 24),
            webcast_json=
            "[{\"type\": \"twitch\", \"channel\": \"frcgamesense\"}]",
            website="http://www.firstsv.org")

        self.event2 = Event(
            id="2017mndu2",
            name="Northern Lights Regional",
            event_type_enum=EventType.REGIONAL,
            short_name="Northern Lights",
            event_short="mndu2",
            year=2017,
            end_date=datetime(2017, 03, 04),
            official=True,
            city="Duluth",
            state_prov="MN",
            country="USA",
            venue="Duluth Entertainment Convention Center",
            venue_address=
            "Duluth Entertainment Convention Center, Duluth, MN, USA",
            timezone_id="America/New_York",
            start_date=datetime(2017, 03, 1),
            webcast_json=
            "[{\"type\": \"twitch\", \"channel\": \"frcgamesense\"}]",
            website="http://www.mnfirst.org")

        self.team1.put()
        self.team2.put()
        self.team3.put()
        self.team4.put()
        self.event1.put()
        self.event2.put()

    def test_team_redirect(self):
        # 1 digit team
        response = self.testapp.get("/1", status="3*")
        response = response.follow()
        self.assertEqual(response.request.path, "/team/1")

        response = self.testapp.get("/frc1", status="3*")
        response = response.follow()
        self.assertEqual(response.request.path, "/team/1")

        # 2 digit team
        response = self.testapp.get("/16", status="3*")
        response = response.follow()
        self.assertEqual(response.request.path, "/team/16")

        response = self.testapp.get("/frc16", status="3*")
        response = response.follow()
        self.assertEqual(response.request.path, "/team/16")

        # 3 digit team
        response = self.testapp.get("/254", status="3*")
        response = response.follow()
        self.assertEqual(response.request.path, "/team/254")

        response = self.testapp.get("/frc254", status="3*")
        response = response.follow()
        self.assertEqual(response.request.path, "/team/254")

        # 4 digit team
        response = self.testapp.get("/2521", status="3*")
        response = response.follow()
        self.assertEqual(response.request.path, "/team/2521")

        response = self.testapp.get("/frc2521", status="3*")
        response = response.follow()
        self.assertEqual(response.request.path, "/team/2521")

    def test_event_redirect(self):
        # Normal event code
        response = self.testapp.get("/2017necmp", status="3*")
        response = response.follow()
        self.assertEqual(response.request.path, "/event/2017necmp")

        # Event code with numbers
        response = self.testapp.get("/2017mndu2", status="3*")
        response = response.follow()
        self.assertEqual(response.request.path, "/event/2017mndu2")

        # Non-existing event code
        response = self.testapp.get("/2017meow", status="3*")
        response = response.follow(expect_errors=True)
        self.assertEqual(response.request.path, "/event/2017meow")
        self.assertEqual(response.status_int, 404)

    def test_no_redirect(self):
        # Teams

        # Negative team number
        response = self.testapp.get("/-2521", status=404)
        self.assertEqual(response.status_int, 404)

        # Events

        # Semi-real year
        response = self.testapp.get("/217nytr", status=404)
        self.assertEqual(response.status_int, 404)
コード例 #35
0
class TestTeamController(unittest2.TestCase):
    def setUp(self):
        self.testbed = testbed.Testbed()
        self.testbed.activate()
        self.testbed.init_datastore_v3_stub()
        self.testbed.init_memcache_stub()
        app = webapp2.WSGIApplication([
            RedirectRoute(r'/team/<team_number:[0-9]+>', TeamCanonical,
                          'team-canonical'),
            RedirectRoute(r'/team/<team_number:[0-9]+>/<year:[0-9]+>',
                          TeamDetail, 'team-detail'),
            RedirectRoute(r'/team/<team_number:[0-9]+>/history', TeamHistory,
                          'team-history'),
            RedirectRoute(r'/teams/<page:[0-9]+>', TeamList, 'team-list-year'),
            RedirectRoute(r'/teams', TeamList, 'team-list'),
        ])
        self.testapp = webtest.TestApp(app)

        self.team = Team(
            id="frc1124",
            name="Really Long Name",
            team_number=1124,
            rookie_year=2003,
            nickname="The UberBots",
            city="Avon",
            state_prov="CT",
            country="USA",
            website="www.uberbots.org",
            motto="This is a motto",
        )
        self.event = Event(
            id="2016necmp",
            name="New England District Championship",
            event_type_enum=EventType.DISTRICT_CMP,
            short_name="New England",
            event_short="necmp",
            year=2016,
            end_date=datetime(2016, 03, 27),
            official=True,
            city='Hartford',
            state_prov='CT',
            country='USA',
            venue="Some Venue",
            venue_address="Some Venue, Hartford, CT, USA",
            timezone_id="America/New_York",
            start_date=datetime(2016, 03, 24),
        )
        self.event_team = EventTeam(id="2016necmp_frc1124",
                                    team=self.team.key,
                                    event=self.event.key,
                                    year=2016)
        self.event2 = Event(
            id="2015necmp",
            name="New England District Championship",
            event_type_enum=EventType.DISTRICT_CMP,
            short_name="New England",
            event_short="necmp",
            year=2015,
            end_date=datetime(2015, 03, 27),
            official=True,
            city='Hartford',
            state_prov='CT',
            country='USA',
            venue="Some Venue",
            venue_address="Some Venue, Hartford, CT, USA",
            timezone_id="America/New_York",
            start_date=datetime(2015, 03, 24),
        )
        self.event_team2 = EventTeam(id="2015necmp_frc1124",
                                     team=self.team.key,
                                     event=self.event2.key,
                                     year=2015)
        self.event_team.put()
        self.team.put()
        self.event.put()
        self.event_team.put()
        self.event2.put()
        self.event_team2.put()

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

    def testTeamListDefaultPage(self):
        response = self.testapp.get("/teams")
        self.assertEqual(response.status_int, 200)

    def testTeamListExplicitPage(self):
        response = self.testapp.get("/teams/1")
        self.assertEqual(response.status_int, 200)

    def testTeamListBadPage(self):
        response = self.testapp.get("/teams/19", status=404)
        self.assertEqual(response.status_int, 404)

    def testTeamCanonical(self):
        response = self.testapp.get("/team/1124")
        self.assertEqual(response.status_int, 200)

    def testBadTeamCanonical(self):
        response = self.testapp.get("/team/1337", status=404)
        self.assertEqual(response.status_int, 404)

    def testTeamDetail(self):
        response = self.testapp.get("/team/1124/2016")
        self.assertEqual(response.status_int, 200)

    # Because 2015 is special :/
    def testTeamDetail2015(self):
        response = self.testapp.get("/team/1124/2015")
        self.assertEqual(response.status_int, 200)

    def testTeamDetailBadYear(self):
        response = self.testapp.get("/team/1124/2014", status=404)
        self.assertEqual(response.status_int, 404)

    def testBadTeamDetail(self):
        response = self.testapp.get("/team/1337/2016", status=404)
        self.assertEqual(response.status_int, 404)

    def testTeamHistory(self):
        response = self.testapp.get("/team/1124/history")
        self.assertEqual(response.status_int, 200)

    def testBadTeamHistory(self):
        response = self.testapp.get("/team/1337/history", status=404)
        self.assertEqual(response.status_int, 404)
コード例 #36
0
class TestApiTeamShow(unittest2.TestCase):

    #TODO: Add event_keys testing. -brandondean 10/21/2012
    def setUp(self):
        app = webapp2.WSGIApplication([(r'/', ApiTeamsShow)], 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.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 = "Regional",
                short_name = "Palmetto",
                event_short = "sc",
                year = 2010,
                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()

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

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

    def testTeamShow(self):
        response = self.testapp.get('/?teams=frc281')

        team_dict = json.loads(response.body)
        self.assertTeamJson(team_dict[0])
コード例 #37
0
class TestEventTeamsApiController(unittest2.TestCase):
    def setUp(self):
        app = webapp2.WSGIApplication([webapp2.Route(r'/<event_key:>', ApiEventTeamsController, 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()
        ndb.get_context().clear_cache()  # Prevent data from leaking between tests

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

        self.event = Event(
                id="2010sc",
                name="Palmetto Regional",
                event_type_enum=EventType.REGIONAL,
                short_name="Palmetto",
                event_short="sc",
                year=2010,
                end_date=datetime(2010, 03, 27),
                official=True,
                city="Clemson",
                state_prov="SC",
                country="USA",
                start_date=datetime(2010, 03, 24),
        )
        self.event.put()

        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",
                city="Greenville",
                state_prov="SC",
                country="USA",
                website="www.entech.org",
        )
        self.team.put()

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

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

    def assertTeamJson(self, team):
        team = team[0]
        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 testEventTeamsApi(self):
        response = self.testapp.get('/2010sc', headers={"X-TBA-App-Id": "tba-tests:event-controller-test:v01"})

        team_dict = json.loads(response.body)
        self.assertTeamJson(team_dict)
コード例 #38
0
 def _create_team(self, title, description, league, location):
     team = Team(title = title, description = description, league =
                 league, location = location)
     team_key = str(team.put())
     return team
class TestSuggestDesignsReviewController(unittest2.TestCase):
    def setUp(self):
        self.policy = datastore_stub_util.PseudoRandomHRConsistencyPolicy(
            probability=1)
        self.testbed = testbed.Testbed()
        self.testbed.activate()
        self.testbed.init_datastore_v3_stub(consistency_policy=self.policy)
        self.testbed.init_memcache_stub()
        self.testbed.init_user_stub()
        self.testbed.init_urlfetch_stub()
        ndb.get_context().clear_cache(
        )  # Prevent data from leaking between tests

        app = webapp2.WSGIApplication([
            RedirectRoute(r'/suggest/cad/review',
                          SuggestDesignsReviewController,
                          'review-designs',
                          strict_slash=True),
            RedirectRoute(r'/suggest/review',
                          SuggestReviewHomeController,
                          'review-home',
                          strict_slash=True),
        ],
                                      debug=True)
        self.testapp = webtest.TestApp(app)

        self.team = Team(
            id="frc1124",
            team_number=1124,
        )
        self.team.put()

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

    def loginUser(self):
        self.testbed.setup_env(user_email="*****@*****.**",
                               user_id="123",
                               user_is_admin='0',
                               overwrite=True)

        self.account = Account.get_or_insert("123",
                                             email="*****@*****.**",
                                             registered=True)

    def givePermission(self):
        self.account.permissions.append(AccountPermissions.REVIEW_DESIGNS)
        self.account.put()

    def createSuggestion(self):
        status = SuggestionCreator.createTeamMediaSuggestion(
            self.account.key,
            'https://grabcad.com/library/2016-148-robowranglers-1', 'frc1124',
            '2016')
        self.assertEqual(status[0], 'success')
        return Suggestion.render_media_key_name('2016', 'team', 'frc1124',
                                                'grabcad',
                                                '2016-148-robowranglers-1')

    def getSuggestionForm(self):
        response = self.testapp.get('/suggest/cad/review')
        self.assertEqual(response.status_int, 200)

        form = response.forms.get('review_designs', None)
        self.assertIsNotNone(form)
        return form

    def test_login_redirect(self):
        response = self.testapp.get('/suggest/cad/review', status='3*')
        response = response.follow(expect_errors=True)
        self.assertTrue(
            response.request.path.startswith("/account/login_required"))

    def test_no_permissions(self):
        self.loginUser()
        response = self.testapp.get('/suggest/cad/review', status='3*')
        response = response.follow(expect_errors=True)
        self.assertEqual(response.request.path, '/')

    def test_nothing_to_review(self):
        self.loginUser()
        self.givePermission()
        form = self.getSuggestionForm()
        response = form.submit().follow()
        self.assertEqual(response.status_int, 200)

    def test_accept_suggestion(self):
        self.loginUser()
        self.givePermission()
        suggestion_id = self.createSuggestion()
        form = self.getSuggestionForm()
        form['accept_reject-{}'.format(suggestion_id)] = 'accept::{}'.format(
            suggestion_id)
        response = form.submit().follow()
        self.assertEqual(response.status_int, 200)

        # Make sure the Media object gets created
        media = Media.query().fetch()[0]
        self.assertIsNotNone(media)
        self.assertEqual(media.media_type_enum, MediaType.GRABCAD)
        self.assertEqual(media.year, 2016)
        self.assertListEqual(media.references, [self.team.key])

        # Make sure we mark the Suggestion as REVIEWED
        suggestion = Suggestion.get_by_id(suggestion_id)
        self.assertIsNotNone(suggestion)
        self.assertEqual(suggestion.review_state, Suggestion.REVIEW_ACCEPTED)

    def test_reject_suggestion(self):
        self.loginUser()
        self.givePermission()
        suggestion_id = self.createSuggestion()
        form = self.getSuggestionForm()
        form['accept_reject-{}'.format(suggestion_id)] = 'reject::{}'.format(
            suggestion_id)
        response = form.submit().follow()
        self.assertEqual(response.status_int, 200)

        # Make sure the Media object doesn't get created
        medias = Media.query().fetch(keys_only=True)
        self.assertEqual(len(medias), 0)

        # Make sure we mark the Suggestion as REVIEWED
        suggestion = Suggestion.get_by_id(suggestion_id)
        self.assertIsNotNone(suggestion)
        self.assertEqual(suggestion.review_state, Suggestion.REVIEW_REJECTED)

    def test_fast_path_accept(self):
        self.loginUser()
        self.givePermission()
        suggestion_id = self.createSuggestion()

        response = self.testapp.get(
            '/suggest/cad/review?action=accept&id={}'.format(suggestion_id))
        response = response.follow()
        self.assertEqual(response.status_int, 200)
        self.assertEqual(response.request.GET.get('status'), 'accepted')

        # Make sure the Media object gets created
        media = Media.query().fetch()[0]
        self.assertIsNotNone(media)
        self.assertEqual(media.media_type_enum, MediaType.GRABCAD)
        self.assertEqual(media.year, 2016)
        self.assertListEqual(media.references, [self.team.key])

        suggestion = Suggestion.get_by_id(suggestion_id)
        self.assertIsNotNone(suggestion)
        self.assertEqual(suggestion.review_state, Suggestion.REVIEW_ACCEPTED)

    def test_fast_path_reject(self):
        self.loginUser()
        self.givePermission()
        suggestion_id = self.createSuggestion()

        response = self.testapp.get(
            '/suggest/cad/review?action=reject&id={}'.format(suggestion_id))
        response = response.follow()
        self.assertEqual(response.status_int, 200)
        self.assertEqual(response.request.GET.get('status'), 'rejected')

        medias = Media.query().fetch(keys_only=True)
        self.assertEqual(len(medias), 0)

        suggestion = Suggestion.get_by_id(suggestion_id)
        self.assertIsNotNone(suggestion)
        self.assertEqual(suggestion.review_state, Suggestion.REVIEW_REJECTED)

    def test_fast_path_already_reviewed(self):
        self.loginUser()
        self.givePermission()
        suggestion_id = self.createSuggestion()

        suggestion = Suggestion.get_by_id(suggestion_id)
        suggestion.review_state = Suggestion.REVIEW_ACCEPTED
        suggestion.put()

        response = self.testapp.get(
            '/suggest/cad/review?action=accept&id={}'.format(suggestion_id))
        response = response.follow()
        self.assertEqual(response.status_int, 200)
        self.assertEqual(response.request.GET.get('status'),
                         'already_reviewed')

    def test_fast_path_bad_id(self):
        self.loginUser()
        self.givePermission()
        response = self.testapp.get(
            '/suggest/cad/review?action=accept&id=abc123')
        response = response.follow()
        self.assertEqual(response.status_int, 200)
        self.assertEqual(response.request.GET.get('status'), 'bad_suggestion')
コード例 #40
0
class TestSuggestTeamMediaController(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_user_stub()
        ndb.get_context().clear_cache()  # Prevent data from leaking between tests

        app = webapp2.WSGIApplication([
            RedirectRoute(r'/suggest/team/media', SuggestTeamMediaController, 'suggest-team-media', strict_slash=True),
        ], debug=True)
        self.testapp = webtest.TestApp(app)

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

    def loginUser(self):
        self.testbed.setup_env(
            user_email="*****@*****.**",
            user_id="123",
            user_is_admin='0',
            overwrite=True)

        Account.get_or_insert(
            "123",
            email="*****@*****.**",
            registered=True)

    def storeTeam(self):
        self.team = Team(
            id="frc1124",
            team_number=1124,
        )
        self.team.put()

    def getSuggestionForm(self, team_key, year):
        response = self.testapp.get('/suggest/team/media?team_key={}&year={}'.format(team_key, year))
        self.assertEqual(response.status_int, 200)

        form = response.forms.get('suggest_media', None)
        self.assertIsNotNone(form)
        return form

    def test_login_redirect(self):
        response = self.testapp.get('/suggest/team/media?team_key=frc1124&year=2016', status='3*')
        response = response.follow(expect_errors=True)
        self.assertTrue(response.request.path.startswith("/account/login_required"))

    def test_no_params(self):
        self.loginUser()
        response = self.testapp.get('/suggest/team/media', status='3*')
        response = response.follow(expect_errors=True)
        self.assertEqual(response.request.path, '/')

    def test_submit_empty_form(self):
        self.loginUser()
        self.storeTeam()
        form = self.getSuggestionForm('frc1124', 2016)
        response = form.submit().follow()
        self.assertEqual(response.status_int, 200)

        request = response.request
        self.assertEqual(request.GET.get('status'), 'bad_url')

    def test_bad_team(self):
        self.loginUser()
        response = self.testapp.get('/suggest/team/media?team_key=frc1124&year=2016', status='3*')
        response = response.follow(expect_errors=True)
        self.assertEqual(response.request.path, '/')

    def test_suggest_media(self):
        self.loginUser()
        self.storeTeam()
        form = self.getSuggestionForm('frc1124', 2016)
        form['media_url'] = 'http://imgur.com/aF8T5ZE'
        response = form.submit().follow()
        self.assertEqual(response.status_int, 200)

        request = response.request
        self.assertEqual(request.GET.get('status'), 'success')

        suggestion = Suggestion.get_by_id('media_2016_team_frc1124_imgur_aF8T5ZE')
        self.assertIsNotNone(suggestion)
コード例 #41
0
class TestTeamManipulator(unittest2.TestCase):
    def setUp(self):
        self.testbed = testbed.Testbed()
        self.testbed.activate()
        self.testbed.init_datastore_v3_stub()
        self.testbed.init_memcache_stub()

        self.old_team = Team(
            id = "frc177",
            team_number = 177,
            first_tpid = 61771,
            first_tpid_year = 2012
        )

        self.new_team = Team(
            id = "frc177",
            team_number = 177,
            website = "http://www.bobcatrobotics.org"
        )
        
    def tearDown(self):
        self.testbed.deactivate()

    def assertMergedTeam(self, team):
        self.assertOldTeam(team)
        self.assertEqual(team.website, "http://www.bobcatrobotics.org")

    def assertOldTeam(self, team):
        self.assertEqual(team.first_tpid, 61771)
        self.assertEqual(team.first_tpid_year, 2012)
        self.assertEqual(team.key_name, "frc177")
        self.assertEqual(team.team_number, 177)

    def test_createOrUpdate(self):
        TeamManipulator.createOrUpdate(self.old_team)
        self.assertOldTeam(Team.get_by_id("frc177"))
        TeamManipulator.createOrUpdate(self.new_team)
        self.assertMergedTeam(Team.get_by_id("frc177"))

    def test_findOrSpawn(self):
        self.old_team.put()
        self.assertMergedTeam(TeamManipulator.findOrSpawn(self.new_team))

    def test_updateMerge(self):
        self.assertMergedTeam(TeamManipulator.updateMerge(self.new_team, self.old_team))

    def test_create_lots_of_teams(self):
        number = 500
        teams = [Team(
            id = "frc%s" % team_number,
            team_number = team_number)
            for team_number in range(number)]
        TeamManipulator.createOrUpdate(teams)

        team = Team.get_by_id("frc177")
        self.assertEqual(team.key_name, "frc177")
        self.assertEqual(team.team_number, 177)

        team = Team.get_by_id("frc%s" % (number - 1))
        self.assertEqual(team.key_name, "frc%s" % (number - 1))
        self.assertEqual(team.team_number, number - 1)
コード例 #42
0
class TestApiTeamShow(unittest2.TestCase):

    # TODO: Add event_keys testing. -brandondean 10/21/2012
    def setUp(self):
        app = webapp2.WSGIApplication([(r'/', ApiTeamsShow)], 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=2010,
            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()

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

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

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

        team_dict = json.loads(response.body)
        self.assertTeamJson(team_dict[0])

    def testNonexistentTeam(self):
        response = self.testapp.get(
            '/?teams=frc3141579265',
            headers={"X-TBA-App-Id": "tba-tests:team-api-test:v01"},
            status=404)

        self.assertEqual(response.status_int, 404)

    def test_validate_tba_app_id(self):
        response = self.testapp.get(
            '/?teams=frc254',
            expect_errors=True)  # By default get() doesn't send a user agent
        self.assertEqual(response.status, "400 Bad Request")
        self.assertTrue('Error' in json.loads(response.body).keys())