File: pg_lite_app.t

package info (click to toggle)
libminion-perl 10.19%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 1,004 kB
  • sloc: javascript: 3,572; perl: 1,013; sql: 79; makefile: 10
file content (65 lines) | stat: -rw-r--r-- 2,052 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
use Mojo::Base -strict;

BEGIN { $ENV{MOJO_REACTOR} = 'Mojo::Reactor::Poll' }

use Test::More;

plan skip_all => 'set TEST_ONLINE to enable this test' unless $ENV{TEST_ONLINE};

use Mojo::IOLoop;
use Mojo::Promise;
use Mojolicious::Lite;
use Test::Mojo;

# Missing backend
eval { plugin Minion => {Something => 'fun'} };
like $@, qr/^Backend "Minion::Backend::Something" missing/, 'right error';

# Isolate tests
require Mojo::Pg;
my $pg = Mojo::Pg->new($ENV{TEST_ONLINE});
$pg->db->query('DROP SCHEMA IF EXISTS minion_app_test CASCADE');
$pg->db->query('CREATE SCHEMA minion_app_test');
plugin Minion => {Pg => $pg->search_path(['minion_app_test'])};

app->minion->add_task(
  add => sub {
    my ($job, $first, $second) = @_;
    Mojo::IOLoop->next_tick(sub {
      $job->finish($first + $second);
      Mojo::IOLoop->stop;
    });
    Mojo::IOLoop->start;
  }
);

get '/add' => sub {
  my $c  = shift;
  my $id = $c->minion->enqueue(add => [$c->param('first'), $c->param('second')] => {queue => 'test'});
  $c->render(text => $id);
};

get '/result' => sub {
  my $c = shift;
  $c->render(text => $c->minion->job($c->param('id'))->info->{result});
};

my $t = Test::Mojo->new;

subtest 'Perform jobs automatically' => sub {
  $t->get_ok('/add' => form => {first => 1, second => 2})->status_is(200);
  $t->app->minion->perform_jobs({queues => ['test']});
  $t->get_ok('/result' => form => {id    => $t->tx->res->text})->status_is(200)->content_is('3');
  $t->get_ok('/add'    => form => {first => 2, second => 3})->status_is(200);
  my $first = $t->tx->res->text;
  $t->get_ok('/add' => form => {first => 4, second => 5})->status_is(200);
  my $second = $t->tx->res->text;
  Mojo::Promise->new->resolve->then(sub { $t->app->minion->perform_jobs({queues => ['test']}) })->wait;
  $t->get_ok('/result' => form => {id => $first})->status_is(200)->content_is('5');
  $t->get_ok('/result' => form => {id => $second})->status_is(200)->content_is('9');
};

# Clean up once we are done
$pg->db->query('DROP SCHEMA minion_app_test CASCADE');

done_testing();