From 7d0642eb6a42827b66cd9fb33c5cc807f9f3a5d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C3=ABl=20Gangloff?= Date: Fri, 17 Oct 2025 23:08:28 +0200 Subject: [PATCH] test: add test for NameCom provider --- .env.test | 3 + .github/workflows/lint-and-tests.yml | 2 + config/services.yaml | 2 + src/Service/Provider/NameComProvider.php | 13 +-- .../Service/Provider/AbstractProviderTest.php | 96 +++++++++++++++++++ tests/Service/Provider/GandiProviderTest.php | 55 ----------- 6 files changed, 108 insertions(+), 63 deletions(-) create mode 100644 tests/Service/Provider/AbstractProviderTest.php delete mode 100644 tests/Service/Provider/GandiProviderTest.php diff --git a/.env.test b/.env.test index 3cdd207..738de73 100644 --- a/.env.test +++ b/.env.test @@ -12,3 +12,6 @@ LIMIT_MAX_WATCHLIST_WEBHOOKS=10 # TEST GANDI_PAT_TOKEN= + +NAMECOM_USERNAME= +NAMECOM_PASSWORD= diff --git a/.github/workflows/lint-and-tests.yml b/.github/workflows/lint-and-tests.yml index 78b8fa4..95b04a0 100644 --- a/.github/workflows/lint-and-tests.yml +++ b/.github/workflows/lint-and-tests.yml @@ -106,6 +106,8 @@ jobs: needs: [ php-setup, cs-fixer, phpstan ] env: GANDI_PAT_TOKEN: ${{ secrets.GANDI_PAT_TOKEN }} + NAMECOM_USERNAME: ${{ secrets.NAMECOM_USERNAME }} + NAMECOM_PASSWORD: ${{ secrets.NAMECOM_PASSWORD }} services: postgres: image: postgres diff --git a/config/services.yaml b/config/services.yaml index cf5b596..e635b6e 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -50,3 +50,5 @@ services: when@test: parameters: gandi_pat_token: '%env(string:GANDI_PAT_TOKEN)%' + namecom_username: '%env(string:NAMECOM_USERNAME)%' + namecom_password: '%env(string:NAMECOM_PASSWORD)%' diff --git a/src/Service/Provider/NameComProvider.php b/src/Service/Provider/NameComProvider.php index 866158b..112be96 100644 --- a/src/Service/Provider/NameComProvider.php +++ b/src/Service/Provider/NameComProvider.php @@ -57,20 +57,17 @@ class NameComProvider extends AbstractProvider $this->client->request( 'POST', - '/v4/domains', + '/core/v1/domains', (new HttpOptions()) ->setHeader('Accept', 'application/json') ->setAuthBasic($this->authData->username, $this->authData->token) ->setBaseUri($dryRun ? self::DEV_BASE_URL : self::BASE_URL) ->setJson([ 'domain' => [ - [ - 'domainName' => $domain->getLdhName(), - 'locked' => false, - 'autorenewEnabled' => false, - ], + 'domainName' => $domain->getLdhName(), + 'locked' => false, + 'autorenewEnabled' => false, 'purchaseType' => 'registration', - 'years' => 1, // 'tldRequirements' => [] ], ]) @@ -104,7 +101,7 @@ class NameComProvider extends AbstractProvider { $response = $this->client->request( 'GET', - '/v4/hello', + '/core/v1/hello', (new HttpOptions()) ->setHeader('Accept', 'application/json') ->setAuthBasic($this->authData->username, $this->authData->token) diff --git a/tests/Service/Provider/AbstractProviderTest.php b/tests/Service/Provider/AbstractProviderTest.php new file mode 100644 index 0000000..93e3327 --- /dev/null +++ b/tests/Service/Provider/AbstractProviderTest.php @@ -0,0 +1,96 @@ +getParameter('gandi_pat_token'); + if (!$gandiToken) { + $this->markTestSkipped('Missing Gandi PAT token'); + } + + $this->testGenericProvider(ConnectorProvider::GANDI, [ + 'waiveRetractationPeriod' => true, + 'acceptConditions' => true, + 'ownerLegalAge' => true, + 'token' => $gandiToken, + ]); + } + + #[DependsExternal(RDAPServiceTest::class, 'testUpdateRdapServers')] + public function testNameCom() + { + $namecomUsername = static::getContainer()->getParameter('namecom_username'); + $namecomPassword = static::getContainer()->getParameter('namecom_password'); + + if (!$namecomUsername || !$namecomPassword) { + $this->markTestSkipped('Missing Name.com username or password'); + } + + $this->testGenericProvider(ConnectorProvider::NAMECOM, [ + 'waiveRetractationPeriod' => true, + 'acceptConditions' => true, + 'ownerLegalAge' => true, + 'username' => $namecomUsername, + 'token' => $namecomPassword, + ]); + } + + private function testGenericProvider(ConnectorProvider $connectorProvider, array $authData): void + { + // Create a Connector + $client = ConnectorControllerTest::createClientWithCredentials(ConnectorControllerTest::getToken(UserFactory::createOne())); + $response = $client->request('POST', '/api/connectors', ['json' => [ + 'authData' => $authData, + 'provider' => $connectorProvider->value, + ]]); + $this->assertResponseStatusCodeSame(201); + + /** @var EntityManagerInterface $entityManager */ + $entityManager = self::getContainer()->get(EntityManagerInterface::class); + + // Create a Watchlist with the domain name + WatchListUpdateProcessorTest::createUserAndWatchlist($client, + ['/api/domains/example.com'], + '/api/connectors/'.$response->toArray()['id']); + + $response = $client->request('GET', '/api/watchlists'); + $watchlist = $entityManager->getRepository(WatchList::class)->findOneBy(['token' => $response->toArray()['hydra:member'][0]['token']]); + + $domain = (new Domain()) + ->setLdhName((new UuidV4()).'.com') + ->setDeleted(true) + ->setTld($entityManager->getReference(Tld::class, 'fr')) + ->setDelegationSigned(false); + + $entityManager->persist($domain); + $watchlist->addDomain($domain); + + $entityManager->flush(); + + // Trigger the Order Domain message + $orderDomainHandler = self::getContainer()->get(OrderDomainHandler::class); + $message = new OrderDomain($watchlist->getToken(), $domain->getLdhName()); + $orderDomainHandler($message); + + $this->assertResponseStatusCodeSame(200); + } +} diff --git a/tests/Service/Provider/GandiProviderTest.php b/tests/Service/Provider/GandiProviderTest.php deleted file mode 100644 index b1165b3..0000000 --- a/tests/Service/Provider/GandiProviderTest.php +++ /dev/null @@ -1,55 +0,0 @@ -getParameter('gandi_pat_token'); - if (!$gandiToken) { - $this->markTestSkipped('Missing Gandi PAT token'); - } - - // Create a GANDI Connector - $client = ConnectorControllerTest::createClientWithCredentials(ConnectorControllerTest::getToken(UserFactory::createOne())); - $response = $client->request('POST', '/api/connectors', ['json' => [ - 'authData' => [ - 'waiveRetractationPeriod' => true, - 'acceptConditions' => true, - 'ownerLegalAge' => true, - 'token' => $gandiToken, - ], - 'provider' => 'gandi', - ]]); - $this->assertResponseStatusCodeSame(201); - - // Create a Watchlist with a single domain name - WatchListUpdateProcessorTest::createUserAndWatchlist($client, ['/api/domains/example.com'], '/api/connectors/'.$response->toArray()['id']); - - $response = $client->request('GET', '/api/watchlists'); - $watchlistId = $response->toArray()['hydra:member'][0]['token']; - - // Set the domain as deleted - $domain = self::getContainer()->get(DomainRepository::class)->findOneBy(['ldhName' => 'example.com']); - $domain->setDeleted(true); - - // Trigger the Order Domain message - $orderDomainHandler = self::getContainer()->get(OrderDomainHandler::class); - $message = new OrderDomain($watchlistId, 'example.com'); - $orderDomainHandler($message); - - $this->assertResponseStatusCodeSame(200); - } -}