121 lines
5.6 KiB
Python
121 lines
5.6 KiB
Python
import unittest
|
|
from nose.tools import eq_
|
|
from helix.Services.dxf_helper import DXFHelper
|
|
from helix.constants.system_type import SystemType
|
|
from helix.models.coordinate import Coordinate
|
|
from helix.models.dxf.dxf_error import DXFError
|
|
from helix.models.panel import Panel
|
|
from helix.validators.subarray_validator import SubarrayValidator
|
|
|
|
|
|
class SubarrayValidatorTest(unittest.TestCase):
|
|
def test_subarrays_taller_than_150_feet_are_invalid(self):
|
|
panels = []
|
|
for i in range(33):
|
|
panels.append(Panel(coordinate=Coordinate(0, i * 60.0, rotation=0), subarray=1))
|
|
panels.append(Panel(coordinate=Coordinate(62.15, i * 60.0, rotation=0), subarray=1))
|
|
node_graph = DXFHelper.build_node_graph(panels, (62.15, 60.0))
|
|
|
|
try:
|
|
SubarrayValidator.validate_subarray(node_graph, 1, SystemType.singleTilt)
|
|
assert False
|
|
except DXFError as error:
|
|
eq_(error.message, "Array size is too big. Max is 150' by 150'.")
|
|
|
|
def test_subarrays_wider_than_150_feet_are_invalid(self):
|
|
panels = []
|
|
for i in range(30):
|
|
panels.append(Panel(coordinate=Coordinate(i * 62.15, 0, rotation=0), subarray=1))
|
|
panels.append(Panel(coordinate=Coordinate(i * 62.15, 60.0, rotation=0), subarray=1))
|
|
node_graph = DXFHelper.build_node_graph(panels, (62.15, 60))
|
|
|
|
try:
|
|
SubarrayValidator.validate_subarray(node_graph, 1, None)
|
|
assert False
|
|
except DXFError as error:
|
|
eq_(error.message, "Array size is too big. Max is 150' by 150'.")
|
|
|
|
def test_single_file_horizontal_line_is_invalid_single_tilt(self):
|
|
panels = [
|
|
Panel(coordinate=Coordinate(10, 0, rotation=0), subarray=1),
|
|
Panel(coordinate=Coordinate(20, 0, rotation=0), subarray=1),
|
|
Panel(coordinate=Coordinate(30, 0, rotation=0), subarray=1),
|
|
Panel(coordinate=Coordinate(30, 10, rotation=0), subarray=1),
|
|
Panel(coordinate=Coordinate(40, 0, rotation=0), subarray=1),
|
|
Panel(coordinate=Coordinate(40, 10, rotation=0), subarray=1)
|
|
]
|
|
node_graph = DXFHelper.build_node_graph(panels, (10, 10))
|
|
|
|
try:
|
|
SubarrayValidator.validate_subarray(node_graph, 1, SystemType.singleTilt)
|
|
assert False
|
|
except DXFError as error:
|
|
eq_(error.message, "Error - Unsupported panel configuration in subarray 1.")
|
|
|
|
def test_single_file_vertical_line_is_invalid_single_tilt(self):
|
|
panels = [
|
|
Panel(coordinate=Coordinate(0, 10, rotation=0), subarray=2),
|
|
Panel(coordinate=Coordinate(0, 20, rotation=0), subarray=2),
|
|
Panel(coordinate=Coordinate(0, 30, rotation=0), subarray=2),
|
|
Panel(coordinate=Coordinate(10, 30, rotation=0), subarray=2),
|
|
Panel(coordinate=Coordinate(0, 40, rotation=0), subarray=2),
|
|
Panel(coordinate=Coordinate(10, 40, rotation=0), subarray=2)
|
|
]
|
|
node_graph = DXFHelper.build_node_graph(panels, (10, 10))
|
|
|
|
try:
|
|
SubarrayValidator.validate_subarray(node_graph, 2, SystemType.singleTilt)
|
|
assert False
|
|
except DXFError as error:
|
|
eq_(error.message, "Error - Unsupported panel configuration in subarray 2.")
|
|
|
|
def test_other_single_tilt_subarrays_are_valid(self):
|
|
panels = [
|
|
Panel(coordinate=Coordinate(0, 0, rotation=0), subarray=1),
|
|
Panel(coordinate=Coordinate(0, 1, rotation=0), subarray=1),
|
|
Panel(coordinate=Coordinate(1, 0, rotation=0), subarray=1),
|
|
Panel(coordinate=Coordinate(1, 1, rotation=0), subarray=1)
|
|
]
|
|
node_graph = DXFHelper.build_node_graph(panels, (1, 1))
|
|
|
|
SubarrayValidator.validate_subarray(node_graph, 1, SystemType.singleTilt)
|
|
|
|
def test_single_file_horizontal_line_is_invalid_dual_tilt(self):
|
|
panels = [
|
|
Panel(coordinate=Coordinate(10, 0, rotation=0), subarray=1),
|
|
Panel(coordinate=Coordinate(20, 0, rotation=0), subarray=1),
|
|
Panel(coordinate=Coordinate(30, 0, rotation=0), subarray=1),
|
|
Panel(coordinate=Coordinate(30, 10, rotation=0), subarray=1),
|
|
Panel(coordinate=Coordinate(40, 0, rotation=0), subarray=1),
|
|
Panel(coordinate=Coordinate(40, 10, rotation=0), subarray=1)
|
|
]
|
|
node_graph = DXFHelper.build_node_graph(panels, (10, 10))
|
|
|
|
try:
|
|
SubarrayValidator.validate_subarray(node_graph, 1, SystemType.dualTilt)
|
|
assert False
|
|
except DXFError as error:
|
|
eq_(error.message, "Error - Unsupported panel configuration in subarray 1.")
|
|
|
|
def test_single_file_vertical_line_is_valid_dual_tilt(self):
|
|
panels = [
|
|
Panel(coordinate=Coordinate(0, 1, rotation=0), subarray=1),
|
|
Panel(coordinate=Coordinate(0, 2, rotation=0), subarray=1),
|
|
Panel(coordinate=Coordinate(0, 3, rotation=0), subarray=1),
|
|
Panel(coordinate=Coordinate(1, 3, rotation=0), subarray=1),
|
|
Panel(coordinate=Coordinate(0, 4, rotation=0), subarray=1),
|
|
Panel(coordinate=Coordinate(1, 4, rotation=0), subarray=1)
|
|
]
|
|
node_graph = DXFHelper.build_node_graph(panels, (1, 1))
|
|
|
|
SubarrayValidator.validate_subarray(node_graph, 1, SystemType.dualTilt)
|
|
|
|
def test_other_dual_tilt_subarrays_are_valid(self):
|
|
panels = [
|
|
Panel(coordinate=Coordinate(0, 0, rotation=0), subarray=1),
|
|
Panel(coordinate=Coordinate(0, 1, rotation=0), subarray=1)
|
|
]
|
|
node_graph = DXFHelper.build_node_graph(panels, (1, 1))
|
|
|
|
SubarrayValidator.validate_subarray(node_graph, 1, SystemType.dualTilt)
|