main.t 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. use v5.36;
  2. use utf8;
  3. use Kelp::Test;
  4. use Test::More;
  5. use Test::Deep;
  6. use HTTP::Request::Common;
  7. use KelpBench;
  8. # use mock to avoid the need for DB modules and actual running DB
  9. # (however, we do not test for DB code correctness this way)
  10. package DBMock {
  11. use v5.36;
  12. use utf8;
  13. use Kelp::Base;
  14. sub random_number ($self, $id)
  15. {
  16. return {
  17. id => $id,
  18. randomNumber => int(rand(10_000) + 1),
  19. };
  20. }
  21. sub fortune ($self)
  22. {
  23. return [
  24. {
  25. id => 1,
  26. message => 'フレームワークのベンチマーク',
  27. },
  28. {
  29. id => 2,
  30. message => '<script>test</script>',
  31. },
  32. {
  33. id => 3,
  34. message => '&&/\\+?',
  35. },
  36. ];
  37. }
  38. sub update ($self, $id, $random_number)
  39. {
  40. return;
  41. }
  42. };
  43. my $app = KelpBench->new(mode => 'test', database => DBMock->new);
  44. my $t = Kelp::Test->new(app => $app);
  45. my $world = { randomNumber => re(qr{^\d+$}), id => re(qr{^\d+$}) };
  46. subtest plaintext => sub {
  47. my $uri = '/plaintext';
  48. $t->request(GET $uri)
  49. ->content_type_is('text/plain')
  50. ->content_is('Hello, World!');
  51. };
  52. subtest 'json' => sub {
  53. my $uri = '/json';
  54. $t->request(GET $uri)
  55. ->json_cmp({ message => 'Hello, World!' });
  56. };
  57. subtest db => sub {
  58. my $uri = '/db';
  59. $t->request(GET $uri)
  60. ->json_cmp($world);
  61. };
  62. subtest queries => sub {
  63. my $uri = '/queries';
  64. $t->request(GET $uri)
  65. ->json_cmp([$world]);
  66. $t->request(GET "$uri?queries=3")
  67. ->json_cmp([$world, $world, $world]);
  68. $t->request(GET "$uri?queries=0")
  69. ->json_cmp([$world]);
  70. };
  71. subtest update => sub {
  72. my $uri = '/updates';
  73. $t->request(GET $uri)
  74. ->json_cmp([$world]);
  75. $t->request(GET "$uri?queries=3")
  76. ->json_cmp([ $world, $world, $world ]);
  77. };
  78. subtest fortunes => sub {
  79. my $uri = '/fortunes';
  80. $t->request(GET $uri)
  81. ->content_type_is('text/html')
  82. ->content_like(qr{&lt;script&gt;})
  83. ->content_like(qr{フレームワークのベンチマーク})
  84. ->content_like(qr{Additional fortune added at request time.});
  85. };
  86. done_testing;