executeQuery($sql); } } class DolibarrUtilsTest extends TestCase { private Connection|MockObject $dolibarrConnection; private TestableDolibarrUtils $dolibarrUtils; protected function setUp(): void { $this->dolibarrConnection = $this->createMock(Connection::class); $this->dolibarrUtils = new TestableDolibarrUtils($this->dolibarrConnection); } /** * @see DolibarrUtils::getProductId() */ public function testGetProductIdForArtistPremiumTrial(): void { $result = $this->dolibarrUtils->getProductId( SettingsProductEnum::ARTIST_PREMIUM, true, false ); $this->assertEquals(DolibarrUtils::ARTIST_PREMIUM_TRIAL_PRODUCT_ID, $result); } /** * @see DolibarrUtils::getProductId() */ public function testGetProductIdForArtistPremiumCmf(): void { $result = $this->dolibarrUtils->getProductId( SettingsProductEnum::ARTIST_PREMIUM, false, true ); $this->assertEquals(DolibarrUtils::ARTIST_PREMIUM_CMF_PRODUCT_ID, $result); } /** * @see DolibarrUtils::getProductId() */ public function testGetProductIdForArtistPremium(): void { $result = $this->dolibarrUtils->getProductId( SettingsProductEnum::ARTIST_PREMIUM, false, false ); $this->assertEquals(DolibarrUtils::ARTIST_PREMIUM_PRODUCT_ID, $result); } /** * @see DolibarrUtils::getProductId() */ public function testGetProductIdForArtistCmf(): void { $result = $this->dolibarrUtils->getProductId( SettingsProductEnum::ARTIST, false, true ); $this->assertEquals(DolibarrUtils::ARTIST_STANDARD_CMF_PRODUCT_ID, $result); } /** * @see DolibarrUtils::getProductId() */ public function testGetProductIdWithInvalidContractType(): void { $this->expectException(\InvalidArgumentException::class); $this->expectExceptionMessage('Invalid contract type'); $this->dolibarrUtils->getProductId( SettingsProductEnum::SCHOOL, false, false ); } /** * @see DolibarrUtils::executeQuery() */ public function testExecuteQuery(): void { $sql = 'DELETE FROM llx_societe_commerciaux WHERE fk_soc = 123'; $this->dolibarrConnection ->expects($this->once()) ->method('executeQuery') ->with($sql); $this->dolibarrUtils->executeQueryPublic($sql); } /** * @see DolibarrUtils::updateSocietyCommercialsWithApi() */ public function testUpdateSocietyCommercialsWithApi(): void { $societyId = 123; $apiUserId = 8; $this->dolibarrConnection ->expects($this->exactly(2)) ->method('executeQuery') ->withConsecutive( ["DELETE FROM llx_societe_commerciaux WHERE fk_soc = $societyId"], ["INSERT INTO llx_societe_commerciaux (fk_soc, fk_user) VALUES ($societyId, $apiUserId)"] ); $this->dolibarrUtils->updateSocietyCommercialsWithApi($societyId); } /** * @see DolibarrUtils::addActionComm() */ public function testAddActionComm(): void { $societyId = 123; $title = 'Test Title'; $message = 'Test Message'; $apiUserId = 8; // Mock DatesUtils to return a fixed date $tz = new \DateTimeZone('Europe/Paris'); $mockDate = new \DateTime('2023-01-01 12:00:00', $tz); $formattedDate = $mockDate->format('Y-m-d H:i:s'); // Create a partial mock of DatesUtils to control the 'new' static method $datesMock = $this->createMock(DatesUtils::class); DatesUtils::setFakeDatetime('2023-01-01 12:00:00'); $this->dolibarrConnection ->expects($this->once()) ->method('executeQuery') ->with( "INSERT INTO llx_actioncomm (fk_soc, ref, code, label, note, datep, datep2, datec, fk_user_author, fk_user_mod, fk_user_action, percent) VALUES ($societyId, -1, 'AC_OT_ONLINE_STORE', '$title', '$message', '$formattedDate', '$formattedDate', '$formattedDate', $apiUserId, $apiUserId, $apiUserId, -1)" ); $this->dolibarrUtils->addActionComm($societyId, $title, $message); } /** * @see DolibarrUtils::getDolibarrProductName() */ public function testGetDolibarrProductNameForArtist(): void { $result = $this->dolibarrUtils->getDolibarrProductName(SettingsProductEnum::ARTIST); $this->assertEquals('Opentalent Artist', $result); } /** * @see DolibarrUtils::getDolibarrProductName() */ public function testGetDolibarrProductNameForArtistPremiumTrial(): void { $result = $this->dolibarrUtils->getDolibarrProductName(SettingsProductEnum::ARTIST_PREMIUM, true); $this->assertEquals('Opentalent Artist Premium (Essai)', $result); } /** * @see DolibarrUtils::getDolibarrProductName() */ public function testGetDolibarrProductNameForArtistPremium(): void { $result = $this->dolibarrUtils->getDolibarrProductName(SettingsProductEnum::ARTIST_PREMIUM); $this->assertEquals('Opentalent Artist Premium', $result); } /** * @see DolibarrUtils::getDolibarrProductName() */ public function testGetDolibarrProductNameForSchool(): void { $result = $this->dolibarrUtils->getDolibarrProductName(SettingsProductEnum::SCHOOL); $this->assertEquals('Opentalent School', $result); } /** * @see DolibarrUtils::getDolibarrProductName() */ public function testGetDolibarrProductNameForSchoolPremiumTrial(): void { $result = $this->dolibarrUtils->getDolibarrProductName(SettingsProductEnum::SCHOOL_PREMIUM, true); $this->assertEquals('Opentalent School Premium (Essai)', $result); } /** * @see DolibarrUtils::getDolibarrProductName() */ public function testGetDolibarrProductNameForSchoolPremium(): void { $result = $this->dolibarrUtils->getDolibarrProductName(SettingsProductEnum::SCHOOL_PREMIUM); $this->assertEquals('Opentalent School Premium', $result); } /** * @see DolibarrUtils::getDolibarrProductName() */ public function testGetDolibarrProductNameForManager(): void { $result = $this->dolibarrUtils->getDolibarrProductName(SettingsProductEnum::MANAGER); $this->assertEquals('Opentalent Manager', $result); } /** * @see DolibarrUtils::getDolibarrProductName() */ public function testGetDolibarrProductNameForManagerPremium(): void { $result = $this->dolibarrUtils->getDolibarrProductName(SettingsProductEnum::MANAGER_PREMIUM); $this->assertEquals('Opentalent Manager Premium', $result); } }