[Rt-commit] rt branch, 5.0/rest2-add-asset-and-transaction-sql-endpoints, created. rt-5.0.0-5-ga0d45e074f
Craig Kaiser
craig at bestpractical.com
Mon Mar 1 13:11:34 EST 2021
The branch, 5.0/rest2-add-asset-and-transaction-sql-endpoints has been created
at a0d45e074feef46dba93a63ac09e7f1818719531 (commit)
- Log -----------------------------------------------------------------
commit 88f1462bd07eb4240bbfaf364d3f603fcb25db74
Author: craig kaiser <craig at bestpractical.com>
Date: Fri Feb 26 15:57:06 2021 -0500
Add AssetSQL endpoint to REST2
We want to be able to support the "old" method of POSTING JSON as well
so assets is slightly different than the tickets endpoint.
diff --git a/lib/RT/REST2/Resource/Assets.pm b/lib/RT/REST2/Resource/Assets.pm
index 907534e9c6..a1a84039fa 100644
--- a/lib/RT/REST2/Resource/Assets.pm
+++ b/lib/RT/REST2/Resource/Assets.pm
@@ -53,8 +53,7 @@ use warnings;
use Moose;
use namespace::autoclean;
-extends 'RT::REST2::Resource::Collection';
-with 'RT::REST2::Resource::Collection::QueryByJSON';
+extends 'RT::REST2::Resource::SupportsFromSQL';
sub dispatch_rules {
Path::Dispatcher::Rule::Regex->new(
diff --git a/lib/RT/REST2/Resource/SupportsFromSQL.pm b/lib/RT/REST2/Resource/SupportsFromSQL.pm
new file mode 100644
index 0000000000..9f82d3a979
--- /dev/null
+++ b/lib/RT/REST2/Resource/SupportsFromSQL.pm
@@ -0,0 +1,63 @@
+package RT::REST2::Resource::SupportsFromSQL;
+use strict;
+use warnings;
+
+use Moose;
+use namespace::autoclean;
+
+extends 'RT::REST2::Resource::Collection';
+with 'RT::REST2::Resource::Collection::QueryByJSON';
+
+use Encode qw( decode_utf8 );
+use RT::REST2::Util qw( error_as_json );
+
+has 'query' => (
+ is => 'ro',
+ isa => 'Str|ArrayRef[HashRef]',
+ lazy_build => 1,
+);
+
+sub _build_query {
+ my $self = shift;
+ my $query = "";
+
+ if ( $self->request->method eq 'GET' && $self->request->param('query') ) {
+ $query = decode_utf8($self->request->param('query') || "");
+ }
+ elsif ( $self->request->method eq 'GET' ) {
+ $query = $self->request->param('query') ? JSON::decode_json( $self->request->param('query') ) : [];
+ }
+ elsif ( $self->request->method eq 'POST' ) {
+ $query = $self->request->content ? JSON::decode_json($self->request->content) : [];
+ }
+ return $query;
+}
+
+around limit_collection => sub {
+ my $orig = shift;
+ my $self = shift;
+
+ if ( $self->request->method eq 'GET' && ref $self->query eq "" ) {
+ my ($ok, $msg) = $self->collection->FromSQL( $self->query );
+ return error_as_json( $self->response, 0, $msg ) unless $ok;
+
+ my @orderby_cols;
+ my @orders = $self->request->param('order');
+ foreach my $orderby ($self->request->param('orderby')) {
+ $orderby = decode_utf8($orderby);
+ my $order = shift @orders || 'ASC';
+ $order = uc(decode_utf8($order));
+ $order = 'ASC' unless $order eq 'DESC';
+ push @orderby_cols, {FIELD => $orderby, ORDER => $order};
+ }
+ $self->collection->OrderByCols(@orderby_cols)
+ if @orderby_cols;
+
+ return 1;
+ }
+ else {
+ return &$orig( $self );
+ }
+};
+
+1;
commit f802af031c3d2543bf4ab80fa79e1f7dfe431f30
Author: craig kaiser <craig at bestpractical.com>
Date: Mon Mar 1 09:55:57 2021 -0500
Preserve first_row and show_rows across the CleanSlate
diff --git a/lib/RT/Transactions.pm b/lib/RT/Transactions.pm
index 43458aaaf9..88ae9c21aa 100644
--- a/lib/RT/Transactions.pm
+++ b/lib/RT/Transactions.pm
@@ -1080,8 +1080,12 @@ sub _parser {
sub FromSQL {
my ($self,$query) = @_;
- $self->CleanSlate;
- $self->_InitSQL;
+ {
+ # preserve first_row and show_rows across the CleanSlate
+ local ($self->{'first_row'}, $self->{'show_rows'}, $self->{_sql_looking_at});
+ $self->CleanSlate;
+ $self->_InitSQL();
+ }
return (1, $self->loc("No Query")) unless $query;
commit f2b17006a983b8484dbd97f9a6e88b4ef7c57293
Author: craig kaiser <craig at bestpractical.com>
Date: Mon Mar 1 09:56:24 2021 -0500
Add TransactionSQL endpoint to REST2
diff --git a/lib/RT/REST2/Resource/Transactions.pm b/lib/RT/REST2/Resource/Transactions.pm
index 719a4e754a..46806b79a7 100644
--- a/lib/RT/REST2/Resource/Transactions.pm
+++ b/lib/RT/REST2/Resource/Transactions.pm
@@ -53,8 +53,7 @@ use warnings;
use Moose;
use namespace::autoclean;
-extends 'RT::REST2::Resource::Collection';
-with 'RT::REST2::Resource::Collection::QueryByJSON';
+extends 'RT::REST2::Resource::SupportsFromSQL';
sub dispatch_rules {
Path::Dispatcher::Rule::Regex->new(
commit 9eb081bd17e70d2cd9b6bf913057951796c4798e
Author: craig kaiser <craig at bestpractical.com>
Date: Mon Mar 1 13:07:00 2021 -0500
Add test for REST2 assetSQL search
diff --git a/t/rest2/assets.t b/t/rest2/assets.t
index 1f1712bfed..619564ae9c 100644
--- a/t/rest2/assets.t
+++ b/t/rest2/assets.t
@@ -142,6 +142,23 @@ my ($asset_url, $asset_id);
is($asset->{type}, 'asset');
is($asset->{id}, 1);
like($asset->{_url}, qr{$rest_base_path/asset/1$});
+
+ # Ensure our JSON search matches the assetSQL search
+ $res = $mech->get("$rest_base_path/assets?query=id>0",
+ 'Authorization' => $auth,
+ );
+ is($res->code, 200);
+ $content = $mech->json_response;
+ is($content->{count}, 1);
+ is($content->{page}, 1);
+ is($content->{per_page}, 20);
+ is($content->{total}, 1);
+ is(scalar @{$content->{items}}, 1);
+
+ $asset = $content->{items}->[0];
+ is($asset->{type}, 'asset');
+ is($asset->{id}, 1);
+ like($asset->{_url}, qr{$rest_base_path/asset/1$});
}
# Asset Update
commit a0d45e074feef46dba93a63ac09e7f1818719531
Author: craig kaiser <craig at bestpractical.com>
Date: Mon Mar 1 13:09:28 2021 -0500
Add test for REST2 transactionSQL search
diff --git a/t/rest2/transactions.t b/t/rest2/transactions.t
index 65e705d8f9..6096b54c6c 100644
--- a/t/rest2/transactions.t
+++ b/t/rest2/transactions.t
@@ -59,6 +59,35 @@ my ($comment_txn_url, $comment_txn_id);
ok(($comment_txn_id) = $comment_txn_url =~ qr[/transaction/(\d+)]);
}
+# search transactions for a specific ticket using TransactionSQL
+{
+ my $res = $mech->get("$rest_base_path/transactions?query=ObjectType='RT::Ticket' AND ObjectId=".$ticket->Id,
+ 'Authorization' => $auth,
+ );
+ is($res->code, 200);
+
+ my $content = $mech->json_response;
+ is($content->{count}, 5);
+ is($content->{page}, 1);
+ is($content->{per_page}, 20);
+ is($content->{total}, 5);
+ is(scalar @{$content->{items}}, 5);
+
+ my ($create, $priority1, $subject, $priority2, $comment) = @{ $content->{items} };
+
+ is($create->{type}, 'transaction');
+ is($priority1->{type}, 'transaction');
+ is($subject->{type}, 'transaction');
+ is($priority2->{type}, 'transaction');
+ is($comment->{type}, 'transaction');
+
+ $create_txn_url = $create->{_url};
+ ok(($create_txn_id) = $create_txn_url =~ qr[/transaction/(\d+)]);
+
+ $comment_txn_url = $comment->{_url};
+ ok(($comment_txn_id) = $comment_txn_url =~ qr[/transaction/(\d+)]);
+}
+
# Transaction display
{
my $res = $mech->get($create_txn_url,
-----------------------------------------------------------------------
More information about the rt-commit
mailing list