예제 #1
0
    def test_process_existing_source(self):
        arbitrary_url = 'http://www.go.com/101'
        arbitrary_route_name = 'Something'
        arbitrary_source = models.LocationSource.objects.create(
            name='Whatnot',
            user=self.user,
            type=self.source_type,
            active=True,
            data={
                'url': arbitrary_url,
                'known_points': {
                    'alpha': 'arbitrary_value'
                },
            })
        arbitrary_document = MagicMock()
        arbitrary_time = datetime.datetime.utcnow().replace(tzinfo=utc)
        arbitrary_points = [{
            'lat': -122,
            'lng': 45,
            'key': 'alpha',
            'time': 1
        }, {
            'lat': -123,
            'lng': 44,
            'key': 'beta',
            'time': 2
        }]

        consumer = RunmeterConsumer(arbitrary_source)
        consumer._get_document = MagicMock(return_value=arbitrary_document)
        consumer.get_start_time = MagicMock(return_value=arbitrary_time)
        consumer.get_route_name = MagicMock(return_value=arbitrary_route_name)
        consumer.get_points = MagicMock(return_value=arbitrary_points)
        consumer.is_active = MagicMock(return_value=True)

        consumer.process()

        consumer._get_document.assert_called_with(arbitrary_url)
        consumer.get_start_time.assert_called_with(arbitrary_document)
        consumer.get_route_name.assert_called_with(arbitrary_document)
        consumer.get_points.assert_called_with(arbitrary_document,
                                               arbitrary_time)

        actual_points = models.LocationSnapshot.objects.order_by('date')
        self.assertEqual(actual_points.count(), 1)

        assertions = {
            'date': arbitrary_time + datetime.timedelta(seconds=2),
            'source': arbitrary_source,
            'location': Point(-123, 44)
        }
        for k, v in assertions.items():
            self.assertEqual(getattr(actual_points[0], k), v)

        self.assertTrue(
            models.LocationSource.objects.get(pk=arbitrary_source.pk).active)
    def test_get_points(self):
        arbitrary_time = datetime.datetime.utcnow().replace(tzinfo=utc)
        document = self._get_sample_document()
        consumer = RunmeterConsumer(None)
        actual_value = consumer.get_points(document, arbitrary_time)

        with open(os.path.join(os.path.dirname(__file__), "files/expected_points.json")) as incoming:
            expected_value = json.loads(incoming.read())

        self.assertEqual(actual_value, expected_value)
    def test_process_new_source(self):
        arbitrary_url = "http://www.go.com/101"
        arbitrary_route_name = "Something"
        arbitrary_source = models.LocationSource.objects.create(
            name="Whatnot",
            user=self.user,
            type=self.source_type,
            active=True,
            data={"url": arbitrary_url, "known_points": {}},
        )
        arbitrary_document = MagicMock()
        arbitrary_time = datetime.datetime.utcnow().replace(tzinfo=utc)
        arbitrary_points = [
            {"lat": -122, "lng": 45, "key": "alpha", "time": 1},
            {"lat": -123, "lng": 44, "key": "beta", "time": 2},
        ]

        consumer = RunmeterConsumer(arbitrary_source)
        consumer._get_document = MagicMock(return_value=arbitrary_document)
        consumer.get_start_time = MagicMock(return_value=arbitrary_time)
        consumer.get_route_name = MagicMock(return_value=arbitrary_route_name)
        consumer.get_points = MagicMock(return_value=arbitrary_points)
        consumer.is_active = MagicMock(return_value=False)

        consumer.process()

        consumer._get_document.assert_called_with(arbitrary_url)
        consumer.get_start_time.assert_called_with(arbitrary_document)
        consumer.get_route_name.assert_called_with(arbitrary_document)
        consumer.get_points.assert_called_with(arbitrary_document, arbitrary_time)

        actual_points = models.LocationSnapshot.objects.order_by("date")
        self.assertEqual(actual_points.count(), 2)

        first_assertions = {
            "date": arbitrary_time + datetime.timedelta(seconds=1),
            "source": arbitrary_source,
            "location": Point(-122, 45),
        }
        for k, v in first_assertions.items():
            self.assertEqual(getattr(actual_points[0], k), v)

        second_assertions = {
            "date": arbitrary_time + datetime.timedelta(seconds=2),
            "source": arbitrary_source,
            "location": Point(-123, 44),
        }
        for k, v in second_assertions.items():
            self.assertEqual(getattr(actual_points[1], k), v)

        self.assertFalse(models.LocationSource.objects.get(pk=arbitrary_source.pk).active)
예제 #4
0
    def test_get_points(self):
        arbitrary_time = datetime.datetime.utcnow().replace(tzinfo=utc)
        document = self._get_sample_document()
        consumer = RunmeterConsumer(None)
        actual_value = consumer.get_points(document, arbitrary_time)

        with open(
                os.path.join(
                    os.path.dirname(__file__),
                    'files/expected_points.json',
                )) as incoming:
            expected_value = json.loads(incoming.read())

        self.assertEqual(
            actual_value,
            expected_value,
        )