def testInsertMerge2(self): res = Resort() res.name = "Test Insert Resort" res.id = 2 t1 = Trail() t1.id = 1 t2 = Trail() t2.id = 1 res.trails.append(t1) res.trails.append(t2) self.acc.insertData([res]) self.assertIsNone(self.acc.queryResort(2))
def testInsertMerge1(self): res = Resort() res.name = "Test Insert Resort" res.id = 1 res2 = Resort() res2.name = "Test Insert Resort Copy" res2.id = 1 self.acc.insertData([res, res2]) self.assertEqual( self.acc.queryResort(1).name, "Test Insert Resort Copy")
def post(self): request_dict = request.get_json() if not request_dict: resp = {'message': 'No input data provided'} return resp, status.HTTP_400_BAD_REQUEST errors = resort_schema.validate(request_dict) if errors: return errors, status.HTTP_400_BAD_REQUEST try: resort = Resort(request_dict['name']) resort.add(resort) log_event(get_jwt_identity(), "ADD - " + resort.__repr__()) query = Resort.query.get(resort.id) result = resort_schema.dump(query) return result, status.HTTP_201_CREATED except SQLAlchemyError as e: db.session.rollback() resp = jsonify({"error": str(e)}) resp.status_code = status.HTTP_400_BAD_REQUEST return resp
def testRelationships(self): res = Resort() res.name = "Test Resort" res.id = 123 trail = Trail() trail.name = "Test Trail" trail.id = 222 photo = Photo() photo.name = "Test Trail photo" photo.id = 222 photo.trail = trail trail.photos.append(photo) res.trails.append(trail) res.photos.append(photo) self.acc.insertData([res]) self.assertEqual(self.acc.queryResort(123).name, "Test Resort") self.assertEqual( self.acc.queryResort(123).trails[0].name, "Test Trail") self.assertEqual( self.acc.queryResort(123).photos[0].name, "Test Trail photo") self.assertEqual( self.acc.queryTrail(222).photos[0].name, "Test Trail photo")
def testtrails2(self): """ test getTrails when ValueError raised """ # setup fetch.fetchJSON = MagicMock(side_effect=ValueError) resort = Resort(name="name", id=1) trails = {} # function call res = scrapeService.getTrails(1, 1, 1, resort, trails) # validation fetch.fetchJSON.assert_called_once_with( 'https://www.hikingproject.com/data/get-trails?lat=None&lon=None&maxDistance=10&maxResults=1&sort=distance&key=200217902-4d9f4e11973eb6aa502e868e55361062' ) self.assertEqual(trails, res) self.assertEqual(len(resort.trails), 0)
def testresort2(self): """ test getResort with all fetchs raising ValueError """ # setup resort = Resort() fetch.fetchJSON = MagicMock(side_effect=ValueError) fetch.fetchXML = MagicMock(side_effect=ValueError) fetch.fetchYelpJSON = MagicMock(side_effect=ValueError) # function call res = scrapeService.getResort(1) # validation fetch.fetchJSON.assert_called_once_with( "https://skimap.org/SkiAreas/view/1.json") fetch.fetchXML.assert_not_called() fetch.fetchYelpJSON.assert_not_called() resortcontentequal(self, res, resort)
def testresorts1(self): """ test getResorts with valid fetch result """ # setup etree = ElementTree.Element('region') skiareas = ElementTree.Element('skiAreas') skiarea = ElementTree.Element('skiArea', id="1") skiareas.append(skiarea) etree.append(skiareas) resort = Resort(name="foo", id=1) fetch.fetchXML = MagicMock(return_value=etree) scrapeService.getResort = MagicMock(return_value=resort) # function call res = getResorts(10) # validation fetch.fetchXML.assert_called_once_with( "https://skimap.org/Regions/view/281.xml") scrapeService.getResort.assert_called_once_with("1") self.assertEqual(res, [resort])
def testtrails1(self): """ test getTrails with valid fetchs """ # setup data = { 'trails': [{ 'name': 'name', 'id': 1, 'difficulty': 1, 'summary': 'sum', 'stars': 1, 'starVotes': 1, 'latitude': 1, 'longitude': 1, 'length': 1, 'ascent': 1, 'descent': 1, 'imgMedium': 'img' }] } ytdata = {'items': [{'id': {'videoId': 3}}]} trail = createtrail(data['trails'][0], ytdata) resort = Resort(name='name', id=1) trails = {} return_values = [data, ytdata] fetch.fetchJSON = MagicMock(side_effect=lambda x: return_values.pop(0)) # function call res = scrapeService.getTrails(1, 1, 1, resort, trails) # validation fetch.fetchJSON.assert_any_call( 'https://www.hikingproject.com/data/get-trails?lat=None&lon=None&maxDistance=10&maxResults=1&sort=distance&key=200217902-4d9f4e11973eb6aa502e868e55361062' ) fetch.fetchJSON.assert_any_call( "https://www.googleapis.com/youtube/v3/search?q=name trail&part=snippet&type=video&maxResults=25&key=AIzaSyDRwflQaI1Zq5bqKVQJ2YBDHb7l7oD1L2o" ) trailcontentequal(self, res[1], trail) self.assertEqual(len(resort.trails), 1)
def testphotos1(self): """ test getTrailsAndPhotos with valid fetchs """ # setup data = { 'trails': [{ 'name': 'name', 'id': 1, 'difficulty': 1, 'summary': 'sum', 'stars': 1, 'starVotes': 1, 'latitude': 1, 'longitude': 1, 'length': 1, 'ascent': 1, 'descent': 1, 'imgMedium': 'img' }] } ytdata = {'items': [{'id': {'videoId': 3}}]} trail = createtrail(data['trails'][0], ytdata) resort = Resort(name="name", id=1) photos = {} trails = {} return_values = [data, ytdata] fetch.fetchJSON = MagicMock(side_effect=lambda x: return_values.pop(0)) # function call res1, res2 = scrapeService.getTrailsAndPhotos(1, 1, 1, resort, trails, photos) # validation self.assertEqual(fetch.fetchJSON.call_count, 2) trailcontentequal(self, res1[1], trail) self.assertEqual(len(resort.trails), 1) self.assertEqual(photos, res2)
def testQueryResort(self): res = Resort() res.name = "Test Query Resort" res.id = 50 self.acc.insertData([res]) self.assertEqual(self.acc.queryResort(50).name, "Test Query Resort")
def createresort(data, yelpdata, ytdata): resort = Resort(name=data['name'], id=data['id']) resort.lifts = data['lift_count'] resort.runs = data['run_count'] resort.website = data['official_website'] resort.lat = data['latitude'] resort.lon = data['longitude'] resort.elev = data['top_elevation'] resort.mapid = data['ski_maps'][0]['id'] resort.yelprating = yelpdata['businesses'][0]['rating'] resort.reviewcount = yelpdata['businesses'][0]['review_count'] resort.youtubeid = ytdata['items'][0]['id']['videoId'] return resort
def getResort(id): try: data = fetch.fetchJSON("https://skimap.org/SkiAreas/view/" + str(id) + ".json") except ValueError as e: return Resort() res = Resort(name=data['name'], id=data['id']) res.lifts = data['lift_count'] if 'lift_count' in data else None res.runs = data['run_count'] if 'run_count' in data else None res.website = data[ 'official_website'] if 'official_website' in data else None res.lat = data['latitude'] if 'latitude' in data else None res.lon = data['longitude'] if 'longitude' in data else None res.elev = data['top_elevation'] if 'top_elevation' in data else None res.mapid = data['ski_maps'][0]['id'] if len( data['ski_maps']) > 0 else None maptree = None try: maptree = fetch.fetchXML("https://skimap.org/SkiMaps/view/" + str(res.mapid) + ".xml") maprender = maptree.find('render') if maprender is not None: res.mapurl = maprender.get('url') except ValueError as e: res.mapurl = None except ElementTree.ParseError as e: res.mapurl = None try: yelpdata = fetch.fetchYelpJSON( 'https://api.yelp.com/v3/businesses/search?&latitude=' + str(res.lat) + '&longitude=' + str(res.lon)) res.yelprating = yelpdata['businesses'][0]['rating'] res.reviewcount = yelpdata['businesses'][0]['review_count'] except ValueError: res.reviewcount = 0 except IndexError: res.reviewcount = 0 try: youtubedata = fetch.fetchJSON( 'https://www.googleapis.com/youtube/v3/search?q=' + res.name + '&part=snippet&type=video&maxResults=25&key=AIzaSyDRwflQaI1Zq5bqKVQJ2YBDHb7l7oD1L2o' ) res.youtubeid = youtubedata['items'][0]['id']['videoId'] except ValueError: res.youtubeid = None except IndexError: res.youtubeid = None return res