class PointOfInterestEndpointTest(unittest.TestCase):

    def setUp(self):
        self._poi_service = Mock()
        self._endpoint = PointOfInterestEndpoint('testplaces', self._poi_service)

    def test_point_of_interest_returns_404_when_url_invalid(self):
        self._poi_service.select_by_slug.return_value = None
        self.assertRaises(NotFound, self._endpoint.get, 'foo:bar')

    def test_point_of_interest_returns_correct_self_when_url_valid(self):
        self._poi_service.select_by_slug.return_value = PointOfInterest()
        response = self._get_response_json()
        self.assertEquals('http://mollyproject.org/apps/places/point-of-interest', response['self'])

    def test_href_included_in_response(self):
        self._poi_service.select_by_slug.return_value = PointOfInterest()
        response = self._get_response_json()
        self.assertEquals('http://localhost/poi/foo:bar', response['href'])

    def test_poi_serialised_in_response(self):
        self._poi_service.select_by_slug.return_value = PointOfInterest(telephone_number='999')
        response = self._get_response_json()
        self.assertEquals('999', response['poi']['telephone_number'])

    def test_poi_has_link_to_nearby_search(self):
        self._poi_service.select_by_slug.return_value = PointOfInterest(
            location=Point(-26.1, 4.5)
        )
        response = self._get_response_json()
        self.assertEquals('http://localhost/nearby/4.5%2C-26.1/', response['links']['nearby'])

    def _get_response_json(self):
        app = Flask(__name__)
        app.add_url_rule('/poi/<slug>', 'testplaces.poi', self._endpoint.get)
        app.add_url_rule('/nearby/<float:lat>,<float:lon>/', 'testplaces.nearby', lambda: None)
        with app.test_request_context('/', headers=[('Accept', 'application/json')]):
            return json.loads(self._endpoint.get('foo:bar').data)
 def setUp(self):
     self._poi_service = Mock()
     self._endpoint = PointOfInterestEndpoint('testplaces', self._poi_service)