コード例 #1
0
ファイル: sea_level.py プロジェクト: freewayz/sea-level-api
 def sea_level_window_json(self):
     start = parse_datetime(self.TIDEPREDICTION_A['minute__datetime'])
     end = parse_datetime(self.TIDEPREDICTION_C['minute__datetime'])
     data = {
         'duration':
         {
             'total_seconds': (float)((end - start).seconds + 60),
         },
         'start':
         {
             'sea_level': self.TIDEPREDICTION_A['tide_level'] +
             self.SURGEPREDICTION_A['surge_level'],
             'datetime': self.TIDEPREDICTION_A['minute__datetime'],
         },
         'end':
         {
             'sea_level': self.TIDEPREDICTION_C['tide_level'] +
             self.SURGEPREDICTION_C['surge_level'],
             'datetime': self.TIDEPREDICTION_C['minute__datetime'],
         },
         'high_tide':
         {
             'sea_level': self.TIDEPREDICTION_B['tide_level'] +
             self.SURGEPREDICTION_B['surge_level'],
             'datetime': self.TIDEPREDICTION_B['minute__datetime'],
         },
     }
     return data
コード例 #2
0
ファイル: sea_level.py プロジェクト: mqnoy/sea-level-api
 def sea_level_window_json(self):
     start = parse_datetime(self.TIDEPREDICTION_A['minute__datetime'])
     end = parse_datetime(self.TIDEPREDICTION_C['minute__datetime'])
     data = {
         'duration': {
             'total_seconds': (float)((end - start).seconds + 60),
         },
         'start': {
             'sea_level':
             self.TIDEPREDICTION_A['tide_level'] +
             self.SURGEPREDICTION_A['surge_level'],
             'datetime':
             self.TIDEPREDICTION_A['minute__datetime'],
         },
         'end': {
             'sea_level':
             self.TIDEPREDICTION_C['tide_level'] +
             self.SURGEPREDICTION_C['surge_level'],
             'datetime':
             self.TIDEPREDICTION_C['minute__datetime'],
         },
         'high_tide': {
             'sea_level':
             self.TIDEPREDICTION_B['tide_level'] +
             self.SURGEPREDICTION_B['surge_level'],
             'datetime':
             self.TIDEPREDICTION_B['minute__datetime'],
         },
     }
     return data
コード例 #3
0
    def test_that_http_post_can_create_single_weather_prediction(self):
        response = self._post_json([PREDICTION_WEATHER])
        assert_equal(201, response.status_code)

        assert_equal(1, WeatherPrediction.objects.all().count())
        keys = map(lambda x: str.replace(x,
                                         'valid_to',
                                         'minute_to__datetime'),
                   PREDICTION_WEATHER.keys())
        keys = map(lambda x: str.replace(x,
                                         'valid_from',
                                         'minute_from__datetime'),
                   keys)

        prediction = WeatherPrediction.objects.get()
        ser_data = self._serialize(prediction, keys)[0]
        ser_data['valid_from'] = ser_data['minute_from__datetime']
        ser_data['valid_to'] = ser_data['minute_to__datetime']
        del ser_data['minute_from__datetime']
        del ser_data['minute_to__datetime']

        weather_data = copy.copy(PREDICTION_WEATHER)
        weather_data['valid_from'] = parse_datetime(weather_data['valid_from'])
        weather_data['valid_to'] = parse_datetime(weather_data['valid_to'])

        assert_equal(weather_data, ser_data)
コード例 #4
0
    def test_event_sent_doesnt_requeue(self):
        self.setUpPredictions()
        broadcast = self.Broadcast.create_broadcast()

        schedule = self.create_schedule()
        self.assertEqual(1, QSchedule.objects.all().count())

        event = self.get_event()
        event.datetime_sent = timezone.now()
        event.qschedule = None
        event.save()
        self.assertEqual(1, QSchedule.objects.all().count())

        schedule.departure = parse_datetime(self.SCHEDULE_DATETIME_12_01)
        schedule.save()

        self.assertEqual(1, QSchedule.objects.all().count())

        broadcast.minutes_before_departure = 45
        broadcast.save()

        self.assertEqual(1, QSchedule.objects.all().count())

        schedule.delete()
        broadcast.delete()
