This repository has been archived on 2024-05-31. You can view files and clone it, but cannot push or open issues or pull requests.
devicehub-teal/tests/test_rate.py
Xavier Bustamante Talavera 16d00256df Review rate changes
2019-05-08 19:12:05 +02:00

127 lines
4.4 KiB
Python

from decimal import Decimal
from distutils.version import StrictVersion
import pytest
from ereuse_devicehub.client import UserClient
from ereuse_devicehub.db import db
from ereuse_devicehub.resources.device.models import Computer, Desktop, HardDrive, Processor, \
RamModule
from ereuse_devicehub.resources.enums import AppearanceRange, ComputerChassis, \
FunctionalityRange
from ereuse_devicehub.resources.event.models import BenchmarkDataStorage, BenchmarkProcessor, \
RateComputer, Snapshot, VisualTest
from ereuse_devicehub.resources.event.rate.workbench.v1_0 import CannotRate
from tests import conftest
from tests.conftest import file
@pytest.mark.usefixtures(conftest.auth_app_context.__name__)
def test_workbench_rate_db():
rate = RateComputer(processor=0.1,
ram=1.0,
data_storage=4.1,
graphic_card=0.1,
version=StrictVersion('1.0'),
device=Computer(serial_number='24', chassis=ComputerChassis.Tower))
db.session.add(rate)
db.session.commit()
@pytest.mark.xfail(reason='ComputerRate V1 can only be triggered from Workbench snapshot software')
def test_rate_workbench_then_manual():
"""Checks that a new Rate is generated for a snapshot
that is not from Workbench.
"""
@pytest.mark.usefixtures(conftest.app_context.__name__)
def test_rate():
"""Test generating an Rate for a given PC / components /
RateComputer ensuring results and relationships between
pc - rate - RateComputer - price.
"""
pc = Desktop(chassis=ComputerChassis.Tower)
hdd = HardDrive(size=476940)
hdd.events_one.add(BenchmarkDataStorage(read_speed=126, write_speed=29.8))
cpu = Processor(cores=2, speed=3.4)
cpu.events_one.add(BenchmarkProcessor(rate=27136.44))
pc.components |= {
hdd,
RamModule(size=4096, speed=1600),
RamModule(size=2048, speed=1067),
cpu
}
# Add test visual with functionality and appearance range
VisualTest(appearance_range=AppearanceRange.A,
functionality_range=FunctionalityRange.A,
device=pc)
rate, price = RateComputer.compute(pc)
# events = pc.events
# price = next(e for e in events 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 \
+ price.refurbisher.standard.amount
assert price.retailer.warranty2.amount == Decimal('55.3085')
assert price.platform.warranty2.amount == Decimal('25.4357')
assert price.refurbisher.warranty2.amount == Decimal('43.7259')
assert price.warranty2 == Decimal('124.47')
def test_no_rate_if_no_workbench(user: UserClient):
"""
Checks if compute a rate from snapshot software is not from Workbench
"""
# 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
device = file('basic.snapshot')
# Delete snapshot device events
del device['device']['events']
user.post(device, res=Snapshot)
# How to assert CannotRate Exception
assert CannotRate
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')
def test_multiple_rates(user: UserClient):
"""Tests submitting two rates from Workbench,
ensuring that the tests / benchmarks...
from the first rate do not contaminate the second rate.
This ensures that rates only takes the last version of events
and components (in case device has new components, for example).
"""