Merge remote-tracking branch 'origin/rate' into rate
This commit is contained in:
commit
b0d8ca39fe
|
@ -1,17 +1,5 @@
|
|||
Type,Chassis,Tag 1,Tag 2,Tag 3,Serial Number,Model,Manufacturer,Registered in,Price,Processor,RAM (GB),Data Storage Size (MB),Rate,Range,Processor Rate,Processor Range,RAM Rate,RAM Range,Data Storage Rate,Data Storage Range,DataStorage 1,DataStorage 1 Manufacturer,DataStorage 1 Model,DataStorage 1 Serial Number,DataStorage 2,DataStorage 2 Manufacturer,DataStorage 2 Model,DataStorage 2 Serial Number,DataStorage 3,DataStorage 3 Manufacturer,DataStorage 3 Model,DataStorage 3 Serial Number,DataStorage 4,DataStorage 4 Manufacturer,DataStorage 4 Model,DataStorage 4 Serial Number,Display 1,Display 1 Manufacturer,Display 1 Model,Display 1 Serial Number,GraphicCard 1,GraphicCard 1 Manufacturer,GraphicCard 1 Model,GraphicCard 1 Serial Number,GraphicCard 1 Memory (MB),GraphicCard 2,GraphicCard 2 Manufacturer,GraphicCard 2 Model,GraphicCard 2 Serial Number,Motherboard 1,Motherboard 1 Manufacturer,Motherboard 1 Model,Motherboard 1 Serial Number,NetworkAdapter 1,NetworkAdapter 1 Manufacturer,NetworkAdapter 1 Model,NetworkAdapter 1 Serial Number,NetworkAdapter 2,NetworkAdapter 2 Manufacturer,NetworkAdapter 2 Model,NetworkAdapter 2 Serial Number,Processor 1,Processor 1 Manufacturer,Processor 1 Model,Processor 1 Serial Number,Processor 1 Number of cores,Processor 1 Speed (GHz),Processor 2,Processor 2 Manufacturer,Processor 2 Model,Processor 2 Serial Number,RamModule 1,RamModule 1 Manufacturer,RamModule 1 Model,RamModule 1 Serial Number,RamModule 1 Size (MB),RamModule 1 Speed (MHz),RamModule 2,RamModule 2 Manufacturer,RamModule 2 Model,RamModule 2 Serial Number,RamModule 3,RamModule 3 Manufacturer,RamModule 3 Model,RamModule 3 Serial Number,RamModule 4,RamModule 4 Manufacturer,RamModule 4 Model,RamModule 4 Serial Number,SoundCard 1,SoundCard 1 Manufacturer,SoundCard 1 Model,SoundCard 1 Serial Number,SoundCard 2,SoundCard 2 Manufacturer,SoundCard 2 Model,SoundCard 2 Serial Number
|
||||
Laptop,Netbook,,,,b8oaas048286,1001pxd,asustek computer inc.,Wed Mar 6 18:22:05 2019,,intel atom cpu n455 @ 1.66ghz,1024,238475,1.98,Very low,1.31,Very low,1.53,Very low,3.76,Medium,,,,,,,,,,,,,,,,,,,,,"GraphicCard 5: model atom processor d4xx/d5xx/n4xx/n5xx integrated graphics controller, S/N None",,,,256,,,,,"Motherboard 10: model 1001pxd, S/N eee0123456789",eee0123456789,eee0123456789,eee0123456789,"NetworkAdapter 2: model ar9285 wireless network adapter, S/N 74:2f:68:8b:fd:c8",74:2f:68:8b:fd:c8,74:2f:68:8b:fd:c8,74:2f:68:8b:fd:c8,"NetworkAdapter 3: model ar8152 v2.0 fast ethernet, S/N 14:da:e9:42:f6:7c",14:da:e9:42:f6:7c,14:da:e9:42:f6:7c,14:da:e9:42:f6:7c,"Processor 4: model intel atom cpu n455 @ 1.66ghz, S/N None",,,,1,1.667,,,,,"RamModule 8: model None, S/N None",,,,1024,667,,,,,,,,,,,,,"SoundCard 6: model nm10/ich7 family high definition audio controller, S/N None",,,,"SoundCard 7: model usb 2.0 uvc vga webcam, S/N 0x0001",0x0001,0x0001,0x0001
|
||||
NetworkAdapter,,,,,74:2f:68:8b:fd:c8,ar9285 wireless network adapter,qualcomm atheros,Wed Mar 6 18:22:05 2019,,1.98,Very low,1.31,Very low,1.53,Very low,3.76,Medium
|
||||
NetworkAdapter,,,,,14:da:e9:42:f6:7c,ar8152 v2.0 fast ethernet,qualcomm atheros,Wed Mar 6 18:22:05 2019,,1.98,Very low,1.31,Very low,1.53,Very low,3.76,Medium
|
||||
Processor,,,,,,intel atom cpu n455 @ 1.66ghz,intel corp.,Wed Mar 6 18:22:05 2019,,1.98,Very low,1.31,Very low,1.53,Very low,3.76,Medium
|
||||
GraphicCard,,,,,,atom processor d4xx/d5xx/n4xx/n5xx integrated graphics controller,intel corporation,Wed Mar 6 18:22:05 2019,,1.98,Very low,1.31,Very low,1.53,Very low,3.76,Medium
|
||||
SoundCard,,,,,,nm10/ich7 family high definition audio controller,intel corporation,Wed Mar 6 18:22:05 2019,,1.98,Very low,1.31,Very low,1.53,Very low,3.76,Medium
|
||||
SoundCard,,,,,0x0001,usb 2.0 uvc vga webcam,azurewave,Wed Mar 6 18:22:05 2019,,1.98,Very low,1.31,Very low,1.53,Very low,3.76,Medium
|
||||
RamModule,,,,,,,,Wed Mar 6 18:22:05 2019,,1.98,Very low,1.31,Very low,1.53,Very low,3.76,Medium
|
||||
HardDrive,,,,,e2024242cv86hj,hts54322,hitachi,Wed Mar6 18:22:05 2019,,1.98,Very low,1.31,Very low,1.53,Very low,3.76,Medium
|
||||
Motherboard,,,,,eee0123456789,1001pxd,asustek computer inc.,Wed Mar 6 18:22:05 2019,,1.98,Very low,1.31,Very low,1.53,Very low,3.76,Medium
|
||||
Desktop,Microtower,,,,d1s,d1ml,d1mr,Wed Mar 6 18:22:06 2019,,p1ml,0,0,0.8,Very low,1.0,Very low,1.0,Very low,1.0,Very low,,,,,,,,,,,,,,,,,,,,,"GraphicCard 12: model gc1ml, S/N gc1s",gc1s,gc1s,gc1s,,,,,,,,,,,,,,,,,,"Processor 14: model p1ml, S/N p1s",p1s,p1s,p1s,,1.6,,,,,"RamModule 13: model rm1ml, S/N rm1s",rm1s,rm1s,rm1s,,1333,,,,,,,,,,,,,,,,,,,,
|
||||
GraphicCard,,,,,gc1s,gc1ml,gc1mr,Wed Mar 6 18:22:06 2019,,0.8,Very low,1.0,Very low,1.0,Very low,1.0,Very low
|
||||
RamModule,,,,,rm1s,rm1ml,rm1mr,Wed Mar 6 18:22:06 2019,,0.8,Very low,1.0,Very low,1.0,Very low,1.0,Very low
|
||||
Processor,,,,,p1s,p1ml,p1mr,Wed Mar 6 18:22:06 2019,,0.8,Very low,1.0,Very low,1.0,Very low,1.0,Very low
|
||||
Keyboard,,,,,bar,foo,baz,Wed Mar 6 18:22:06 2019,
|
||||
ComputerMonitor,,,,,cn0fp446728728541c8s,1707fpf,dell,Wed Mar 6 18:22:06 2019,
|
||||
|
|
Can't render this file because it has a wrong number of fields in line 3.
|
|
@ -28,7 +28,8 @@ def test_workbench_rate_db():
|
|||
db.session.commit()
|
||||
|
||||
|
||||
# TODO JN is necessary this test if in test multiples rates we are checking same case??
|
||||
@pytest.mark.xfail(reason='Rate algorithm v1 have the limitation of not '
|
||||
'recompute rate when post new visual test')
|
||||
def test_rate_with_multiple_visual_tests(user: UserClient):
|
||||
"""Perform a ComputerRate and then update the device with a new VisualTest.
|
||||
|
||||
|
@ -160,7 +161,6 @@ def test_multiple_rates(user: UserClient):
|
|||
rate1, price1 = RateComputer.compute(pc)
|
||||
|
||||
# asserts rate1 ...
|
||||
# TODO JN is also necessary add asserts for component_range??
|
||||
assert rate1.data_storage == 4.02
|
||||
assert rate1.processor == 3.95
|
||||
assert rate1.ram == 3.8
|
||||
|
@ -169,18 +169,14 @@ def test_multiple_rates(user: UserClient):
|
|||
assert rate1.functionality == 0.4
|
||||
|
||||
assert rate1.rating == 4.62
|
||||
# assert rate1.rating_range == 'High'
|
||||
|
||||
# TODO JN better option to get and assert price??
|
||||
assert price1.price == Decimal('92.4001')
|
||||
assert math.isclose(rate1.price.price, 92.40, rel_tol=0.001)
|
||||
|
||||
hdd = SolidStateDrive(size=476940)
|
||||
hdd.actions_one.add(BenchmarkDataStorage(read_speed=222, write_speed=169))
|
||||
cpu = Processor(cores=1, speed=3.0)
|
||||
cpu.actions_one.add(BenchmarkProcessor(rate=16069.44))
|
||||
# TODO JN best form to update pc components/benchmarks??
|
||||
pc.components = {
|
||||
pc.components |= {
|
||||
hdd,
|
||||
RamModule(size=2048, speed=1067),
|
||||
RamModule(size=2048, speed=1067),
|
||||
|
@ -192,12 +188,8 @@ def test_multiple_rates(user: UserClient):
|
|||
functionality_range=FunctionalityRange.B,
|
||||
device=pc)
|
||||
|
||||
# asserts pc characteristics/benchmarks/tests change
|
||||
|
||||
rate2, price2 = RateComputer.compute(pc)
|
||||
|
||||
# asserts rate2 ...
|
||||
|
||||
assert rate2.data_storage == 4.27
|
||||
assert rate2.processor == 3.61
|
||||
assert rate2.ram == 4.12
|
||||
|
@ -206,7 +198,5 @@ def test_multiple_rates(user: UserClient):
|
|||
assert rate2.functionality == -0.5
|
||||
|
||||
assert rate2.rating == 3.37
|
||||
# assert rate2.rating_range == 'Medium'
|
||||
|
||||
assert rate2.price.price == Decimal('67.4001')
|
||||
assert math.isclose(price2.price, 67.40, rel_tol=0.001)
|
||||
|
|
|
@ -135,11 +135,18 @@ def test_export_keyboard(user: UserClient):
|
|||
assert fixture_csv[1] == export_csv[1], 'Component information are not equal'
|
||||
|
||||
|
||||
# TODO JN fix why components also have all rate fields
|
||||
def test_export_multiple_different_devices(user: UserClient):
|
||||
"""
|
||||
Test a export multiple different device types (like computers, keyboards, monitors, ...)
|
||||
Test function 'Export' of multiple different device types (like
|
||||
computers, keyboards, monitors, etc..)
|
||||
"""
|
||||
# Open fixture csv and transform to list
|
||||
with Path(__file__).parent.joinpath('files').joinpath('multiples_devices.csv').open() \
|
||||
as csv_file:
|
||||
fixture_csv = list(csv.reader(csv_file))
|
||||
for row in fixture_csv:
|
||||
del row[8] # We remove the 'Registered in' column
|
||||
|
||||
# Post all devices snapshots
|
||||
snapshot_pc, _ = user.post(file('real-eee-1001pxd.snapshot.11'), res=Snapshot)
|
||||
snapshot_empty, _ = user.post(file('basic.snapshot'), res=Snapshot)
|
||||
|
@ -148,32 +155,13 @@ def test_export_multiple_different_devices(user: UserClient):
|
|||
|
||||
csv_str, _ = user.get(res=documents.DocumentDef.t,
|
||||
item='devices/',
|
||||
query=[('filter', {'type': ['Computer', 'Keyboard', 'Monitor']})],
|
||||
accept='text/csv')
|
||||
f = StringIO(csv_str)
|
||||
obj_csv = csv.reader(f, f)
|
||||
export_csv = list(obj_csv)
|
||||
|
||||
# Open fixture csv and transform to list
|
||||
with Path(__file__).parent.joinpath('files').joinpath('multiples_devices.csv').open() \
|
||||
as csv_file:
|
||||
obj_csv = csv.reader(csv_file)
|
||||
fixture_csv = list(obj_csv)
|
||||
for row in export_csv:
|
||||
del row[8]
|
||||
|
||||
assert fixture_csv[0] == export_csv[0], 'Headers are not equal'
|
||||
|
||||
max_range = max(len(export_csv), len(fixture_csv)) - 1
|
||||
# check if all devices information is correct
|
||||
for i in range(1, max_range):
|
||||
if isinstance(datetime.strptime(export_csv[i][8], '%c'), datetime):
|
||||
export_csv[i] = export_csv[i][:8] + export_csv[i][9:]
|
||||
fixture_csv[i] = fixture_csv[i][:8] + fixture_csv[i][9:]
|
||||
|
||||
assert fixture_csv[i] == export_csv[i], 'Some fields are not equal'
|
||||
|
||||
|
||||
@pytest.mark.xfail(reason='Debug why rate computed correctly but when get info change value')
|
||||
def test_temp_rate_rating(user: UserClient):
|
||||
snapshot, _ = user.post(file('real-eee-1001pxd.snapshot.11'), res=Snapshot)
|
||||
from ereuse_devicehub.resources.device.models import Device
|
||||
device, _ = user.get(res=Device, item=snapshot['device']['id'])
|
||||
assert device['rate']['rating'] == 1.98
|
||||
assert fixture_csv == export_csv
|
||||
|
|
|
@ -384,13 +384,18 @@ def test_test_data_storage(user: UserClient):
|
|||
|
||||
@pytest.mark.xfail(reason='Not implemented yet, new rate is need it')
|
||||
def test_snapshot_computer_monitor(user: UserClient):
|
||||
"""
|
||||
Tests that a snapshot of computer monitor device create correctly.
|
||||
"""
|
||||
s = file('computer-monitor.snapshot')
|
||||
snapshot_and_check(user, s, action_types=('RateMonitor',))
|
||||
# todo check that ManualRate has generated an AggregateRate
|
||||
|
||||
|
||||
@pytest.mark.xfail(reason='Not implemented yet, new rate is need it')
|
||||
def test_snapshot_mobile_smartphone_imei_manual_rate(user: UserClient):
|
||||
"""
|
||||
Tests that a snapshot of smartphone device is creat correctly.
|
||||
"""
|
||||
s = file('smartphone.snapshot')
|
||||
snapshot = snapshot_and_check(user, s, action_types=('VisualTest',))
|
||||
mobile, _ = user.get(res=m.Device, item=snapshot['device']['id'])
|
||||
|
@ -405,6 +410,7 @@ def test_snapshot_components_none():
|
|||
"""
|
||||
|
||||
|
||||
# TODO JN is really necessary in which cases??
|
||||
@pytest.mark.xfail(reason='Test not developed')
|
||||
def test_snapshot_components_empty():
|
||||
"""
|
||||
|
|
Reference in a new issue