208 lines
6.2 KiB
Python
208 lines
6.2 KiB
Python
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
|