コード例 #5
0
    def test_event_sent_doesnt_requeue(self):
        self.setUpPredictions()
        broadcast = self.Broadcast.create_broadcast()

        schedule = self.create_schedule()
        self.assertEqual(1, QSchedule.objects.all().count())

        event = self.get_event()
        event.datetime_sent = timezone.now()
        event.qschedule = None
        event.save()
        self.assertEqual(1, QSchedule.objects.all().count())

        schedule.departure = parse_datetime(self.SCHEDULE_DATETIME_12_01)
        schedule.save()

        self.assertEqual(1, QSchedule.objects.all().count())

        broadcast.minutes_before_departure = 45
        broadcast.save()

        self.assertEqual(1, QSchedule.objects.all().count())

        schedule.delete()
        broadcast.delete()
コード例 #6
0
    def test_that_http_comparison_updated2_schedule(self):
        payload = self.payload_schedule()
        schedule = self.create_schedule(payload=payload)
        schedule.departure = parse_datetime(
            self.SCHEDULE_COMPARISON_C['departure_actual'])
        schedule.arrival = parse_datetime(
            self.SCHEDULE_COMPARISON_C['arrival_actual'])
        schedule.vessel = self.vessel2
        schedule.save()

        with freeze_time(payload['departure']):
            self.assertGetScheduleComparisons(
                200,
                [self.SCHEDULE_COMPARISON_C],
                url=_URL_COMPARISON_LIVERPOOL)

        schedule.delete()
コード例 #7
0
    def test_that_update_schedule_updates_queue(self):
        self.setUpPredictions()
        broadcast = self.Broadcast.create_broadcast()

        schedule = self.create_schedule()
        schedule.departure = parse_datetime(self.SCHEDULE_DATETIME_12_01)
        schedule.save()

        self.assertNextRun(broadcast, schedule)
コード例 #8
0
    def test_that_update_schedule_updates_queue(self):
        self.setUpPredictions()
        broadcast = self.Broadcast.create_broadcast()

        schedule = self.create_schedule()
        schedule.departure = parse_datetime(self.SCHEDULE_DATETIME_12_01)
        schedule.save()

        self.assertNextRun(broadcast, schedule)
コード例 #9
0
    def test_that_update_broadcast_no_predictions_deletes(self):
        self.setUpPredictions()
        broadcast = self.Broadcast.create_broadcast()

        schedule = self.create_schedule()
        schedule.departure = parse_datetime(self.SCHEDULE_DATETIME_13)
        schedule.save()

        self.assertEqual(0, QSchedule.objects.all().count())
        self.assertEventCount(0)

        schedule.delete()
        broadcast.delete()
コード例 #10
0
    def test_that_update_broadcast_no_predictions_deletes(self):
        self.setUpPredictions()
        broadcast = self.Broadcast.create_broadcast()

        schedule = self.create_schedule()
        schedule.departure = parse_datetime(self.SCHEDULE_DATETIME_13)
        schedule.save()

        self.assertEqual(0, QSchedule.objects.all().count())
        self.assertEventCount(0)

        schedule.delete()
        broadcast.delete()
コード例 #11
0
    def test_update_schedule(self):
        self.admin_create_broadcast()

        # A schedule is created
        schedule = self.create_schedule()

        # The schedule is updated
        schedule.departure = parse_datetime(self.SCHEDULE_DATETIME_12_01)
        schedule.save()

        # The django_q schedule is updated
        minutes = self.Broadcast.DATA_A['minutes_before_departure']
        self.assertScheduleNextRun(schedule, minutes)

        schedule.delete()
コード例 #12
0
    def test_update_schedule(self):
        self.admin_create_broadcast()

        # A schedule is created
        schedule = self.create_schedule()

        # The schedule is updated
        schedule.departure = parse_datetime(self.SCHEDULE_DATETIME_12_01)
        schedule.save()

        # The django_q schedule is updated
        minutes = self.Broadcast.DATA_A['minutes_before_departure']
        self.assertScheduleNextRun(schedule, minutes)

        schedule.delete()
