from flask import json from app.extensions import db from app.models.shift import Shift from app.models.battery_change import BatteryChange from test import client from test.utils import create_vehicles def test_list_shifts_empty_db_empty_list(client): rv = client.get('/shifts') assert len(json.loads(rv.data)) == 0 def test_list_shifts_single_record(client): db.session.add(Shift()) rv = client.get('/shifts') assert len(json.loads(rv.data)) == 1 def test_get_shift(client): db.session.add(Shift()) db.session.add(Shift()) db.session.commit() rv = client.get('/shifts') assert len(json.loads(rv.data)) == 2 rv = client.get('/shifts/1') data = json.loads(rv.data) assert data['id'] == 1 rv = client.get('/shifts/2') data = json.loads(rv.data) assert data['id'] == 2 def test_create_empty_shift(client): client.post('/shifts') rv = client.get('/shifts/1') data = json.loads(rv.data) assert data['id'] == 1 assert data['battery_changes'] == [] def test_create_shift_with_vehicles(client): create_vehicles() rv = client.get('/vehicles') assert len(json.loads(rv.data)) == 15 client.post('/shifts', data={ 'vehicles': '1,5,10' }) rv = client.get('/shifts/1') data = json.loads(rv.data) assert data['id'] == 1 assert len(data['battery_changes']) == 3 assert data['battery_changes'][0]['vehicle_id'] == 1 assert data['battery_changes'][1]['vehicle_id'] == 5 assert data['battery_changes'][2]['vehicle_id'] == 10 assert data['battery_changes'][0]['completed'] == False assert data['battery_changes'][0]['shift_id'] == 1 # Get vehicle data directly in shift assert data['battery_changes'][0]['vehicle']['license_plate'] == 'NY0001' assert data['battery_changes'][1]['vehicle']['location_long'] == -73.988838 assert data['battery_changes'][2]['vehicle']['battery_level'] == 22 def add_vehicle_to_shift(client): create_vehicles() client.post('/shifts') rv = client.get('/shifts/1') data = json.loads(rv.data) assert data['id'] == 1 assert data['battery_changes'] == [] rv = client.post('shifts/1/add/2') data = json.loads(rv.data) assert data['id'] == 1 assert len(data['battery_changes']) == 1 assert data['battery_changes'][0]['vehicle_id'] == 2 rv = client.post('shifts/1') data = json.loads(rv.data) assert data['id'] == 1 assert len(data['battery_changes']) == 1 assert data['battery_changes'][0]['vehicle_id'] == 2 # Shouldnt be able to add same vehicle to shift rv = client.post('shifts/1/vehicles/2') rv = client.post('shifts/1') data = json.loads(rv.data) assert data['id'] == 1 assert len(data['battery_changes']) == 1 assert data['battery_changes'][0]['vehicle_id'] == 2 def test_remove_vehicle_from_shift(client): create_vehicles() rv = client.get('/vehicles') assert len(json.loads(rv.data)) == 15 client.post('/shifts', data={ 'vehicles': '1,5,10' }) rv = client.delete('shifts/1/vehicles/5') data = json.loads(rv.data) assert data['id'] == 1 assert len(data['battery_changes']) == 2 assert data['battery_changes'][0]['vehicle_id'] == 1 assert data['battery_changes'][1]['vehicle_id'] == 10 rv = client.get('/vehicles/10') data = json.loads(rv.data) assert len(data['shifts']) == 1 assert data['shifts'][0]['id'] == 1 # negative testing rv = client.delete('shifts/1/vehicles/9') assert rv.status_code == 404 rv = client.delete('shifts/1/vehicles/5') assert rv.status_code == 404 def test_delete_shift(client): create_vehicles() rv = client.get('/vehicles') assert len(json.loads(rv.data)) == 15 client.post('/shifts', data={ 'vehicles': '1,5,10' }) rv = client.get('/shifts/1') data = json.loads(rv.data) assert data['id'] == 1 assert len(data['battery_changes']) == 3 client.delete('/shifts/1') rv = client.get('/shifts') assert len(json.loads(rv.data)) == 0 changes = BatteryChange.query.all() assert len(changes) == 0 # negative testing rv = client.delete('/shifts/5') assert rv.status_code == 404 def test_complete_vehicle_charge(client): create_vehicles() client.post('/shifts', data={ 'vehicles': '1,5,10' }) rv = client.get('/shifts/1') data = json.loads(rv.data) assert data['id'] == 1 assert len(data['battery_changes']) == 3 assert data['battery_changes'][0]['completed'] == False assert data['battery_changes'][1]['completed'] == False assert data['battery_changes'][2]['completed'] == False rv = client.post('/shifts/1/vehicles/5/completed') data = json.loads(rv.data) assert data['battery_changes'][0]['completed'] == False assert data['battery_changes'][1]['completed'] == True assert data['battery_changes'][2]['completed'] == False # Negative testing rv = client.post('/shifts/2/vehicles/5/completed') # shift not found assert rv.status_code == 404 rv = client.post('/shifts/1/vehicles/6/completed') # vehicle not found assert rv.status_code == 404 def test_get_vehicle_in_shift(client): create_vehicles() client.post('/shifts', data={ 'vehicles': '1,5,10' }) rv = client.get('/shifts/1/vehicles/10') data = json.loads(rv.data) assert data['vehicle']['license_plate'] == 'NY0010' assert data['completed'] == False rv = client.get('shifts/1/vehicles/11') assert rv.status_code == 404 def test_shift_all_completed(client): create_vehicles() client.post('/shifts', data={ 'vehicles': '1,5,10' }) rv = client.get('/shifts/1') data = json.loads(rv.data) assert data['all_completed'] == False client.post('/shifts/1/vehicles/1/completed') rv = client.get('/shifts/1') data = json.loads(rv.data) assert data['all_completed'] == False client.post('/shifts/1/vehicles/5/completed') rv = client.get('/shifts/1') data = json.loads(rv.data) assert data['all_completed'] == False client.post('/shifts/1/vehicles/10/completed') rv = client.get('/shifts/1') data = json.loads(rv.data) assert data['all_completed'] == True