From 373dcd84ed7bccfc38e9bdd960496f207c6f413b Mon Sep 17 00:00:00 2001 From: Gheorghe Popescu Date: Fri, 7 Jun 2024 13:06:11 +0300 Subject: [PATCH] fix properties import (#30) --- lib/aserto/directory/v3/importer.rb | 8 +++++++ spec/integration/directory_spec.rb | 34 +++++++++++++++++++++++++++-- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/lib/aserto/directory/v3/importer.rb b/lib/aserto/directory/v3/importer.rb index 41346d9..7a0a3cf 100644 --- a/lib/aserto/directory/v3/importer.rb +++ b/lib/aserto/directory/v3/importer.rb @@ -33,6 +33,14 @@ module Importer # ) def import(data) data.map! do |value| + if value.dig(:object, :properties) + require "google/protobuf/well_known_types" + + value[:object][:properties] = Google::Protobuf::Struct.from_hash( + value[:object][:properties].transform_keys(&:to_s) + ) + end + Aserto::Directory::Importer::V3::ImportRequest.new(value) end operation = importer.import(data, return_op: true) diff --git a/spec/integration/directory_spec.rb b/spec/integration/directory_spec.rb index 769aef6..9fe1854 100644 --- a/spec/integration/directory_spec.rb +++ b/spec/integration/directory_spec.rb @@ -272,7 +272,8 @@ directory.import( [ - { op_code: 1, object: { id: "import-user", type: "user" } }, + { op_code: 1, object: { id: "import-user", type: "user", properties: { email: "test@email.com" } } }, + { op_code: 1, object: { id: "import-user2", type: "user" } }, { op_code: 1, object: { id: "import-group", type: "group" } }, { op_code: 1, @@ -289,10 +290,39 @@ end.not_to raise_error end + it "imports delete object" do + expect do + directory.import( + [ + { op_code: 2, object: { id: "import-user2", type: "user" } } + + ] + ) + end.not_to raise_error + end + + it "raises error when getting a deleted object after import" do + expect do + directory.get_object( + object_type: "user", + object_id: "import-user2" + ) + end.to raise_error(GRPC::NotFound) + end + it "exports objects" do expect(directory.export(data_type: :objects).length).to eq(2) end + it "gets object properties" do + user = directory.get_object( + object_type: "user", + object_id: "import-user" + ).result + + expect(user.properties.to_h).to eq({ "email" => "test@email.com" }) + end + it "exports relations" do expect(directory.export(data_type: :relations).length).to eq(1) end @@ -332,7 +362,7 @@ end.not_to raise_error end - it "raises error when getting a deleted object after import" do + it "raises error when getting a deleted object after" do expect do directory.get_object( object_type: "user",