コード例 #13
0
    def test_comparison_retrieve(self):
        # As a user, I wish to retrieve a comparision for a location
        # with: code, vessel_original, vessel_actual, vesssel_changed
        #       departure_original, departure_actual, departure_changed
        #       departure_delay
        #       arrival_original, arrival_actual, arrival_changed,
        #       arrival_delay

        # A schedule exists
        schedule = self.create_schedule()

        reference_time = self.SCHEDULE_A['departure']

        url_departure = self.live_server_url + \
            self.schedule_departures_comparison_endpoint.format(
                location_slug='liverpool',
                start=self.SCHEDULE_DATETIME_12,
                end=self.SCHEDULE_DATETIME_14)

        url_arrival = self.live_server_url + \
            self.schedule_arrivals_comparison_endpoint.format(
                location_slug='heysham',
                start=self.SCHEDULE_DATETIME_12,
                end=self.SCHEDULE_DATETIME_14)

        # The user retrieves the comparisions
        with freeze_time(arrow.get(reference_time).datetime):
            data_departure = self.assertRecordJSONExists(url_departure)[0]
            data_arrival = self.assertRecordJSONExists(url_arrival)[0]

        # The user notices the comparisons are correct
        self.assertDictEqual(self.SCHEDULE_COMPARISON_A, data_departure)
        self.assertDictEqual(self.SCHEDULE_COMPARISON_A, data_arrival)

        # The schedule has been revised
        schedule.departure = parse_datetime('2016-03-26T12:05:00Z')
        schedule.save()

        # The user retrieves the comparisions
        with freeze_time(arrow.get(reference_time).datetime):
            data_departure = self.assertRecordJSONExists(url_departure)[0]
            data_arrival = self.assertRecordJSONExists(url_arrival)[0]

        # The user notices the comparisons are correct
        self.assertDictEqual(self.SCHEDULE_COMPARISON_B, data_departure)
        self.assertDictEqual(self.SCHEDULE_COMPARISON_B, data_arrival)

        schedule.delete()
コード例 #14
0
ファイル: test_schedule.py プロジェクト: mqnoy/sea-level-api
    def test_comparison_retrieve(self):
        # As a user, I wish to retrieve a comparision for a location
        # with: code, vessel_original, vessel_actual, vesssel_changed
        #       departure_original, departure_actual, departure_changed
        #       departure_delay
        #       arrival_original, arrival_actual, arrival_changed,
        #       arrival_delay

        # A schedule exists
        schedule = self.create_schedule()

        reference_time = self.SCHEDULE_A['departure']

        url_departure = self.live_server_url + \
            self.schedule_departures_comparison_endpoint.format(
                location_slug='liverpool',
                start=self.SCHEDULE_DATETIME_12,
                end=self.SCHEDULE_DATETIME_14)

        url_arrival = self.live_server_url + \
            self.schedule_arrivals_comparison_endpoint.format(
                location_slug='heysham',
                start=self.SCHEDULE_DATETIME_12,
                end=self.SCHEDULE_DATETIME_14)

        # The user retrieves the comparisions
        with freeze_time(arrow.get(reference_time).datetime):
            data_departure = self.assertRecordJSONExists(url_departure)[0]
            data_arrival = self.assertRecordJSONExists(url_arrival)[0]

        # The user notices the comparisons are correct
        self.assertDictEqual(self.SCHEDULE_COMPARISON_A, data_departure)
        self.assertDictEqual(self.SCHEDULE_COMPARISON_A, data_arrival)

        # The schedule has been revised
        schedule.departure = parse_datetime('2016-03-26T12:05:00Z')
        schedule.save()

        # The user retrieves the comparisions
        with freeze_time(arrow.get(reference_time).datetime):
            data_departure = self.assertRecordJSONExists(url_departure)[0]
            data_arrival = self.assertRecordJSONExists(url_arrival)[0]

        # The user notices the comparisons are correct
        self.assertDictEqual(self.SCHEDULE_COMPARISON_B, data_departure)
        self.assertDictEqual(self.SCHEDULE_COMPARISON_B, data_arrival)

        schedule.delete()
