60]); config(['cache_prices.prefix' => 'test:']); } protected function tearDown(): void { Mockery::close(); Cache::flush(); parent::tearDown(); } public function test_retrieve_electricity_returns_collection_of_electricity_data(): void { $now = Carbon::now(); $electricityResponse = collect([ [ 'start_date' => $now->format('Y-m-d H:i:s'), 'end_date' => $now->copy()->addHour()->format('Y-m-d H:i:s'), 'period' => 'elec_hour', 'market_price' => 1500, 'total_price_tax_included' => 15.50, 'price_incl_handling_vat' => 1550, 'price_tax_with_vat' => 300, 'pricing_profile' => 'dynamic', 'carbon_footprint_in_gram' => 500, 'sustainability_score' => 80, 'start_date_datetime' => $now->format('Y-m-d H:i:s'), ], ]); $client = Mockery::mock(PriceClient::class); $client->shouldReceive('getElectricityPrices') ->once() ->andReturn($electricityResponse); $repository = new ZonneplanPriceRepository($client); $result = $repository->retrieveElectricity(); $this->assertInstanceOf(Collection::class, $result); $this->assertCount(1, $result); $this->assertInstanceOf(ElectricityData::class, $result->first()); } public function test_retrieve_gas_returns_collection_of_gas_data(): void { $now = Carbon::now(); $gasResponse = collect([ [ 'start_date' => $now->format('Y-m-d H:i:s'), 'end_date' => $now->copy()->addDay()->format('Y-m-d H:i:s'), 'period' => 'gas_day', 'market_price' => 500, 'total_price_tax_included' => 5.50, 'price_incl_handling_vat' => 550, 'price_tax_with_vat' => 100, 'start_date_datetime' => $now->format('Y-m-d H:i:s'), ], ]); $client = Mockery::mock(PriceClient::class); $client->shouldReceive('getGasPrices') ->once() ->andReturn($gasResponse); $repository = new ZonneplanPriceRepository($client); $result = $repository->retrieveGas(); $this->assertInstanceOf(Collection::class, $result); $this->assertCount(1, $result); $this->assertInstanceOf(GasData::class, $result->first()); } public function test_retrieve_electricity_for_date_returns_collection(): void { $date = Carbon::today(); $electricityResponse = collect([ [ 'start_date' => $date->copy()->setHour(0)->format('Y-m-d H:i:s'), 'end_date' => $date->copy()->setHour(1)->format('Y-m-d H:i:s'), 'period' => 'elec_hour', 'market_price' => 1500, 'total_price_tax_included' => 15.50, 'price_incl_handling_vat' => 1550, 'price_tax_with_vat' => 300, 'pricing_profile' => 'dynamic', 'carbon_footprint_in_gram' => 500, 'sustainability_score' => 80, 'start_date_datetime' => $date->copy()->setHour(0)->format('Y-m-d H:i:s'), ], ]); $client = Mockery::mock(PriceClient::class); $client->shouldReceive('getElectricityPricesForDate') ->once() ->with($date) ->andReturn($electricityResponse); $repository = new ZonneplanPriceRepository($client); $result = $repository->retrieveElectricityForDate($date); $this->assertInstanceOf(Collection::class, $result); $this->assertCount(1, $result); $this->assertInstanceOf(ElectricityData::class, $result->first()); } public function test_retrieve_gas_for_date_returns_collection(): void { $date = Carbon::today(); $gasResponse = collect([ [ 'start_date' => $date->format('Y-m-d H:i:s'), 'end_date' => $date->copy()->addDay()->format('Y-m-d H:i:s'), 'period' => 'gas_day', 'market_price' => 500, 'total_price_tax_included' => 5.50, 'price_incl_handling_vat' => 550, 'price_tax_with_vat' => 100, 'start_date_datetime' => $date->format('Y-m-d H:i:s'), ], ]); $client = Mockery::mock(PriceClient::class); $client->shouldReceive('getGasPricesForDate') ->once() ->with($date) ->andReturn($gasResponse); $repository = new ZonneplanPriceRepository($client); $result = $repository->retrieveGasForDate($date); $this->assertInstanceOf(Collection::class, $result); $this->assertCount(1, $result); $this->assertInstanceOf(GasData::class, $result->first()); } public function test_retrieve_electricity_caches_result(): void { $now = Carbon::now(); $electricityResponse = collect([ [ 'start_date' => $now->format('Y-m-d H:i:s'), 'end_date' => $now->copy()->addHour()->format('Y-m-d H:i:s'), 'period' => 'elec_hour', 'market_price' => 1500, 'total_price_tax_included' => 15.50, 'price_incl_handling_vat' => 1550, 'price_tax_with_vat' => 300, 'pricing_profile' => 'dynamic', 'carbon_footprint_in_gram' => 500, 'sustainability_score' => 80, 'start_date_datetime' => $now->format('Y-m-d H:i:s'), ], ]); $client = Mockery::mock(PriceClient::class); $client->shouldReceive('getElectricityPrices') ->once() ->andReturn($electricityResponse); $repository = new ZonneplanPriceRepository($client); $result1 = $repository->retrieveElectricity(); $result2 = $repository->retrieveElectricity(); $this->assertEquals( $result1->first()->totalPriceTaxIncluded, $result2->first()->totalPriceTaxIncluded ); } }