Fixed mailman test

This commit is contained in:
philipp lang 2023-06-13 21:21:30 +02:00 committed by Philipp Lang
parent 904ec829c1
commit 8f3cc95300
4 changed files with 52 additions and 8 deletions

View File

@ -6,6 +6,7 @@ use Spatie\LaravelData\Attributes\MapName;
use Spatie\LaravelData\Attributes\MapOutputName; use Spatie\LaravelData\Attributes\MapOutputName;
use Spatie\LaravelData\Data; use Spatie\LaravelData\Data;
use Spatie\LaravelData\Mappers\SnakeCaseMapper; use Spatie\LaravelData\Mappers\SnakeCaseMapper;
use Tests\RequestFactories\MailinglistFactory;
#[MapName(SnakeCaseMapper::class)] #[MapName(SnakeCaseMapper::class)]
class MailingList extends Data class MailingList extends Data
@ -24,4 +25,9 @@ class MailingList extends Data
public int $volume, public int $volume,
) { ) {
} }
public static function factory(): MailinglistFactory
{
return MailinglistFactory::new();
}
} }

View File

@ -11,7 +11,6 @@ class Member extends Data
{ {
public function __construct( public function __construct(
public string $email, public string $email,
public string $listId,
public string $memberId, public string $memberId,
) { ) {
} }

View File

@ -0,0 +1,39 @@
<?php
namespace Tests\RequestFactories;
use App\Mailman\Data\MailingList;
use Worksome\RequestFactories\RequestFactory;
class MailinglistFactory extends RequestFactory
{
public function definition(): array
{
return [
'description' => $this->faker->words(5, true),
'displayName' => $this->faker->words(5, true),
'fqdnListname' => $this->faker->safeEmail(),
'listId' => $this->faker->domainName(),
'listName' => $this->faker->words(5, true),
'mailHost' => $this->faker->domainName(),
'memberCount' => $this->faker->numberBetween(10, 100),
'selfLink' => $this->faker->url(),
'volume' => 1,
];
}
/**
* @param array<string, mixed> $attributes
*/
public function toData(array $attributes = []): MailingList
{
return MailingList::from($this->create($attributes));
}
public function id(string $id): self
{
return $this->state([
'list_id' => $id,
]);
}
}

View File

@ -45,16 +45,16 @@ class ServiceTest extends TestCase
Http::fake([ Http::fake([
'http://mailman.test/api/lists/listid/roster/member?page=1&count=10' => Http::response(json_encode([ 'http://mailman.test/api/lists/listid/roster/member?page=1&count=10' => Http::response(json_encode([
'entries' => [ 'entries' => [
['email' => 'test@example.com'], ['email' => 'test@example.com', 'self_link' => 'https://example.com/994'],
['email' => 'test2@example.com'],
], ],
'total_size' => 2, 'total_size' => 2,
]), 200), ]), 200),
]); ]);
$result = app(MailmanService::class)->setCredentials('http://mailman.test/api/', 'user', 'secret')->members('listid'); $result = app(MailmanService::class)->setCredentials('http://mailman.test/api/', 'user', 'secret')->members(MailingList::factory()->id('listid')->toData())->first();
$this->assertEquals(['test@example.com', 'test2@example.com'], $result->toArray()); $this->assertEquals(994, $result->memberId);
$this->assertEquals('test@example.com', $result->email);
Http::assertSentCount(1); Http::assertSentCount(1);
Http::assertSent(fn ($request) => 'GET' === $request->method() && 'http://mailman.test/api/lists/listid/roster/member?page=1&count=10' === $request->url() && $request->header('Authorization') === ['Basic '.base64_encode('user:secret')]); Http::assertSent(fn ($request) => 'GET' === $request->method() && 'http://mailman.test/api/lists/listid/roster/member?page=1&count=10' === $request->url() && $request->header('Authorization') === ['Basic '.base64_encode('user:secret')]);
} }
@ -66,7 +66,7 @@ class ServiceTest extends TestCase
'http://mailman.test/api/lists/listid/roster/member?page=1&count=10' => Http::response('', 401), 'http://mailman.test/api/lists/listid/roster/member?page=1&count=10' => Http::response('', 401),
]); ]);
app(MailmanService::class)->setCredentials('http://mailman.test/api/', 'user', 'secret')->members('listid')->first(); app(MailmanService::class)->setCredentials('http://mailman.test/api/', 'user', 'secret')->members(MailingList::factory()->id('listid')->toData())->first();
} }
public function testItCanGetLists(): void public function testItCanGetLists(): void
@ -94,7 +94,7 @@ class ServiceTest extends TestCase
foreach (range(3, 40) as $i) { foreach (range(3, 40) as $i) {
yield [ yield [
collect(range(1, $i)) collect(range(1, $i))
->map(fn ($num) => ['email' => 'test'.$num.'@example.com']) ->map(fn ($num) => ['email' => 'test'.$num.'@example.com', 'self_link' => 'https://example.com/994'])
->toArray(), ->toArray(),
]; ];
} }
@ -115,7 +115,7 @@ class ServiceTest extends TestCase
]); ]);
} }
$result = app(MailmanService::class)->setCredentials('http://mailman.test/api/', 'user', 'secret')->members('listid'); $result = app(MailmanService::class)->setCredentials('http://mailman.test/api/', 'user', 'secret')->members(MailingList::factory()->id('listid')->toData());
$this->assertCount($totals->count(), $result->toArray()); $this->assertCount($totals->count(), $result->toArray());
Http::assertSentCount($totals->chunk(10)->count()); Http::assertSentCount($totals->chunk(10)->count());