dbudwin/RoboHome-Web

View on GitHub
tests/Unit/Model/DeviceTest.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php
 
namespace Tests\Unit\Model;
 
use App\Device;
use App\Http\Globals\DeviceTypes;
use App\RFDevice;
use Illuminate\Database\Eloquent\Model;
 
class DeviceTest extends TestCaseWithRealDatabase
{
The method testHtmlDataAttributesForSpecificDeviceProperties_GivenDeviceAddedToDatabase_AttributesMatchNameAndValueOfAddedDevice() has 25 lines of code. Current threshold is set to 25. Avoid really long methods.
Line exceeds 120 characters; contains 145 characters
public function testHtmlDataAttributesForSpecificDeviceProperties_GivenDeviceAddedToDatabase_AttributesMatchNameAndValueOfAddedDevice(): void
{
foreach ($this->deviceTypeConstants() as $specificDeviceType) {
$addedDevice = $this->addDeviceToDatabase($specificDeviceType);
$specificDevice = $this->addSpecificDevice($addedDevice->id, $specificDeviceType);
$specificDeviceProperties = $specificDevice->getFillable();
$htmlAttributes = $addedDevice->htmlDataAttributesForSpecificDevice();
 
$attributeNames = [];
$attributeValues = [];
 
foreach ($htmlAttributes as $htmlAttribute) {
$htmlAttributePieces = explode('=', $htmlAttribute);
$htmlAttributeRawNameLength = strlen($htmlAttributePieces[0]);
$htmlAttributeDataPrefix = 'data-device-';
Line exceeds 120 characters; contains 128 characters
$attributeName = substr($htmlAttributePieces[0], strlen($htmlAttributeDataPrefix), $htmlAttributeRawNameLength);
$attributeName = str_replace('-', '_', $attributeName);
 
array_push($attributeNames, $attributeName);
array_push($attributeValues, $htmlAttributePieces[1]);
}
 
Line exceeds 120 characters; contains 148 characters
$this->assertHtmlAttributesMatchSpecificDeviceProperties($specificDevice, $attributeNames, $attributeValues, $specificDeviceProperties);
}
}
 
public function testSpecificDevice_GivenDeviceAddedToDatabase_AttributesMatch(): void
{
foreach ($this->deviceTypeConstants() as $specificDeviceType) {
$addedDevice = $this->addDeviceToDatabase($specificDeviceType);
$expectedSpecificDevice = $this->addSpecificDevice($addedDevice->id, $specificDeviceType);
 
$actualSpecificDevice = $addedDevice->specificDevice();
 
Line exceeds 120 characters; contains 122 characters
$this->assertEquals($expectedSpecificDevice->attributesToArray(), $actualSpecificDevice->attributesToArray());
}
}
 
private function addDeviceToDatabase(int $deviceType): Device
{
return factory(Device::class)->create([
'user_id' => self::$faker->randomNumber(),
'device_type_id' => $deviceType
]);
}
 
Line exceeds 120 characters; contains 179 characters
private function assertHtmlAttributesMatchSpecificDeviceProperties(Model $specificDevice, array $attributeNames, array $attributeValues, array $specificDeviceProperties): void
{
$this->assertEquals(sizeof($attributeNames), sizeof($specificDeviceProperties));
 
Avoid using Tests\Unit\Model\sizeof() function in for loops.
for ($i = 0; $i < sizeof($attributeNames); $i++) {
$this->assertEquals($specificDeviceProperties[$i], $attributeNames[$i]);
$this->assertEquals($specificDevice->{$attributeNames[$i]}, $attributeValues[$i]);
}
}
 
private function addSpecificDevice(int $deviceId, int $specificDeviceType): RFDevice
{
if ($specificDeviceType == DeviceTypes::RF_DEVICE) {
$specificDevice = $this->addRFDeviceToDatabase($deviceId);
}
 
return $specificDevice;
}
 
private function addRFDeviceToDatabase(int $deviceId): RFDevice
{
return factory(RFDevice::class)->create([
'device_id' => $deviceId
]);
}
 
private function deviceTypeConstants(): array
{
Missing class import via use statement (line '86', column '33').
$deviceTypesClass = new \ReflectionClass(DeviceTypes::class);
$specificDeviceTypes = $deviceTypesClass->getConstants();
 
return $specificDeviceTypes;
}
}