Пример #1
0
 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))
Пример #2
0
 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")
Пример #3
0
 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
Пример #4
0
 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")
Пример #5
0
 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)
Пример #6
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)
Пример #7
0
 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])
Пример #8
0
 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)
Пример #9
0
 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)
Пример #10
0
 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")
Пример #11
0
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
Пример #12
0
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