コード例 #15
0
ファイル: schedule.py プロジェクト: freewayz/sea-level-api
 def related_payload(self, payload):
     get_location = lambda x, y: Location.objects.get(slug=x[y + '__slug'])
     get_minute = lambda x, y: \
         Minute.objects.get_or_create(
             datetime=parse_datetime(x[y + '__datetime']))[0]
     get_vessel = lambda x, y: Vessel.objects.get(slug=x[y + '__slug'])
     payload['origin'] = get_location(payload, 'origin')
     payload['destination'] = get_location(payload, 'destination')
     payload['departure'] = get_minute(payload, 'departure')
     payload['arrival'] = get_minute(payload, 'arrival')
     payload['vessel'] = get_vessel(payload, 'vessel')
     del payload['origin__slug']
     del payload['destination__slug']
     del payload['departure__datetime']
     del payload['arrival__datetime']
     del payload['vessel__slug']
     return payload
コード例 #16
0
    def test_that_http_post_can_create_single_weather_observation(self):
        data = json.dumps([OBSERVATION_A])
        response = self.client.post(_URL, data=data,
                                    content_type='application/json')
        assert_equal(201, response.status_code)

        assert_equal(1, WeatherObservation.objects.all().count())
        observation = WeatherObservation.objects.get()

        keys = map(lambda x: str.replace(x, 'datetime', 'minute__datetime'),
                   OBSERVATION_A.keys())
        serialized_data = WeatherObservation.objects\
            .filter(id=observation.id).values(*keys)[0]
        serialized_data['datetime'] = serialized_data['minute__datetime']
        del serialized_data['minute__datetime']
        weather_data = copy.copy(OBSERVATION_A)
        weather_data['datetime'] = parse_datetime(weather_data['datetime'])
        assert_equal(weather_data, serialized_data)
コード例 #17
0
    def test_that_http_post_can_create_single_weather_observation(self):
        data = json.dumps([OBSERVATION_A])
        response = self.client.post(_URL,
                                    data=data,
                                    content_type='application/json')
        assert_equal(201, response.status_code)

        assert_equal(1, WeatherObservation.objects.all().count())
        observation = WeatherObservation.objects.get()

        keys = map(lambda x: str.replace(x, 'datetime', 'minute__datetime'),
                   OBSERVATION_A.keys())
        serialized_data = WeatherObservation.objects\
            .filter(id=observation.id).values(*keys)[0]
        serialized_data['datetime'] = serialized_data['minute__datetime']
        del serialized_data['minute__datetime']
        weather_data = copy.copy(OBSERVATION_A)
        weather_data['datetime'] = parse_datetime(weather_data['datetime'])
        assert_equal(weather_data, serialized_data)
コード例 #18
0
ファイル: test_models.py プロジェクト: mqnoy/sea-level-api
 def test_multiple_history(self):
     schedule = self.create_schedule()
     schedule.departure = parse_datetime('2016-03-26T15:00:00Z')
     schedule.save()
     self.assertEqual(2, len(schedule.history.all()))
     schedule.delete()
コード例 #19
0
 def valid_to(self, value):
     if isinstance(value, str):
         value = parse_datetime(value)
     self.minute_to, _ = Minute.objects.get_or_create(datetime=value)
コード例 #20
0
 def test_multiple_history(self):
     schedule = self.create_schedule()
     schedule.departure = parse_datetime('2016-03-26T15:00:00Z')
     schedule.save()
     self.assertEqual(2, len(schedule.history.all()))
     schedule.delete()
コード例 #21
0
 def valid_to(self, value):
     if isinstance(value, str):
         value = parse_datetime(value)
     self.minute_to, _ = Minute.objects.get_or_create(datetime=value)
コード例 #22
0
 def datetime(self, value):
     if isinstance(value, str):
         value = parse_datetime(value)
     self.minute, _ = Minute.objects.get_or_create(datetime=value)
     return self.minute
コード例 #23
0
ファイル: schedule.py プロジェクト: freewayz/sea-level-api
 def arrival_datetime(self, value):
     if isinstance(value, str):
         value = parse_datetime(value)
     self.arrival, _ = Minute.objects.get_or_create(datetime=value)
     return self.arrival
コード例 #24
0
 def payload_minute_datetime(self, payload):
     payload['minute'], _ = Minute.objects.get_or_create(
         datetime=parse_datetime(payload['minute__datetime']))
     del payload['minute__datetime']
     return payload
コード例 #25
0
ファイル: base.py プロジェクト: mqnoy/sea-level-api
 def payload_minute_datetime(self, payload):
     payload['minute'], _ = Minute.objects.get_or_create(
         datetime=parse_datetime(payload['minute__datetime']))
     del payload['minute__datetime']
     return payload