clauses test (xt/ because extra deps)
Matt S Trout [Fri, 12 Apr 2019 20:50:38 +0000 (20:50 +0000)]
xt/clauses.t [new file with mode: 0644]

diff --git a/xt/clauses.t b/xt/clauses.t
new file mode 100644 (file)
index 0000000..1c88964
--- /dev/null
@@ -0,0 +1,33 @@
+use strict;
+use warnings;
+use Test::More;
+use SQL::Abstract::Test import => [ qw(is_same_sql_bind) ];
+use SQL::Abstract::ExtraClauses;
+
+my $sqlac = SQL::Abstract::ExtraClauses->new;
+
+my ($sql, @bind) = $sqlac->select({
+  select => [ qw(artist.id artist.name), { -func => [ json_agg => 'cd' ] } ],
+  from => [
+    artist => -join => [ cd => on => { 'cd.artist_id' => 'artist.id' } ],
+  ],
+  where => { 'artist.genres', => { '@>', { -value => [ 'Rock' ] } } },
+  order_by => 'artist.name',
+  group_by => 'artist.id',
+  having => { '>' => [ { -func => [ count => 'cd.id' ] }, 3 ] }
+});
+
+is_same_sql_bind(
+  $sql, \@bind,
+  q{
+    SELECT artist.id, artist.name, JSON_AGG(cd)
+    FROM artist JOIN cd ON cd.artist_id = artist.id
+    WHERE artist.genres @> ?
+    ORDER BY artist.name
+    GROUP BY artist.id
+    HAVING COUNT(cd.id) > ?
+  },
+  [ [ 'Rock' ], 3 ]
+);
+
+done_testing;