Patrick Schurig a23161b3b6 feat(spot): le fournisseur aWATTar sort du build livré (brief 3, T0)
Le fournisseur spot aWATTar était le seul flux sortant du moteur (invariant 10).
Il n'est plus compilé que sous `qmake CONFIG+=etm_spotmarket` ; la source reste
dans l'arbre pour la synchronisation amont.

Sans l'option (build livré) :
- `spotmarketdataproviderawattar.*` hors de SOURCES/HEADERS, enregistrement
  sous `#ifdef ETM_SPOTMARKET` ;
- aucun `QNetworkAccessManager` : le plugin et l'expérience de simulation
  passent par le même point, `SpotMarketBuild::creer()` ;
- `SetSpotMarketConfiguration` refuse l'activation avec
  `EnergyErrorInvalidParameter` + `fault: SPOT_MARKET_NOT_IN_BUILD` (code,
  pas de phrase). Désactiver reste accepté ;
- `planSpotMarketCharging()` est inerte : `enabled()` ne peut plus devenir vrai.

Tests :
- simulation `testSpotMarketIsOutOfTheBuild` ; contre-épreuve faite (un
  QNetworkAccessManager réintroduit fait échouer le test) ;
- spotmarket `shippedBuildHasNoProvider`, sur le .so réel ; les 4 tests qui
  lisent la liste aWATTar sont sautés hors option et passent avec l'option ;
- `testDecisionReasonRendering` : ligne de rendu du nouveau code.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 12:48:27 +02:00

46 lines
1.6 KiB
C++

// SPDX-License-Identifier: GPL-3.0-or-later
// Copyright (C) 2025 - 2026, Patrick Schurig / ETM PowerSync
#pragma once
#include <QObject>
class SpotMarketManager;
/*!
* \file spotmarketbuild.h
* \brief Le fournisseur spot selon le BUILD — un seul point de construction.
*
* \par Pourquoi un point unique
* Le plugin (\c EnergyPluginNymea::init()) et l'expérience de simulation construisent chacun
* leur \c SpotMarketManager. Si chacun décidait de son côté d'instancier ou non un
* \c QNetworkAccessManager, le test vérifierait la copie de la simulation, jamais celle qui
* part dans le paquet. Les deux passent donc par ici.
*
* \par Ce que l'option change
* Sans \c CONFIG+=etm_spotmarket (le build livré) : aucun \c QNetworkAccessManager, aucun
* fournisseur enregistré — le gestionnaire existe, mais \c setEnabled(true) est refusé faute
* de fournisseur, donc \c planSpotMarketCharging() rend la main à sa première ligne.
* Invariant 10 : le moteur ne contacte personne.
*/
namespace SpotMarketBuild {
//! \return Vrai si le fournisseur aWATTar est compilé dans ce build (\c ETM_SPOTMARKET).
constexpr bool inclus()
{
#ifdef ETM_SPOTMARKET
return true;
#else
return false;
#endif
}
/*!
* \brief Construit le gestionnaire spot de ce build.
* \param parent Parent Qt du gestionnaire — et du \c QNetworkAccessManager quand il existe.
* \return Le gestionnaire. Sans l'option, il est construit avec un gestionnaire réseau
* **nul** : aucun objet réseau n'est créé, et aucun fournisseur ne peut s'en servir.
*/
SpotMarketManager *creer(QObject *parent);
}