From 82bf20ff3d0ce68ca28afb859ef482b8bcd27415 Mon Sep 17 00:00:00 2001 From: nad Date: Tue, 14 May 2019 20:32:24 +0200 Subject: [PATCH] debug and improve tests about rate v1 --- tests/files/multiples_devices.csv | 20 +-- tests/test_rate.py | 174 +++++++++++++++++-------- tests/test_rate_workbench_v1.py | 205 ++++++++++++++++++------------ tests/test_reports.py | 19 ++- tests/test_snapshot.py | 9 +- tests/test_workbench.py | 6 +- 6 files changed, 272 insertions(+), 161 deletions(-) diff --git a/tests/files/multiples_devices.csv b/tests/files/multiples_devices.csv index 08de551f..3589d2fb 100644 --- a/tests/files/multiples_devices.csv +++ b/tests/files/multiples_devices.csv @@ -1,14 +1,14 @@ 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.0 ,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.0 ,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.0 ,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.0 ,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.73,Very low,1.0,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.0 ,Very low,1.53 ,Very low ,3.76 ,Medium -RamModule , , , , , , , ,Wed Mar 6 18:22:05 2019, ,1.98 ,Very low,1.0 ,Very low,1.53 ,Very low ,3.76 ,Medium -HardDrive , , , , ,e2024242cv86hj ,hts54322 ,hitachi ,Wed Mar6 18:22:05 2019 , ,1.98 ,Very low,1.0 ,Very low,1.53 ,Very low ,3.76 ,Medium -Motherboard,,,,,eee0123456789,1001pxd,asustek computer inc.,Wed Mar 6 18:22:05 2019,,1.73,Very low,1.0,Very low,1.53,Very low,3.76,Medium +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 diff --git a/tests/test_rate.py b/tests/test_rate.py index be6a1084..c96ce467 100644 --- a/tests/test_rate.py +++ b/tests/test_rate.py @@ -1,15 +1,15 @@ from decimal import Decimal from distutils.version import StrictVersion +import math import pytest from ereuse_devicehub.client import UserClient from ereuse_devicehub.db import db from ereuse_devicehub.resources.action.models import Action, BenchmarkDataStorage, \ BenchmarkProcessor, RateComputer, Snapshot, VisualTest -from ereuse_devicehub.resources.action.rate.workbench.v1_0 import CannotRate from ereuse_devicehub.resources.device.models import Computer, Desktop, Device, HardDrive, \ - Processor, RamModule + Processor, RamModule, SolidStateDrive from ereuse_devicehub.resources.enums import AppearanceRange, ComputerChassis, \ FunctionalityRange from tests import conftest @@ -28,27 +28,36 @@ def test_workbench_rate_db(): db.session.commit() -@pytest.mark.xfail(reson='Adapt rate algorithm to re-compute by passing a manual rate.') -def test_manual_rate_after_workbench_rate(user: UserClient): - """Perform a WorkbenchRate and then update the device with a ManualRate. +# TODO JN is necessary this test if in test multiples rates we are checking same case?? +def test_rate_with_multiple_visual_tests(user: UserClient): + """Perform a ComputerRate and then update the device with a new VisualTest. - Devicehub must make the final rate with the first workbench rate - plus the new manual rate, without considering the appearance / - functionality values of the workbench rate. + Devicehub must make the final rate with the first computer rate + plus the new visual test, without considering the appearance / + functionality values of the computer rate. """ s = file('real-hp.snapshot.11') snapshot, _ = user.post(s, res=Snapshot) device, _ = user.get(res=Device, item=snapshot['device']['id']) - assert 'B' == device['rate']['appearanceRange'] - assert device['rate'] == 1 + visual_test = next(e for e in reversed(device['actions']) if e['type'] == VisualTest.t) + + assert visual_test['appearanceRange'] == 'B' + assert visual_test['functionalityRange'] == 'D' + assert device['rate']['rating'] == 2 + + # Adding new visual test user.post({ - 'type': 'ManualRate', + 'type': 'VisualTest', 'device': device['id'], 'appearanceRange': 'A', 'functionalityRange': 'A' }, res=Action) device, _ = user.get(res=Device, item=snapshot['device']['id']) - assert 'A' == device['rate']['appearanceRange'] + visual_test = next(e for e in reversed(device['actions']) if e['type'] == VisualTest.t) + + assert visual_test['appearanceRange'] == 'A' + assert visual_test['functionalityRange'] == 'A' + assert device['rate']['rating'] == 3.7 @pytest.mark.usefixtures(conftest.app_context.__name__) @@ -71,16 +80,13 @@ def test_price_from_rate(): VisualTest(appearance_range=AppearanceRange.A, functionality_range=FunctionalityRange.A, device=pc) - rate, price = RateComputer.compute(pc) + _, price = RateComputer.compute(pc) - # actions = pc.actions - # price = next(e for e in actions if isinstance(e, EreusePrice)) assert price.price == Decimal('92.2001') assert price.retailer.standard.amount == Decimal('40.9714') assert price.platform.standard.amount == Decimal('18.8434') assert price.refurbisher.standard.amount == Decimal('32.3853') - assert price.price >= price.retailer.standard.amount \ - + price.platform.standard.amount \ + assert price.price >= price.retailer.standard.amount + price.platform.standard.amount \ + price.refurbisher.standard.amount assert price.retailer.warranty2.amount == Decimal('55.3085') assert price.platform.warranty2.amount == Decimal('25.4357') @@ -88,48 +94,44 @@ def test_price_from_rate(): assert price.warranty2 == Decimal('124.47') -def test_no_rate_if_no_workbench(user: UserClient): +def test_when_rate_must_not_compute(user: UserClient): """ - Checks if compute a rate from snapshot software is not from Workbench + Test to check if rate is computed in case of should not be calculated: + 1. Snapshot haven't visual test + 2. Snapshot software aren't Workbench + 3. Device type are not Computer + ... """ - # Upload a basic snapshot - device_no_wb = file('basic.snapshot') - # Change snapshot software source - device_no_wb['software'] = 'Web' - del device_no_wb['uuid'] - del device_no_wb['elapsed'] - del device_no_wb['components'] - # Try to compute rate - user.post(device_no_wb, res=Snapshot) - # How to assert CannotRate Exception - assert CannotRate - - -def test_no_rate_if_no_visual_test(user: UserClient): - """ - Checks if a rate is calculated from a snapshot without visual test - """ - # Upload a basic snapshot + # Checking case 1 s = file('basic.snapshot') - # Delete snapshot device actions + # Delete snapshot device actions to delete VisualTest del s['device']['actions'] + + # Post to compute rate and check to didn't do it + snapshot, _ = user.post(s, res=Snapshot) + assert 'rate' not in snapshot['device'] + + # Checking case 2 + s = file('basic.snapshot') + # Change snapshot software source + s['software'] = 'Web' + del s['uuid'] + del s['elapsed'] + del s['components'] + + # Post to compute rate and check to didn't do it + snapshot, _ = user.post(s, res=Snapshot) + assert 'rate' not in snapshot['device'] + + # Checking case 3 + s = file('keyboard.snapshot') + + # Post to compute rate and check to didn't do it snapshot, _ = user.post(s, res=Snapshot) - device, _ = user.get(res=Device, item=snapshot['device']['id']) - # How to assert CannotRate Exception assert 'rate' not in snapshot['device'] -def test_no_rate_if_device_is_not_computer(user: UserClient): - """ - Checks if a rate is calculated from a device that is not a computer. - """ - # Upload a basic snapshot of a device type - device = file('keyboard.snapshot') - user.post(device, res=Snapshot) - assert CannotRate - - -@pytest.mark.xfail(reason='Test not developed') +@pytest.mark.usefixtures(conftest.app_context.__name__) def test_multiple_rates(user: UserClient): """Tests submitting two rates from Workbench, ensuring that the tests / benchmarks... @@ -138,3 +140,73 @@ def test_multiple_rates(user: UserClient): This ensures that rates only takes the last version of actions and components (in case device has new components, for example). """ + pc = Desktop(chassis=ComputerChassis.Tower) + hdd = HardDrive(size=476940) + hdd.actions_one.add(BenchmarkDataStorage(read_speed=126, write_speed=29.8)) + cpu = Processor(cores=2, speed=3.4) + cpu.actions_one.add(BenchmarkProcessor(rate=27136.44)) + pc.components = { + hdd, + RamModule(size=4096, speed=1600), + RamModule(size=2048, speed=1600), + cpu + } + + # Add test visual with functionality and appearance range + VisualTest(appearance_range=AppearanceRange.A, + functionality_range=FunctionalityRange.A, + device=pc) + + 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 + + assert rate1.appearance == 0.3 + 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 = { + hdd, + RamModule(size=2048, speed=1067), + RamModule(size=2048, speed=1067), + cpu + } + + # Add test visual with functionality and appearance range + VisualTest(appearance_range=AppearanceRange.B, + 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 + + assert rate2.appearance == 0 + 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) diff --git a/tests/test_rate_workbench_v1.py b/tests/test_rate_workbench_v1.py index 18beb7fe..f39e2dca 100644 --- a/tests/test_rate_workbench_v1.py +++ b/tests/test_rate_workbench_v1.py @@ -1,18 +1,24 @@ """ -Tests of compute rating for every component in a Device -Rates test done: +This file test all corner cases when compute score v1.0. + +First test to compute rate for every component in isolation +todo rewrite some corner cases using range(min,max) characteristics + in devices/schemas +Components in Score v1: -DataStorage -RamModule -Processor +Then some test compute rate with all components that use the a1lgorithm + Excluded cases in tests - No Processor +- No indispensable Benchmarks (Processor and Data Storage) - """ import math - import pytest from ereuse_devicehub.resources.action.models import BenchmarkDataStorage, BenchmarkProcessor, \ @@ -21,6 +27,7 @@ from ereuse_devicehub.resources.action.rate.workbench.v1_0 import DataStorageRat RamRate, RateAlgorithm from ereuse_devicehub.resources.device.models import Desktop, HardDrive, Processor, RamModule from ereuse_devicehub.resources.enums import AppearanceRange, ComputerChassis, FunctionalityRange +from tests import conftest def test_rate_data_storage_rate(): @@ -77,15 +84,13 @@ def test_rate_no_data_storage(): """ Test without data storage devices """ + hdd_null = HardDrive() hdd_null.actions_one.add(BenchmarkDataStorage(read_speed=0, write_speed=0)) data_storage_rate = DataStorageRate().compute([hdd_null]) assert data_storage_rate is None -# RAM MODULE DEVICE TEST - - def test_rate_ram_rate(): """ Test to check if compute ram rate have same value than previous score version @@ -169,8 +174,6 @@ def test_rate_no_ram_module(): assert ram_rate is None -# PROCESSOR DEVICE TEST - def test_rate_processor_rate(): """ Test to check if compute processor rate have same value than previous score version @@ -208,12 +211,15 @@ def test_rate_processor_rate_2cores(): assert math.isclose(processor_rate, 3.93, rel_tol=0.002) +# TODO JN if delete processor default score for benchmark_cpu + + def test_rate_processor_with_null_cores(): """ Test with processor device have null number of cores """ cpu = Processor(cores=None, speed=3.3) - cpu.actions_one.add(BenchmarkProcessor()) + cpu.actions_one.add(BenchmarkProcessor(rate=0)) processor_rate = ProcessorRate().compute(cpu) @@ -232,80 +238,35 @@ def test_rate_processor_with_null_speed(): assert math.isclose(processor_rate, 1.06, rel_tol=0.001) -def test_rate_computer_rate(): - """ Test rate v1 - - pc_1193 = Computer() - price = 92.2 - # add components characteristics of pc with id = 1193 - hdd_1969 = HardDrive(size=476940) - hdd_1969.actions_one.add(BenchmarkDataStorage(read_speed=126, write_speed=29.8)) - ram1 = RamModule(size=4096, speed=1600) - ram2 = RamModule(size=2048, speed=1067) - cpu = Processor(cores=2, speed=3.4) - cpu.actions_one.add(BenchmarkProcessor(rate=27136.44)) - pc_1193.components.add(hdd_1969, ram1, ram2, cpu) - # add functionality and appearance range - rate_pc_1193 = WorkbenchRate(appearance_range=AppearanceRange.A, functionality_range=FunctionalityRange.A) - # add component rate - HDD_rate = 4.02 - RAM_rate = 3.79 - Processor_rate = 3.95 - Rating = 4.61 +# TODO JN add price asserts in rate computers?? - pc_1201 = Computer() - price = 69.6 - hdd_3054 = HardDrive(size=476940) - hdd_3054.actions_one.add(BenchmarkDataStorage(read_speed=158, write_speed=34.7)) - ram1 = RamModule(size=2048, speed=1333) - cpu = Processor(cores=2, speed=3.3) - cpu.actions_one.add(BenchmarkProcessor(rate=26339.48)) - pc_1201.components.add(hdd_3054, ram1, cpu) - # add functionality and appearance range - rate_pc_1201 = WorkbenchRate(appearance_range=AppearanceRange.B, functionality_range=FunctionalityRange.A) - # add component rate - HDD_rate = 4.07 - RAM_rate = 2.02 - Processor_rate = 3.93 - Rating = 3.48 - pc_79 = Computer() - price = VeryLow - hdd_81 = HardDrive(size=76319) - hdd_81.actions_one.add(BenchmarkDataStorage(read_speed=72.2, write_speed=24.3)) - ram1 = RamModule(size=512, speed=667) - ram2 = RamModule(size=512, speed=800) - ram3 = RamModule(size=512, speed=667) - ram4 = RamModule(size=512, speed=533) - cpu = Processor(cores=1, speed=1.6) - cpu.actions_one.add(BenchmarkProcessor(rate=3192.34)) - pc_79.components.add(hdd_81, ram1, ram2, ram3, ram4, cpu) - # add functionality and appearance range - rate_pc_79 = WorkbenchRate(appearance_range=AppearanceRange.C, functionality_range=FunctionalityRange.A) - # add component rate - HDD_rate = 2.61 - RAM_rate = 1.99 - Processor_rate = 1 - Rating = 1.58 +@pytest.mark.usefixtures(conftest.auth_app_context.__name__) +def test_rate_computer_1193(): + """ + Test rate computer characteristics: + - 2 module ram + - processor with 2 cores - pc_798 = Computer() - price = 50 - hdd_1556 = HardDrive(size=152587) - hdd_1556.actions_one.add(BenchmarkDataStorage(read_speed=78.1, write_speed=24.4)) - ram0 = RamModule(size=0, speed=None) - cpu = Processor(cores=2, speed=2.5) - cpu.actions_one.add(BenchmarkProcessor(rate=9974.3)) - pc_798.components.add(hdd_1556, ram0, cpu) - # add functionality and appearance range - rate_pc_798 = WorkbenchRate(appearance_range=AppearanceRange.B, functionality_range=FunctionalityRange.A) - # add component rate - HDD_rate = 3.7 - RAM_rate = 1 - Processor_rate = 4.09 - Rating = 2.5 + Data get it from R score from DH pc with id = 1193 + + pc_1193 = Computer() + price = 92.2 + hdd_1969 = HardDrive(size=476940) + hdd_1969.actions_one.add(BenchmarkDataStorage(read_speed=126, write_speed=29.8)) + ram1 = RamModule(size=4096, speed=1600) + ram2 = RamModule(size=2048, speed=1067) + cpu = Processor(cores=2, speed=3.4) + cpu.actions_one.add(BenchmarkProcessor(rate=27136.44)) + pc_1193.components.add(hdd_1969, ram1, ram2, cpu) + rate_pc_1193 = WorkbenchRate(appearance_range=AppearanceRange.A, + functionality_range=FunctionalityRange.A) + HDD_rate = 4.02 + RAM_rate = 3.79 + Processor_rate = 3.95 + Rating = 4.61 """ - # Create a new Computer with components characteristics of pc with id = 1193 pc_test = Desktop(chassis=ComputerChassis.Tower) data_storage = HardDrive(size=476940) data_storage.actions_one.add(BenchmarkDataStorage(read_speed=126, write_speed=29.8)) @@ -333,7 +294,32 @@ def test_rate_computer_rate(): assert math.isclose(rate_pc.rating, 4.61, rel_tol=0.001) - # Create a new Computer with components characteristics of pc with id = 1201 + +@pytest.mark.usefixtures(conftest.auth_app_context.__name__) +def test_rate_computer_1201(): + """ + Test rate computer characteristics: + - only 1 module ram + - processor 2 cores + + Data get it from R score from DH pc with id = 1201 + + pc_1201 = Computer() + price = 69.6 + hdd_3054 = HardDrive(size=476940) + hdd_3054.actions_one.add(BenchmarkDataStorage(read_speed=158, write_speed=34.7)) + ram1 = RamModule(size=2048, speed=1333) + cpu = Processor(cores=2, speed=3.3) + cpu.actions_one.add(BenchmarkProcessor(rate=26339.48)) + pc_1201.components.add(hdd_3054, ram1, cpu) + rate_pc_1201 = WorkbenchRate(appearance_range=AppearanceRange.B, + functionality_range=FunctionalityRange.A) + HDD_rate = 4.07 + RAM_rate = 2.02 + Processor_rate = 3.93 + Rating = 3.48 + """ + pc_test = Desktop(chassis=ComputerChassis.Tower) data_storage = HardDrive(size=476940) data_storage.actions_one.add(BenchmarkDataStorage(read_speed=158, write_speed=34.7)) @@ -360,7 +346,37 @@ def test_rate_computer_rate(): assert math.isclose(rate_pc.rating, 3.48, rel_tol=0.001) - # Create a new Computer with components characteristics of pc with id = 79 + +@pytest.mark.usefixtures(conftest.auth_app_context.__name__) +def test_rate_computer_multiple_ram_module(): + """ + Test rate computer characteristics: + - only 1 module ram + - processor 2 cores + + Data get it from R score from DH pc with id = 79 + + pc_79 = Computer() + price = VeryLow + hdd_81 = HardDrive(size=76319) + hdd_81.actions_one.add(BenchmarkDataStorage(read_speed=72.2, write_speed=24.3)) + ram1 = RamModule(size=512, speed=667) + ram2 = RamModule(size=512, speed=800) + ram3 = RamModule(size=512, speed=667) + ram4 = RamModule(size=512, speed=533) + cpu = Processor(cores=1, speed=1.6) + cpu.actions_one.add(BenchmarkProcessor(rate=3192.34)) + pc_79.components.add(hdd_81, ram1, ram2, ram3, ram4, cpu) + # add functionality and appearance range + rate_pc_79 = WorkbenchRate(appearance_range=AppearanceRange.C, + functionality_range=FunctionalityRange.A) + # add component rate + HDD_rate = 2.61 + RAM_rate = 1.99 + Processor_rate = 1 + Rating = 1.58 + """ + pc_test = Desktop(chassis=ComputerChassis.Tower) data_storage = HardDrive(size=76319) data_storage.actions_one.add(BenchmarkDataStorage(read_speed=72.2, write_speed=24.3)) @@ -389,7 +405,34 @@ def test_rate_computer_rate(): assert rate_pc.rating == 1.57 - # Create a new Computer with components characteristics of pc with id = 798 + +@pytest.mark.usefixtures(conftest.auth_app_context.__name__) +def test_rate_computer_one_ram_module(): + """ + Test rate computer characteristics: + - only 1 module ram + - processor 2 cores + + Data get it from R score from DH pc with id = 798 + + pc_798 = Computer() + price = 50 + hdd_1556 = HardDrive(size=152587) + hdd_1556.actions_one.add(BenchmarkDataStorage(read_speed=78.1, write_speed=24.4)) + ram0 = RamModule(size=0, speed=None) + cpu = Processor(cores=2, speed=2.5) + cpu.actions_one.add(BenchmarkProcessor(rate=9974.3)) + pc_798.components.add(hdd_1556, ram0, cpu) + # add functionality and appearance range + rate_pc_798 = WorkbenchRate(appearance_range=AppearanceRange.B, + functionality_range=FunctionalityRange.A) + # add component rate + HDD_rate = 3.7 + RAM_rate = 1 + Processor_rate = 4.09 + Rating = 2.5 + """ + pc_test = Desktop(chassis=ComputerChassis.Tower) data_storage = HardDrive(size=152587) data_storage.actions_one.add(BenchmarkDataStorage(read_speed=78.1, write_speed=24.4)) diff --git a/tests/test_reports.py b/tests/test_reports.py index 61e2499e..78962c79 100644 --- a/tests/test_reports.py +++ b/tests/test_reports.py @@ -135,15 +135,7 @@ def test_export_keyboard(user: UserClient): assert fixture_csv[1] == export_csv[1], 'Component information are not equal' -@pytest.mark.xfail(reson='Need to develop.') -def test_export_multiple_computers(user: UserClient): - """ - Test to export multiples computers devices - """ - pass - - -@pytest.mark.xfail(reson='Need to debug and rewrite it.') +# 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, ...) @@ -154,7 +146,6 @@ def test_export_multiple_different_devices(user: UserClient): snapshot_keyboard, _ = user.post(file('keyboard.snapshot'), res=Snapshot) snapshot_monitor, _ = user.post(file('computer-monitor.snapshot'), res=Snapshot) - # need query param?? csv_str, _ = user.get(res=documents.DocumentDef.t, item='devices/', accept='text/csv') @@ -178,3 +169,11 @@ def test_export_multiple_different_devices(user: UserClient): 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 diff --git a/tests/test_snapshot.py b/tests/test_snapshot.py index 1a16c656..69320b59 100644 --- a/tests/test_snapshot.py +++ b/tests/test_snapshot.py @@ -127,9 +127,7 @@ def test_snapshot_component_add_remove(user: UserClient): # Components contain parent assert all(c['parent'] == pc1_id for c in pc1['components']) # pc has two actions: Snapshot and the BenchmarkProcessor - # TODO change assert to len(pc1['actions']) == 2 cause we add BenchmarkProcessor action assert len(pc1['actions']) == 2 - # TODO pc1['actions'][0]['type'] == BenchmarkProcessor.t assert pc1['actions'][1]['type'] == Snapshot.t # p1c1s has Snapshot p1c1s, _ = user.get(res=m.Device, item=pc1['components'][0]['id']) @@ -384,11 +382,10 @@ def test_test_data_storage(user: UserClient): assert incidence_test['severity'] == 'Error' -# TODO change to RateMonitor @pytest.mark.xfail(reason='Not implemented yet, new rate is need it') def test_snapshot_computer_monitor(user: UserClient): s = file('computer-monitor.snapshot') - snapshot_and_check(user, s, action_types=('ManualRate',)) + snapshot_and_check(user, s, action_types=('RateMonitor',)) # todo check that ManualRate has generated an AggregateRate @@ -398,7 +395,6 @@ def test_snapshot_mobile_smartphone_imei_manual_rate(user: UserClient): snapshot = snapshot_and_check(user, s, action_types=('VisualTest',)) mobile, _ = user.get(res=m.Device, item=snapshot['device']['id']) assert mobile['imei'] == 3568680000414120 - # todo check that manual rate has been created @pytest.mark.xfail(reason='Test not developed') @@ -484,11 +480,10 @@ def snapshot_and_check(user: UserClient, return snapshot -# TODO change to which Rate?? @pytest.mark.xfail(reason='Not implemented yet, new rate is need it') def test_snapshot_keyboard(user: UserClient): s = file('keyboard.snapshot') - snapshot = snapshot_and_check(user, s, action_types=('ManualRate',)) + snapshot = snapshot_and_check(user, s, action_types=('VisualTest',)) keyboard = snapshot['device'] assert keyboard['layout'] == 'ES' diff --git a/tests/test_workbench.py b/tests/test_workbench.py index 9493fdda..22d12940 100644 --- a/tests/test_workbench.py +++ b/tests/test_workbench.py @@ -9,6 +9,7 @@ import pytest from ereuse_devicehub.client import UserClient from ereuse_devicehub.resources.action import models as em +from ereuse_devicehub.resources.action.models import VisualTest, RateComputer from ereuse_devicehub.resources.device.exceptions import NeedsId from ereuse_devicehub.resources.device.models import Device from ereuse_devicehub.resources.tag.model import Tag @@ -61,8 +62,9 @@ def test_workbench_server_condensed(user: UserClient): assert device['rate']['closed'] assert device['rate']['severity'] == 'Info' assert device['rate']['rating'] == 0 - assert device['rate']['type'] == 'RateComputer' - assert device['actions'][2]['type'] == 'VisualTest' + assert device['rate']['type'] == RateComputer.t + # TODO JN why haven't same order in actions?? + assert device['actions'][2]['type'] == VisualTest.t assert device['actions'][2]['appearanceRange'] == 'A' assert device['actions'][2]['functionalityRange'] == 'B' assert device['tags'][0]['id'] == 'tag1'