Files
electric-vehicle-battery-ch…/test/test_shift.py
2023-05-18 18:21:00 -04:00

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