[ ['ID' => 99], ], ], JSON_THROW_ON_ERROR)); } return new MockResponse(json_encode([ 'Data' => [ [ 'ContactID' => 99, 'IsActive' => true, 'IsUnsubscribed' => false, ], ], ], JSON_THROW_ON_ERROR)); }); $mailjet = new ApiClient($client, new NullLogger(), 'key', 'secret', 'https://mailjet.test', '111'); $subscribed = $mailjet->isSubscribed(' Customer@Example.COM ', 123); self::assertTrue($subscribed); self::assertSame('123', (string) $requests[1][2]['query']['ContactsList']); } public function testUpsertContactCreatesContactAndUpdatesProperties(): void { $requests = []; $client = new MockHttpClient(function (string $method, string $url, array $options) use (&$requests): MockResponse { $requests[] = [$method, $url, $options]; if (true === str_contains($url, '/Contact?')) { return new MockResponse(json_encode([ 'Data' => [], ], JSON_THROW_ON_ERROR)); } if (true === str_contains($url, '/Contact')) { return new MockResponse(json_encode([ 'Data' => [ ['ID' => 99], ], ], JSON_THROW_ON_ERROR)); } return new MockResponse(json_encode([ 'Data' => [], ], JSON_THROW_ON_ERROR)); }); $mailjet = new ApiClient( $client, new NullLogger(), 'key', 'secret', 'https://mailjet.test', '111', [ 'firstName' => 'vorname', 'lastName' => 'nachname', ], ); $mailjet->upsertContact(' Customer@Example.COM ', ' Mia ', ' Muster '); self::assertCount(3, $requests); self::assertSame('GET', $requests[0][0]); self::assertSame('https://mailjet.test/Contact?Email=customer@example.com&Limit=1', $requests[0][1]); self::assertSame('customer@example.com', (string) $requests[0][2]['query']['Email']); self::assertSame('POST', $requests[1][0]); self::assertSame('https://mailjet.test/Contact', $requests[1][1]); self::assertSame([ 'Email' => 'customer@example.com', ], json_decode((string) $requests[1][2]['body'], true, 512, JSON_THROW_ON_ERROR)); self::assertSame('POST', $requests[2][0]); self::assertSame('https://mailjet.test/contactdata', $requests[2][1]); self::assertSame([ 'ContactID' => 99, 'Data' => [ [ 'Name' => 'vorname', 'Value' => 'Mia', ], [ 'Name' => 'nachname', 'Value' => 'Muster', ], ], ], json_decode((string) $requests[2][2]['body'], true, 512, JSON_THROW_ON_ERROR)); } public function testUpsertContactTruncatesLongNamesBeforeSending(): void { $requests = []; $client = new MockHttpClient(function (string $method, string $url, array $options) use (&$requests): MockResponse { $requests[] = [$method, $url, $options]; if (true === str_contains($url, '/Contact?')) { return new MockResponse(json_encode([ 'Data' => [ ['ID' => 99], ], ], JSON_THROW_ON_ERROR)); } if (true === str_contains($url, '/Contact')) { return new MockResponse(json_encode([ 'Data' => [], ], JSON_THROW_ON_ERROR)); } return new MockResponse(json_encode(['Data' => []], JSON_THROW_ON_ERROR)); }); $mailjet = new ApiClient( $client, new NullLogger(), 'key', 'secret', 'https://mailjet.test', '111', [ 'firstName' => 'vorname', 'lastName' => 'nachname', ], ); $mailjet->upsertContact('customer@example.com', str_repeat('A', 300), str_repeat('B', 300)); $payload = json_decode((string) $requests[1][2]['body'], true, 512, JSON_THROW_ON_ERROR); self::assertSame(255, strlen($payload['Data'][0]['Value'])); self::assertSame(255, strlen($payload['Data'][1]['Value'])); self::assertSame(str_repeat('A', 255), $payload['Data'][0]['Value']); self::assertSame(str_repeat('B', 255), $payload['Data'][1]['Value']); } public function testUpsertContactDoesNothingWithoutNames(): void { $requests = []; $client = new MockHttpClient(function (string $method, string $url, array $options) use (&$requests): MockResponse { $requests[] = [$method, $url, $options]; return new MockResponse(json_encode(['Data' => []], JSON_THROW_ON_ERROR)); }); $mailjet = new ApiClient($client, new NullLogger(), 'key', 'secret', 'https://mailjet.test', '111'); $mailjet->upsertContact(' Customer@Example.COM '); self::assertSame([], $requests); } public function testEnsureSubscribedUsesSuppliedListId(): void { $requests = []; $client = new MockHttpClient(function (string $method, string $url, array $options) use (&$requests): MockResponse { $requests[] = [$method, $url, $options]; return new MockResponse(json_encode(['Data' => []], JSON_THROW_ON_ERROR)); }); $mailjet = new ApiClient($client, new NullLogger(), 'key', 'secret', 'https://mailjet.test', '111'); $mailjet->ensureSubscribed(' Customer@Example.COM ', 456); self::assertCount(1, $requests); self::assertSame('POST', $requests[0][0]); self::assertSame('https://mailjet.test/Contactslist/456/managecontact', $requests[0][1]); self::assertSame([ 'Email' => 'customer@example.com', 'Action' => 'addforce', ], json_decode((string) $requests[0][2]['body'], true, 512, JSON_THROW_ON_ERROR)); } }