123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- use v5.36;
- use utf8;
- use Kelp::Test;
- use Test::More;
- use Test::Deep;
- use HTTP::Request::Common;
- use KelpBench;
- # use mock to avoid the need for DB modules and actual running DB
- # (however, we do not test for DB code correctness this way)
- package DBMock {
- use v5.36;
- use utf8;
- use Kelp::Base;
- sub random_number ($self, $id)
- {
- return {
- id => $id,
- randomNumber => int(rand(10_000) + 1),
- };
- }
- sub fortune ($self)
- {
- return [
- {
- id => 1,
- message => 'フレームワークのベンチマーク',
- },
- {
- id => 2,
- message => '<script>test</script>',
- },
- {
- id => 3,
- message => '&&/\\+?',
- },
- ];
- }
- sub update ($self, $id, $random_number)
- {
- return;
- }
- };
- my $app = KelpBench->new(mode => 'test', database => DBMock->new);
- my $t = Kelp::Test->new(app => $app);
- my $world = { randomNumber => re(qr{^\d+$}), id => re(qr{^\d+$}) };
- subtest plaintext => sub {
- my $uri = '/plaintext';
- $t->request(GET $uri)
- ->content_type_is('text/plain')
- ->content_is('Hello, World!');
- };
- subtest 'json' => sub {
- my $uri = '/json';
- $t->request(GET $uri)
- ->json_cmp({ message => 'Hello, World!' });
- };
- subtest db => sub {
- my $uri = '/db';
- $t->request(GET $uri)
- ->json_cmp($world);
- };
- subtest queries => sub {
- my $uri = '/queries';
- $t->request(GET $uri)
- ->json_cmp([$world]);
- $t->request(GET "$uri?queries=3")
- ->json_cmp([$world, $world, $world]);
- $t->request(GET "$uri?queries=0")
- ->json_cmp([$world]);
- };
- subtest update => sub {
- my $uri = '/updates';
- $t->request(GET $uri)
- ->json_cmp([$world]);
- $t->request(GET "$uri?queries=3")
- ->json_cmp([ $world, $world, $world ]);
- };
- subtest fortunes => sub {
- my $uri = '/fortunes';
- $t->request(GET $uri)
- ->content_type_is('text/html')
- ->content_like(qr{<script>})
- ->content_like(qr{フレームワークのベンチマーク})
- ->content_like(qr{Additional fortune added at request time.});
- };
- done_testing;
|