def test_doesNotUpdateSeasonTicketPrices_forNonNRStations(self): responses.add(responses.GET, 'http://api.brfares.com/querysimple', body="Bad Request", status=400) self.mock_db.collection('stations').document('LBG').set(lbg) self.mock_db.collection('stations').document('BAH').set(bah) self.mock_db.collection('destinations').document('LBG').set({ **lbg, 'journeys': helpers.make_journey_dict(bah), 'journey_costs_updated': datetime(2018, 12, 2) }) updaters.update(self.interactor) journey = self.mock_db \ .collection('destinations') \ .document('LBG') \ .collection('journeys') \ .document('BAH') \ .get().to_dict() self.assertEqual(0, len(responses.calls)) self.assertTrue('season_ticket' not in journey)
def test_updatesOneDestinationPerRun(self): self._stub_directions_response(10) self.mock_db.collection('destinations').document('LBG').set({ **lbg, 'journey_times_updated': datetime.datetime(2018, 12, 1) }) self.mock_db.collection('destinations').document('KGX').set({ **kgx, 'journey_times_updated': datetime.datetime(2018, 12, 2) }) updaters.update(self.interactor) journeys_to_lbg = self.mock_db \ .collection('destinations') \ .document('LBG') \ .collection('journeys') \ .get() journeys_to_kgx = self.mock_db \ .collection('destinations') \ .document('KGX') \ .collection('journeys') \ .get() self.assertEqual(1, len(journeys_to_lbg)) self.assertEqual(0, len(journeys_to_kgx))
def test_updatesTimestampAfterRun(self): self._stub_directions_response(10) original_update_time = datetime.datetime(2018, 12, 1) self.mock_db.collection('destinations').document('LBG').set({ **lbg, 'journey_times_updated': original_update_time }) updaters.update(self.interactor) new_update_time = self.mock_db.collection('destinations').document('LBG')\ .get().to_dict()['journey_times_updated'] self.assertGreater(new_update_time, original_update_time)
def test_createsJourneyEntry_ifItDoesNotExist(self): self.mock_db.collection('stations').document('LBG').set(lbg) self.mock_db.collection('stations').document('KGX').set(kgx) self.mock_db.collection('destinations').document('LBG').set({ **lbg, 'journey_costs_updated': datetime(2018, 12, 2) }) updaters.update(self.interactor) journey = self.mock_db \ .collection('destinations') \ .document('LBG') \ .collection('journeys') \ .document('KGX') \ .get().to_dict() expected = {'min_zone': '1', 'max_zone': '1', 'annual_price': 1404} self.assertEqual(expected, journey['travelcard'])
def test_doesNotUpdateDestinationsUpdatedThisYear(self): self.mock_db.collection('stations').document('LBG').set(lbg) self.mock_db.collection('stations').document('KGX').set(kgx) this_year = date.today().year self.mock_db.collection('destinations').document('LBG').set({ **lbg, 'journey_costs_updated': datetime(this_year, 12, 2) }) updaters.update(self.interactor) journey = self.mock_db \ .collection('destinations') \ .document('LBG') \ .collection('journeys') \ .document('KGX') \ .get().to_dict() self.assertTrue('travelcard' not in journey)
def test_updatesTheLeastRecentlyUpdated(self): self._stub_directions_response(10) self.mock_db.collection('destinations').document('LBG').set({ **lbg, 'journey_times_updated': datetime.datetime(2018, 12, 2) }) self.mock_db.collection('destinations').document('KGX').set({ **kgx, 'journey_times_updated': datetime.datetime(2018, 12, 1) }) updaters.update(self.interactor) journeys_to_kgx = self.mock_db \ .collection('destinations') \ .document('KGX') \ .collection('journeys') \ .get() self.assertEqual(1, len(journeys_to_kgx)) self.assertRequestParamsCorrect(origin=lbg, destination=kgx)
def test_updatesTravelcardPrices_forStationsWithSpecialFares(self): self.mock_db.collection('stations').document('LBG').set(lbg) self.mock_db.collection('stations').document('SNF').set(snf) self.mock_db.collection('destinations').document('LBG').set({ **lbg, 'journeys': helpers.make_journey_dict(snf), 'journey_costs_updated': datetime(2018, 12, 2) }) updaters.update(self.interactor) journey = self.mock_db \ .collection('destinations') \ .document('LBG') \ .collection('journeys') \ .document('SNF') \ .get().to_dict() expected = {'min_zone': '1', 'max_zone': 'SNF', 'annual_price': 4364} self.assertEqual(expected, journey['travelcard'])
def test_updatesTravelcardPrices_forMultiZoneStations_bothInZone1(self): self.mock_db.collection('stations').document('VXH').set(vxh) self.mock_db.collection('stations').document('LBG').set(lbg) self.mock_db.collection('destinations').document('VXH').set({ **vxh, 'journeys': helpers.make_journey_dict(lbg), 'journey_costs_updated': datetime(2018, 12, 2) }) updaters.update(self.interactor) journey = self.mock_db \ .collection('destinations') \ .document('VXH') \ .collection('journeys') \ .document('LBG') \ .get().to_dict() expected = {'min_zone': '1', 'max_zone': '1', 'annual_price': 1404} self.assertEqual(expected, journey['travelcard'])
def test_updatesTheLeastRecentlyUpdated(self): self.mock_db.collection('stations').document('LBG').set(lbg) self.mock_db.collection('stations').document('KGX').set(kgx) self.mock_db.collection('destinations').document('LBG').set({ **lbg, 'journey_costs_updated': datetime(2018, 12, 2) }) self.mock_db.collection('destinations').document('KGX').set({ **kgx, 'journey_costs_updated': datetime(2018, 12, 1) }) updaters.update(self.interactor) journeys_to_kgx = self.mock_db \ .collection('destinations') \ .document('KGX') \ .collection('journeys') \ .get() self.assertEqual(1, len(journeys_to_kgx))
def update_journey_costs(): key = json.loads(os.environ['GCLOUD_SA_KEY']) credentials = service_account.Credentials.from_service_account_info(key) database = Database( firestore.Client(project=os.environ['GCLOUD_PROJECT_ID'], credentials=credentials)) interactor = JourneyCostsInteractor(db=database) update_results = updaters.update(interactor) print("Journey costs: " + update_results.message) if update_results.has_errors: sys.exit(1)
def test_updatesJourneyTimes(self): self._stub_directions_response(10) self.mock_db.collection('destinations').document('LBG').set({ **lbg, 'journey_times_updated': 0 }) update_results = updaters.update(self.interactor) self.assertFalse(update_results.has_errors) journey = self.mock_db \ .collection('destinations') \ .document('LBG') \ .collection('journeys') \ .document('KGX') \ .get().to_dict() self.assertEqual(10, journey['time']) self.assertEqual(kgx, journey['origin']) self.assertRequestParamsCorrect(origin=kgx, destination=lbg)
def test_updatesSeasonTicketPrices_forNRStations(self): self.mock_db.collection('stations').document('LBG').set(lbg) self.mock_db.collection('stations').document('SRA').set(sra) self.mock_db.collection('destinations').document('LBG').set({ **lbg, 'journeys': helpers.make_journey_dict(sra), 'journey_costs_updated': datetime(2018, 12, 2) }) update_results = updaters.update(self.interactor) self.assertFalse(update_results.has_errors) journey = self.mock_db \ .collection('destinations') \ .document('LBG') \ .collection('journeys') \ .document('SRA') \ .get().to_dict() expected = {'annual_price': 1200} self.assertEqual(expected, journey['season_ticket'])
def test_updatesTravelcardPrices(self): self.mock_db.collection('stations').document('LBG').set(lbg) self.mock_db.collection('stations').document('KGX').set(kgx) self.mock_db.collection('destinations').document('LBG').set({ **lbg, 'journeys': helpers.make_journey_dict(kgx), 'journey_costs_updated': datetime(2018, 12, 2) }) update_results = updaters.update(self.interactor) self.assertFalse(update_results.has_errors) journey = self.mock_db \ .collection('destinations') \ .document('LBG') \ .collection('journeys') \ .document('KGX') \ .get().to_dict() expected = {'min_zone': '1', 'max_zone': '1', 'annual_price': 1404} self.assertEqual(expected, journey['travelcard'])