From b8912c6ff04fad1d67614526631b327d723ee352 Mon Sep 17 00:00:00 2001 From: Ali Naqvi Date: Mon, 27 Jan 2025 17:42:10 +0800 Subject: [PATCH 1/2] fix(asset_types): index endpoint to return 404 when no matching entries found --- spec/controllers/asset_types_spec.cr | 11 ++++++++++- src/placeos-rest-api/controllers/asset_types.cr | 3 ++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/spec/controllers/asset_types_spec.cr b/spec/controllers/asset_types_spec.cr index ff906699..033cb103 100644 --- a/spec/controllers/asset_types_spec.cr +++ b/spec/controllers/asset_types_spec.cr @@ -5,7 +5,16 @@ module PlaceOS::Api Spec.test_404(AssetTypes.base_route, model_name: Model::AssetType.table_name, headers: Spec::Authentication.headers, clz: Int64) describe "index", tags: "search" do - it "should return json when get request is invoked" do + it "should return 404 when no matching asset types found" do + PlaceOS::Model::Asset.clear + PlaceOS::Model::AssetType.clear + params = HTTP::Params.encode({"zone_id" => "unknown-zone"}) + path = "#{AssetTypes.base_route}?#{params}" + result = client.get(path, headers: Spec::Authentication.headers) + result.status_code.should eq(404) + end + + it "should return json when get request is invoked for matching asset-types" do PlaceOS::Model::Asset.clear PlaceOS::Model::AssetType.clear asset = PlaceOS::Model::Generator.asset.save! diff --git a/src/placeos-rest-api/controllers/asset_types.cr b/src/placeos-rest-api/controllers/asset_types.cr index dfb644a1..997bdae4 100644 --- a/src/placeos-rest-api/controllers/asset_types.cr +++ b/src/placeos-rest-api/controllers/asset_types.cr @@ -102,8 +102,9 @@ module PlaceOS::Api SQL result = PgORM::Database.connection do |db| - db.query_one sql, &.read(JSON::PullParser).read_raw + db.query_one sql, &.read(JSON::PullParser?).try &.read_raw end + raise Error::NotFound.new unless result render json: result end From efe01c7aba1fcf59aa7259ccf506f2fec4de30a2 Mon Sep 17 00:00:00 2001 From: Ali Naqvi Date: Tue, 4 Feb 2025 15:45:55 +0800 Subject: [PATCH 2/2] endpoint to return empty array when no match found --- spec/controllers/asset_types_spec.cr | 7 +++++-- src/placeos-rest-api/controllers/asset_types.cr | 3 +-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/spec/controllers/asset_types_spec.cr b/spec/controllers/asset_types_spec.cr index 033cb103..e5ef7aff 100644 --- a/spec/controllers/asset_types_spec.cr +++ b/spec/controllers/asset_types_spec.cr @@ -5,13 +5,16 @@ module PlaceOS::Api Spec.test_404(AssetTypes.base_route, model_name: Model::AssetType.table_name, headers: Spec::Authentication.headers, clz: Int64) describe "index", tags: "search" do - it "should return 404 when no matching asset types found" do + it "should return an empty array when no matching asset types found" do PlaceOS::Model::Asset.clear PlaceOS::Model::AssetType.clear params = HTTP::Params.encode({"zone_id" => "unknown-zone"}) path = "#{AssetTypes.base_route}?#{params}" result = client.get(path, headers: Spec::Authentication.headers) - result.status_code.should eq(404) + result.status_code.should eq(200) + body = JSON.parse(result.body) + body.as_a?.should_not be_nil + body.as_a.size.should be >= 0 end it "should return json when get request is invoked for matching asset-types" do diff --git a/src/placeos-rest-api/controllers/asset_types.cr b/src/placeos-rest-api/controllers/asset_types.cr index 997bdae4..db25682a 100644 --- a/src/placeos-rest-api/controllers/asset_types.cr +++ b/src/placeos-rest-api/controllers/asset_types.cr @@ -104,8 +104,7 @@ module PlaceOS::Api result = PgORM::Database.connection do |db| db.query_one sql, &.read(JSON::PullParser?).try &.read_raw end - raise Error::NotFound.new unless result - render json: result + render json: result || "[]" end # show the selected asset type