{{ __('Geocoding converts a location into a ISO 3166 (3 letters) code. Boavizta needs this to determine usage impacts of assets. This feature sends the address stored in a location to nominatim.org service. If this is an issue, you can disable it below, and fill the coutry code manually.', 'carbon') }}
+{{ __('Geocoding converts a location into a ISO 3166 (3 letters) country code. Boavizta needs this to determine usage impacts of assets. This feature sends the address stored in a location to nominatim.org service. If this is an issue, you can disable it below, and fill the coutry code manually.', 'carbon') }}
{{ fields.checkboxField( diff --git a/src/DataSource/RestApiClient.php b/src/DataSource/RestApiClient.php index 982a1fd7..ba49ca66 100644 --- a/src/DataSource/RestApiClient.php +++ b/src/DataSource/RestApiClient.php @@ -68,7 +68,8 @@ public function __construct(array $params = []) public function request(string $method = 'GET', string $uri = '', array $options = []) { try { - $response = $this->api_client->request($method, $uri, $options); + $request = $this->api_client; + $response = $request->request($method, $uri, $options); } catch (RequestException $e) { $this->last_error = [ 'title' => "Plugins API error", diff --git a/src/Location.php b/src/Location.php index 4f89b7cc..6dfb3b85 100644 --- a/src/Location.php +++ b/src/Location.php @@ -116,7 +116,7 @@ public function prepareInputForUpdate($input) } } - if (($input['plugin_carbon_sources_id'] ?? 0) === 0) { + if (($input['plugin_carbon_sources_id'] ?? 0) == 0) { $input['plugin_carbon_sources_zones_id'] = 0; } diff --git a/src/Source_Zone.php b/src/Source_Zone.php index 5abf6bd6..0ac86eb6 100644 --- a/src/Source_Zone.php +++ b/src/Source_Zone.php @@ -514,8 +514,7 @@ public function showGaps() $carbon_intensity = new CarbonIntensity(); $zone_id = $this->fields['plugin_carbon_zones_id']; $entries = $carbon_intensity->findGaps( - $this->fields['plugin_carbon_sources_id'], - $this->fields['plugin_carbon_zones_id'], + $this, $oldest_asset_date ); diff --git a/src/Toolbox.php b/src/Toolbox.php index dc21687a..a79d4e20 100644 --- a/src/Toolbox.php +++ b/src/Toolbox.php @@ -117,7 +117,7 @@ public function getOldestAssetDate(array $crit = []): ?DateTimeImmutable } /** - * Find the date where an asset leaves the inventory + * Find the date where assets leave the inventory * * @param array $crit * @return DateTimeImmutable|null diff --git a/tests/install/PluginInstallTest.php b/tests/install/PluginInstallTest.php index cde3af15..0d808153 100644 --- a/tests/install/PluginInstallTest.php +++ b/tests/install/PluginInstallTest.php @@ -257,14 +257,14 @@ private function checkAutomaticAction() $cronTask = new GLPICronTask(); $cronTask->getFromDBByCrit([ 'itemtype' => RteCronTask::class, - 'name' => 'DownloadRte', + 'name' => 'Download', ]); $this->assertFalse($cronTask->isNewItem()); $cronTask = new GLPICronTask(); $cronTask->getFromDBByCrit([ 'itemtype' => ElectricityMapsCronTask::class, - 'name' => 'DownloadElectricityMap', + 'name' => 'Download', ]); $this->assertFalse($cronTask->isNewItem()); diff --git a/tests/units/CarbonIntensityTest.php b/tests/units/CarbonIntensityTest.php index 1f39df68..932014d5 100644 --- a/tests/units/CarbonIntensityTest.php +++ b/tests/units/CarbonIntensityTest.php @@ -35,6 +35,7 @@ use Computer; use DateTime; use DateTimeImmutable; +use DateTimeInterface; use DBmysql; use GlpiPlugin\Carbon\CarbonIntensity; use GlpiPlugin\Carbon\DataSource\CarbonIntensity\AbstractClient; @@ -49,25 +50,27 @@ #[CoversClass(CarbonIntensity::class)] class CarbonIntensityTest extends DbTestCase { - public function testGetLastKnownDate() + public function test_getLastKnownDate_returns_null_when_nothing_for_given_source_zone() { + $source = $this->createItem(Source::class, ['name' => 'foo']); + $zone = $this->createItem(Zone::class, ['name' => 'bar']); + $source_zone = $this->createItem(Source_Zone::class, [ + getForeignKeyFieldForItemType(Source::class) => $source->getID(), + getForeignKeyFieldForItemType(Zone::class) => $zone->getID(), + ]); $instance = new CarbonIntensity(); - $result = $instance->getLastKnownDate('foo', 'bar'); + $result = $instance->getLastKnownDate($source_zone); $this->assertNull($result); + } - $zone = $this->createItem(Zone::class, [ - 'name' => 'foo', - ]); - $source = $this->createItem(Source::class, [ - 'name' => 'bar', - ]); + public function test_getLastKnownDate_returns_date_when_carbon_intensity_exists_for_given_source_zone() + { + $source = $this->createItem(Source::class, ['name' => 'foo']); + $zone = $this->createItem(Zone::class, ['name' => 'bar']); $source_zone = $this->createItem(Source_Zone::class, [ - $source::getForeignKeyField() => $source->getID(), - $zone::getForeignKeyField() => $zone->getID(), + getForeignKeyFieldForItemType(Source::class) => $source->getID(), + getForeignKeyFieldForItemType(Zone::class) => $zone->getID(), ]); - $result = $instance->getLastKnownDate('foo', 'bar'); - $this->assertNull($result); - $intensity = $this->createItem(CarbonIntensity::class, [ 'date' => '2023-02-01 00:00:00', $source::getForeignKeyField() => $source->getID(), @@ -83,29 +86,33 @@ public function testGetLastKnownDate() 'intensity' => 255, 'data_quality' => 2, ]); - $result = $instance->getLastKnownDate('foo', 'bar'); + $instance = new CarbonIntensity(); + $result = $instance->getLastKnownDate($source_zone); $this->assertEquals($expected, $result->format('Y-m-d H:i:s')); } - public function testGetFirstKnownDate() + public function test_getFirstKnownDate_returns_null_when_no_carbon_intensity_for_given_source_zone() { + $source = $this->createItem(Source::class, ['name' => 'foo']); + $zone = $this->createItem(Zone::class, ['name' => 'bar']); + $source_zone = $this->createItem(Source_Zone::class, [ + getForeignKeyFieldForItemType(Source::class) => $source->getID(), + getForeignKeyFieldForItemType(Zone::class) => $zone->getID(), + ]); $instance = new CarbonIntensity(); - $result = $instance->getFirstKnownDate('foo', 'bar'); + $result = $instance->getFirstKnownDate($source_zone); $this->assertNull($result); + } - $zone = $this->createItem(Zone::class, [ - 'name' => 'foo', - ]); - $source = $this->createItem(Source::class, [ - 'name' => 'bar', - ]); + public function test_getFirstKnownDate_returns_date_when_carbon_intensity_exists_for_given_source_zone() + { + $source = $this->createItem(Source::class, ['name' => 'foo']); + $zone = $this->createItem(Zone::class, ['name' => 'bar']); $source_zone = $this->createItem(Source_Zone::class, [ - $source::getForeignKeyField() => $source->getID(), - $zone::getForeignKeyField() => $zone->getID(), + getForeignKeyFieldForItemType(Source::class) => $source->getID(), + getForeignKeyFieldForItemType(Zone::class) => $zone->getID(), ]); - $result = $instance->getFirstKnownDate('foo', 'bar'); - $this->assertNull($result); - + $instance = new CarbonIntensity(); $intensity = $this->createItem(CarbonIntensity::class, [ 'date' => '2025-02-01 00:00:00', $source::getForeignKeyField() => $source->getID(), @@ -121,7 +128,7 @@ public function testGetFirstKnownDate() 'intensity' => 255, 'data_quality' => 2, ]); - $result = $instance->getFirstKnownDate('foo', 'bar'); + $result = $instance->getFirstKnownDate($source_zone); $this->assertEquals($expected, $result->format('Y-m-d H:i:s')); } @@ -172,7 +179,7 @@ public function testFindGaps() } $carbon_intensity = new CarbonIntensity(); - $result = $carbon_intensity->findGaps($source->getID(), $zone->getID(), $start_date, $end_date); + $result = $carbon_intensity->findGaps($source_zone, $start_date, $end_date); $result = iterator_to_array($result); $this->assertEquals([], $result); @@ -184,7 +191,7 @@ public function testFindGaps() 'date' => ['<', $delete_before_date->format('Y-m-d H:i:s')], ]); - $result = $carbon_intensity->findGaps($source->getID(), $zone->getID(), $start_date, $end_date); + $result = $carbon_intensity->findGaps($source_zone, $start_date, $end_date); $result = iterator_to_array($result); $this->assertEquals([ [ @@ -200,7 +207,7 @@ public function testFindGaps() 'plugin_carbon_zones_id' => $zone->getID(), 'date' => ['>=', $delete_after_date->format('Y-m-d H:i:s')], ]); - $result = $carbon_intensity->findGaps($source->getID(), $zone->getID(), $start_date, $end_date); + $result = $carbon_intensity->findGaps($source_zone, $start_date, $end_date); $result = iterator_to_array($result); $this->assertEquals([ [ @@ -224,7 +231,7 @@ public function testFindGaps() ['date' => ['<', $delete_middle_end_date->format('Y-m-d H:i:s')]], ], ]); - $result = $carbon_intensity->findGaps($source->getID(), $zone->getID(), $start_date, $end_date); + $result = $carbon_intensity->findGaps($source_zone, $start_date, $end_date); $result = iterator_to_array($result); $this->assertEquals([ [ @@ -253,7 +260,7 @@ public function testFindGaps() $cursor_date->modify('+1 hour'); } - $result = $carbon_intensity->findGaps($source->getID(), $zone->getID(), $start_date, $end_date); + $result = $carbon_intensity->findGaps($source_zone, $start_date, $end_date); $result = iterator_to_array($result); $this->assertEquals([ [ @@ -278,7 +285,7 @@ public function testFindGaps() $cursor_date->modify('+1 hour'); } - $result = $carbon_intensity->findGaps($source->getID(), $zone->getID(), $start_date, $end_date); + $result = $carbon_intensity->findGaps($source_zone, $start_date, $end_date); $result = iterator_to_array($result); $this->assertEquals([ [ @@ -310,48 +317,44 @@ public function testGetDownloadStartDate() $this->assertEquals($expected, $result); } - public function testGetDownloadStopDate() - { - $instance = new CarbonIntensity(); - - $data_source = $this->getMockBuilder(AbstractClient::class) - ->getMock(); - $data_source->method('getSourceName')->willReturn('bar'); - $data_source->method('getMaxIncrementalAge')->willReturn( - DateTimeImmutable::createFromMutable($expected = (new DateTime('15 days ago'))->setTime(0, 0, 0)) - ); - - $result = $instance->getDownloadStopDate('foo', $data_source); - $this->assertEquals($expected, $result); - - $zone = $this->createItem(Zone::class, [ - 'name' => 'foo', - ]); - $source = $this->createItem(Source::class, [ - 'name' => 'bar', - ]); - $expected = new DateTimeImmutable('2019-01-31 23:00:00'); - $source_zone = $this->createItem(Source_Zone::class, [ - $source::getForeignKeyField() => $source->getID(), - $zone::getForeignKeyField() => $zone->getID(), - ]); - $intensity = $this->createItem(CarbonIntensity::class, [ - 'date' => '2019-02-01', - $source::getForeignKeyField() => $source->getID(), - $zone::getForeignKeyField() => $zone->getID(), - 'intensity' => 255, - 'data_quality' => 2, - ]); - $result = $instance->getDownloadStopDate('foo', $data_source); - $this->assertEquals($expected, $result); - } + // public function testGetDownloadStopDate() + // { + // $instance = new CarbonIntensity(); + + // $data_source = $this->getMockBuilder(AbstractClient::class) + // ->getMock(); + // $data_source->method('getSourceName')->willReturn('bar'); + // $data_source->method('getMaxIncrementalAge')->willReturn( + // DateTimeImmutable::createFromMutable($expected = (new DateTime('15 days ago'))->setTime(0, 0, 0)) + // ); + + // $result = $instance->getDownloadStopDate('foo', $data_source); + // $this->assertEquals($expected, $result); + + // $zone = $this->createItem(Zone::class, [ + // 'name' => 'foo', + // ]); + // $source = $this->createItem(Source::class, [ + // 'name' => 'bar', + // ]); + // $expected = new DateTimeImmutable('2019-01-31 23:00:00'); + // $source_zone = $this->createItem(Source_Zone::class, [ + // $source::getForeignKeyField() => $source->getID(), + // $zone::getForeignKeyField() => $zone->getID(), + // ]); + // $intensity = $this->createItem(CarbonIntensity::class, [ + // 'date' => '2019-02-01', + // $source::getForeignKeyField() => $source->getID(), + // $zone::getForeignKeyField() => $zone->getID(), + // 'intensity' => 255, + // 'data_quality' => 2, + // ]); + // $result = $instance->getDownloadStopDate('foo', $data_source); + // $this->assertEquals($expected, $result); + // } public function testDownloadOneZone() { - $instance = new CarbonIntensity(); - $result = $instance->getLastKnownDate('foo', 'bar'); - $this->assertNull($result); - $zone = $this->createItem(Zone::class, [ 'name' => 'foo', ]); @@ -373,11 +376,15 @@ function ($zone_name, $gap_start, $gap_end, $carbon_intensity, $limit, $progress return $hours; } ); + $data_source->method('getHardStartDate')->willReturn( + DateTimeImmutable::createFromFormat(DateTimeInterface::ATOM, '2021-01-01T00:00:00+00:00'), + ); $output = $this->getMockBuilder(Output::class) ->getMock(); $progress_bar = new ProgressBar($output); - $result = $instance->downloadOneZone($data_source, 'foo', 1, $progress_bar); + $instance = new CarbonIntensity(); + $result = $instance->downloadOneZone($data_source, $source_zone, 1, $progress_bar); $this->assertEquals($hours, $result); $this->assertEquals($hours, $progress_bar->getMaxSteps()); } diff --git a/tests/units/CronTaskTest.php b/tests/units/CronTaskTest.php index 0ff01047..a612ffaa 100644 --- a/tests/units/CronTaskTest.php +++ b/tests/units/CronTaskTest.php @@ -44,56 +44,87 @@ use GlpiPlugin\Carbon\CarbonIntensity; use GlpiPlugin\Carbon\CronTask; use GlpiPlugin\Carbon\DataSource\CarbonIntensity\ClientInterface; +use GlpiPlugin\Carbon\Source; +use GlpiPlugin\Carbon\Source_Zone; +use GlpiPlugin\Carbon\Zone; use Location as GlpiLocation; use PHPUnit\Framework\Attributes\CoversClass; #[CoversClass(CronTask::class)] class CronTaskTest extends DbTestCase { - public function downloadSourceProvider() + public function test_downloadCarbonIntensityFromSource_returns_0_when_no_data_is_downloaded() { - $data_source1 = $this->createStub(ClientInterface::class); - $data_source1->method('getZones')->willReturn([['name' => 'test_zone']]); - $intensity1 = $this->createStub(CarbonIntensity::class); - $intensity1->method('downloadOneZone')->willReturn(0); - yield 'download empty data' => [ - $data_source1, - $intensity1, - 0, - ]; - - $data_source2 = $this->createStub(ClientInterface::class); - $data_source2->method('getZones')->willReturn([['name' => 'test_zone']]); - $intensity2 = $this->createStub(CarbonIntensity::class); - $intensity2->method('downloadOneZone')->willReturn(1024); - yield 'download complete' => [ - $data_source2, - $intensity2, - 1, - ]; - - $data_source3 = $this->createStub(ClientInterface::class); - $data_source3->method('getZones')->willReturn([['name' => 'test_zone']]); - $intensity3 = $this->createStub(CarbonIntensity::class); - $intensity3->method('downloadOneZone')->willReturn(-5); - yield 'download incomplete' => [ - $data_source3, - $intensity3, - -1, - ]; + $source = $this->createItem(Source::class); + $zone = $this->createItem(Zone::class); + $source_zone = $this->createItem(Source_Zone::class, [ + $source->getForeignKeyField() => $source->getID(), + $zone->getForeignKeyField() => $zone->getID(), + 'code' => 'FOO', + 'is_download_enabled' => 1, + ]); + + $data_source = $this->createStub(ClientInterface::class); + $data_source->method('getZones')->willReturn([['name' => 'FOO']]); + $data_source->method('isZoneSetupComplete')->willReturn(true); + $data_source->method('getSourceZones')->willReturn([$source_zone->fields]); + $carbon_intensity = $this->createStub(CarbonIntensity::class); + $carbon_intensity->method('downloadOneZone')->willReturn(0); + $cron_task = new CronTask(); + $glpi_cron_task = new GlpiCronTask(); + $glpi_cron_task->fields['param'] = 1000; + $output = $cron_task->downloadCarbonIntensityFromSource($glpi_cron_task, $data_source, $carbon_intensity); + $this->assertEquals(0, $output); } - public function testDownloadCarbonIntensityFromSource() + public function test_downloadCarbonIntensityFromSource_returns_1_when_a_positive_count_of_samples_are_downloaded() { - foreach ($this->downloadSourceProvider() as $data) { - [$data_source, $intensity, $expected] = $data; - $cron_task = new CronTask(); - $glpi_cron_task = new GlpiCronTask(); - $glpi_cron_task->fields['param'] = 1000; - $output = $this->callPrivateMethod($cron_task, 'downloadCarbonIntensityFromSource', $glpi_cron_task, $data_source, $intensity); - - $this->assertEquals($expected, $output); - } + $source = $this->createItem(Source::class); + $zone = $this->createItem(Zone::class); + $source_zone = $this->createItem(Source_Zone::class, [ + $source->getForeignKeyField() => $source->getID(), + $zone->getForeignKeyField() => $zone->getID(), + 'code' => 'FOO', + 'is_download_enabled' => 1, + ]); + + $data_source = $this->createStub(ClientInterface::class); + $data_source->method('getZones')->willReturn([['name' => 'FOO']]); + $data_source->method('isZoneSetupComplete')->willReturn(true); + $data_source->method('getSourceZones')->willReturn([$source_zone->fields]); + $carbon_intensity = $this->createStub(CarbonIntensity::class); + $carbon_intensity->method('downloadOneZone')->willReturn(1024); + $cron_task = new CronTask(); + $glpi_cron_task = new GlpiCronTask(); + $glpi_cron_task->fields['param'] = 1000; + $output = $cron_task->downloadCarbonIntensityFromSource($glpi_cron_task, $data_source, $carbon_intensity); + $this->assertEquals(1, $output); + } + + public function test_downloadCarbonIntensityFromSource_returns_minus_1_when_a_negative_count_of_samples_are_downloaded() + { + // When the count of downloaded samples is negative the count is this absolute value, + // and the negative sign means that an error occurred + $source = $this->createItem(Source::class); + $zone = $this->createItem(Zone::class); + $source_zone = $this->createItem(Source_Zone::class, [ + $source->getForeignKeyField() => $source->getID(), + $zone->getForeignKeyField() => $zone->getID(), + 'code' => 'FOO', + 'is_download_enabled' => 1, + ]); + + $data_source = $this->createStub(ClientInterface::class); + $data_source->method('getZones')->willReturn([['name' => 'FOO']]); + $data_source->method('isZoneSetupComplete')->willReturn(true); + $data_source->method('getSourceZones')->willReturn([$source_zone->fields]); + $carbon_intensity = $this->createStub(CarbonIntensity::class); + $carbon_intensity->method('downloadOneZone')->willReturn(-5); + $cron_task = new CronTask(); + $glpi_cron_task = new GlpiCronTask(); + $glpi_cron_task->fields['param'] = 1000; + $output = $cron_task->downloadCarbonIntensityFromSource($glpi_cron_task, $data_source, $carbon_intensity); + $this->assertEquals(-1, $output); } public function testFillIncompleteLocations() diff --git a/tests/units/DataSource/CarbonIntensity/ElectricityMaps/ClientTest.php b/tests/units/DataSource/CarbonIntensity/ElectricityMaps/ClientTest.php index f766d367..2c79a293 100644 --- a/tests/units/DataSource/CarbonIntensity/ElectricityMaps/ClientTest.php +++ b/tests/units/DataSource/CarbonIntensity/ElectricityMaps/ClientTest.php @@ -80,7 +80,7 @@ public function testFetchDay() ]); $date = new DateTimeImmutable('5 days ago'); - $intensities = $data_source->fetchDay($date, 'France'); + $intensities = $data_source->fetchDay($date, $source_zone); $this->assertIsArray($intensities); $this->assertArrayHasKey('source', $intensities); @@ -153,7 +153,7 @@ public function testFetchRange() $intensities = $data_source->fetchRange( DateTimeImmutable::createFromMutable($start), DateTimeImmutable::createFromMutable($stop), - 'France' + $source_zone ); $this->assertCount(24 * 30 + 2 * 12, $intensities); diff --git a/tests/units/DataSource/CarbonIntensity/Rte/ClientTest.php b/tests/units/DataSource/CarbonIntensity/Rte/ClientTest.php index 65ee2f03..477e9c64 100644 --- a/tests/units/DataSource/CarbonIntensity/Rte/ClientTest.php +++ b/tests/units/DataSource/CarbonIntensity/Rte/ClientTest.php @@ -36,6 +36,8 @@ use DateTimeImmutable; use GlpiPlugin\Carbon\CarbonIntensity; use GlpiPlugin\Carbon\DataSource\RestApiClientInterface; +use GlpiPlugin\Carbon\Source; +use GlpiPlugin\Carbon\Source_Zone; use GlpiPlugin\Carbon\Tests\DbTestCase; use GlpiPlugin\Carbon\Zone; use PHPUnit\Framework\Attributes\CoversClass; @@ -45,6 +47,13 @@ class ClientTest extends DbTestCase { public function testFetchDay() { + $source = $this->createItem(Source::class, ['name' => 'foo']); + $zone = $this->createItem(Zone::class, ['name' => 'bar']); + $source_zone = $this->createItem(Source_Zone::class, [ + getForeignKeyFieldForItemType(Source::class) => $source->getID(), + getForeignKeyFieldForItemType(Zone::class) => $zone->getID(), + ]); + $client = $this->createStub(RestApiClientInterface::class); $fixture_file = TU_FIXTURE_PATH . '/RTE/api-sample.json'; $response = file_get_contents($fixture_file); @@ -53,7 +62,7 @@ public function testFetchDay() $source = new Client($client); $date = new DateTimeImmutable('5 days ago'); - $intensities = $source->fetchDay($date, ''); + $intensities = $source->fetchDay($date, $source_zone); $this->assertIsArray($intensities); $this->assertEquals(96, count($intensities)); @@ -61,6 +70,13 @@ public function testFetchDay() public function testFetchRange() { + $source = $this->createItem(Source::class, ['name' => 'foo']); + $zone = $this->createItem(Zone::class, ['name' => 'bar']); + $source_zone = $this->createItem(Source_Zone::class, [ + getForeignKeyFieldForItemType(Source::class) => $source->getID(), + getForeignKeyFieldForItemType(Zone::class) => $zone->getID(), + ]); + $client = $this->createStub(RestApiClientInterface::class); $response = []; $date = new DateTime('2021-03-01 00:00:00'); @@ -78,7 +94,7 @@ public function testFetchRange() $start = new DateTimeImmutable('2021-03-01'); $stop = new DateTimeImmutable('2021-03-27'); - $intensities = $source->fetchRange($start, $stop, ''); + $intensities = $source->fetchRange($start, $stop, $source_zone); $this->assertIsArray($intensities); $this->assertIsArray($intensities); // There are 2496 intensities in the sample set @@ -87,6 +103,12 @@ public function testFetchRange() public function testFullDownload() { + $source = $this->getItem(Source::class, ['name' => 'RTE']); + $zone = $this->getItem(Zone::class, ['name' => 'France']); + $source_zone = $this->getItem(Source_Zone::class, [ + getForeignKeyFieldForItemType(Source::class) => $source->getID(), + getForeignKeyFieldForItemType(Zone::class) => $zone->getID(), + ]); $client = $this->createStub(RestApiClientInterface::class); $client->method('request')->willReturn([ [ @@ -111,17 +133,18 @@ public function testFullDownload() $start_date = new DateTimeImmutable('2024-10-08'); $stop_date = new DateTimeImmutable('2024-10-09'); $carbon_intensity = new CarbonIntensity(); - $output = $instance->fullDownload('France', $start_date, $stop_date, $carbon_intensity); + $output = $instance->fullDownload($source_zone, $start_date, $stop_date, $carbon_intensity); $this->assertEquals(1, $output); } public function testIncrementalDownload() { - $zone = new Zone(); - $zone->getFromDBByCrit(['name' => 'France']); - if ($zone->isNewItem()) { - $zone = $this->createItem(Zone::class, ['name' => 'France']); - } + $source = $this->getItem(Source::class, ['name' => 'RTE']); + $zone = $this->getItem(Zone::class, ['name' => 'France']); + $source_zone = $this->getItem(Source_Zone::class, [ + getForeignKeyFieldForItemType(Source::class) => $source->getID(), + getForeignKeyFieldForItemType(Zone::class) => $zone->getID(), + ]); $intensity = $this->createMock(CarbonIntensity::class); // 4 calls to fetchRange [3 days ago; today] @@ -142,6 +165,6 @@ public function testIncrementalDownload() $start_date = new DateTime('3 days ago'); $start_date->setTime(0, 0, 0); $start_date = DateTimeImmutable::createFromMutable($start_date); - $instance->incrementalDownload('France', $start_date, $intensity); + $instance->incrementalDownload($source_zone, $start_date, $intensity); } } diff --git a/tests/units/LocationTest.php b/tests/units/LocationTest.php index 69684fc0..7596a3af 100644 --- a/tests/units/LocationTest.php +++ b/tests/units/LocationTest.php @@ -80,13 +80,13 @@ public function test_prepareInputForUpdate_resets_source_zone_when_source_is_0() // This happens when the user removes the affectation of a location to a carbon intensity source and zone $input = [ 'id' => 1, - getForeignKeyFieldForItemType(Source::class) => 0, + getForeignKeyFieldForItemType(Source::class) => '0', ]; $instance = new Location(); $result = $instance->prepareInputForUpdate($input); $expected = [ 'id' => 1, - getForeignKeyFieldForItemType(Source::class) => 0, + getForeignKeyFieldForItemType(Source::class) => '0', getForeignKeyFieldForItemType(Source_Zone::class) => 0, ]; $this->assertSame($expected, $result);