From 8acd35c4b747fa728afea1cda79d2592f79e03ea Mon Sep 17 00:00:00 2001 From: acidtib Date: Fri, 21 Feb 2025 17:04:46 -0700 Subject: [PATCH] test: add fetch functionality for nested folders and secrets --- test/secrets/passbolt_adapter.rb | 247 ++++++++++++++++++++++++++----- 1 file changed, 214 insertions(+), 33 deletions(-) diff --git a/test/secrets/passbolt_adapter.rb b/test/secrets/passbolt_adapter.rb index 1bb7c3b4..4a379d2a 100644 --- a/test/secrets/passbolt_adapter.rb +++ b/test/secrets/passbolt_adapter.rb @@ -68,10 +68,20 @@ class PassboltAdapterTest < SecretAdapterTestCase stub_ticks .with("passbolt list folders --filter 'Name == \"my-project\"' --json") - .returns(folder_my_project_json) + .returns(<<~JSON) + [ + { + "id": "dcbe0e39-42d8-42db-9637-8256b9f2f8e3", + "folder_parent_id": "", + "name": "my-project", + "created_timestamp": "2025-02-21T19:52:50Z", + "modified_timestamp": "2025-02-21T19:52:50Z" + } + ] + JSON stub_ticks - .with("passbolt list resources --filter 'Name == \"SECRET1\" || Name == \"FSECRET1\" || Name == \"FSECRET2\"' --folder dcbe0e39-42d8-42db-9637-8256b9f2f8e3 --json") + .with("passbolt list resources --filter '(Name == \"SECRET1\" && FolderParentID == \"dcbe0e39-42d8-42db-9637-8256b9f2f8e3\") || (Name == \"FSECRET1\" && FolderParentID == \"dcbe0e39-42d8-42db-9637-8256b9f2f8e3\") || (Name == \"FSECRET2\" && FolderParentID == \"dcbe0e39-42d8-42db-9637-8256b9f2f8e3\")' --folder dcbe0e39-42d8-42db-9637-8256b9f2f8e3 --json") .returns(<<~JSON) [ { @@ -129,10 +139,20 @@ class PassboltAdapterTest < SecretAdapterTestCase stub_ticks .with("passbolt list folders --filter 'Name == \"my-project\"' --json") - .returns(folder_my_project_json) + .returns(<<~JSON) + [ + { + "id": "dcbe0e39-42d8-42db-9637-8256b9f2f8e3", + "folder_parent_id": "", + "name": "my-project", + "created_timestamp": "2025-02-21T19:52:50Z", + "modified_timestamp": "2025-02-21T19:52:50Z" + } + ] + JSON stub_ticks - .with("passbolt list resources --filter 'Name == \"SECRET1\" || Name == \"FSECRET1\" || Name == \"FSECRET2\"' --folder dcbe0e39-42d8-42db-9637-8256b9f2f8e3 --json") + .with("passbolt list resources --filter '(Name == \"SECRET1\" && FolderParentID == \"dcbe0e39-42d8-42db-9637-8256b9f2f8e3\") || (Name == \"FSECRET1\" && FolderParentID == \"dcbe0e39-42d8-42db-9637-8256b9f2f8e3\") || (Name == \"FSECRET2\" && FolderParentID == \"dcbe0e39-42d8-42db-9637-8256b9f2f8e3\")' --folder dcbe0e39-42d8-42db-9637-8256b9f2f8e3 --json") .returns(<<~JSON) [ { @@ -189,15 +209,28 @@ class PassboltAdapterTest < SecretAdapterTestCase stub_ticks.with("passbolt verify 2> /dev/null", succeed: true) stub_ticks - .with("passbolt list folders --filter 'Name == \"my-project\"' --json") - .returns(folder_my_project_json) + .with("passbolt list folders --filter 'Name == \"my-project\" || Name == \"other-project\"' --json") + .returns(<<~JSON) + [ + { + "id": "dcbe0e39-42d8-42db-9637-8256b9f2f8e3", + "folder_parent_id": "", + "name": "my-project", + "created_timestamp": "2025-02-21T19:52:50Z", + "modified_timestamp": "2025-02-21T19:52:50Z" + }, + { + "id": "14e11dd8-b279-4689-8bd9-fa33ebb527da", + "folder_parent_id": "", + "name": "other-project", + "created_timestamp": "2025-02-21T20:00:29Z", + "modified_timestamp": "2025-02-21T20:00:29Z" + } + ] + JSON stub_ticks - .with("passbolt list folders --filter 'Name == \"other-project\"' --json") - .returns(folder_other_project_json) - - stub_ticks - .with("passbolt list resources --filter 'Name == \"SECRET1\" || Name == \"FSECRET1\" || Name == \"FSECRET2\"' --folder dcbe0e39-42d8-42db-9637-8256b9f2f8e3 --folder 14e11dd8-b279-4689-8bd9-fa33ebb527da --json") + .with("passbolt list resources --filter '(Name == \"SECRET1\" && FolderParentID == \"dcbe0e39-42d8-42db-9637-8256b9f2f8e3\") || (Name == \"FSECRET1\" && FolderParentID == \"dcbe0e39-42d8-42db-9637-8256b9f2f8e3\") || (Name == \"FSECRET2\" && FolderParentID == \"14e11dd8-b279-4689-8bd9-fa33ebb527da\")' --folder dcbe0e39-42d8-42db-9637-8256b9f2f8e3 --folder 14e11dd8-b279-4689-8bd9-fa33ebb527da --json") .returns(<<~JSON) [ { @@ -249,6 +282,176 @@ class PassboltAdapterTest < SecretAdapterTestCase assert_equal expected_json, json end + test "fetch from nested folder" do + stub_ticks_with("passbolt --version 2> /dev/null", succeed: true) + stub_ticks.with("passbolt verify 2> /dev/null", succeed: true) + + stub_ticks + .with("passbolt list folders --filter 'Name == \"my-project\"' --json") + .returns(<<~JSON) + [ + { + "id": "dcbe0e39-42d8-42db-9637-8256b9f2f8e3", + "folder_parent_id": "", + "name": "my-project", + "created_timestamp": "2025-02-21T19:52:50Z", + "modified_timestamp": "2025-02-21T19:52:50Z" + } + ] + JSON + + stub_ticks + .with("passbolt list folders --filter 'Name == \"subfolder\" && FolderParentID == \"dcbe0e39-42d8-42db-9637-8256b9f2f8e3\"' --json") + .returns(<<~JSON) + [ + { + "id": "6a3f21fc-aa40-4ba9-852c-7477fdd0310d", + "folder_parent_id": "dcbe0e39-42d8-42db-9637-8256b9f2f8e3", + "name": "subfolder", + "created_timestamp": "2025-02-21T19:52:50Z", + "modified_timestamp": "2025-02-21T19:52:50Z" + } + ] + JSON + + stub_ticks + .with("passbolt list resources --filter '(Name == \"SECRET1\" && FolderParentID == \"6a3f21fc-aa40-4ba9-852c-7477fdd0310d\") || (Name == \"FSECRET1\" && FolderParentID == \"6a3f21fc-aa40-4ba9-852c-7477fdd0310d\") || (Name == \"FSECRET2\" && FolderParentID == \"6a3f21fc-aa40-4ba9-852c-7477fdd0310d\")' --folder dcbe0e39-42d8-42db-9637-8256b9f2f8e3 --folder 6a3f21fc-aa40-4ba9-852c-7477fdd0310d --json") + .returns(<<~JSON) + [ + { + "id": "4c116996-f6d0-4342-9572-0d676f75b3ac", + "folder_parent_id": "6a3f21fc-aa40-4ba9-852c-7477fdd0310d", + "name": "FSECRET1", + "username": "", + "uri": "", + "password": "fsecret1", + "description": "", + "created_timestamp": "2025-02-21T06:04:29Z", + "modified_timestamp": "2025-02-21T06:04:29Z" + }, + { + "id": "62949b26-4957-43fe-9523-294d66861499", + "folder_parent_id": "6a3f21fc-aa40-4ba9-852c-7477fdd0310d", + "name": "FSECRET2", + "username": "", + "uri": "", + "password": "fsecret2", + "description": "", + "created_timestamp": "2025-02-21T06:04:34Z", + "modified_timestamp": "2025-02-21T06:04:34Z" + }, + { + "id": "dd32963c-0db5-4303-a6fc-22c5229dabef", + "folder_parent_id": "6a3f21fc-aa40-4ba9-852c-7477fdd0310d", + "name": "SECRET1", + "username": "", + "uri": "", + "password": "secret1", + "description": "", + "created_timestamp": "2025-02-21T06:04:23Z", + "modified_timestamp": "2025-02-21T06:04:23Z" + } + ] + JSON + + json = JSON.parse( + shellunescape run_command("fetch", "--from", "my-project/subfolder", "SECRET1", "FSECRET1", "FSECRET2") + ) + + expected_json = { + "SECRET1"=>"secret1", + "FSECRET1"=>"fsecret1", + "FSECRET2"=>"fsecret2" + } + + assert_equal expected_json, json + end + + test "fetch from nested folder in secret" do + stub_ticks_with("passbolt --version 2> /dev/null", succeed: true) + stub_ticks.with("passbolt verify 2> /dev/null", succeed: true) + + stub_ticks + .with("passbolt list folders --filter 'Name == \"my-project\"' --json") + .returns(<<~JSON) + [ + { + "id": "dcbe0e39-42d8-42db-9637-8256b9f2f8e3", + "folder_parent_id": "", + "name": "my-project", + "created_timestamp": "2025-02-21T19:52:50Z", + "modified_timestamp": "2025-02-21T19:52:50Z" + } + ] + JSON + + stub_ticks + .with("passbolt list folders --filter 'Name == \"subfolder\" && FolderParentID == \"dcbe0e39-42d8-42db-9637-8256b9f2f8e3\"' --json") + .returns(<<~JSON) + [ + { + "id": "6a3f21fc-aa40-4ba9-852c-7477fdd0310d", + "folder_parent_id": "dcbe0e39-42d8-42db-9637-8256b9f2f8e3", + "name": "subfolder", + "created_timestamp": "2025-02-21T19:52:50Z", + "modified_timestamp": "2025-02-21T19:52:50Z" + } + ] + JSON + + stub_ticks + .with("passbolt list resources --filter '(Name == \"SECRET1\" && FolderParentID == \"6a3f21fc-aa40-4ba9-852c-7477fdd0310d\") || (Name == \"FSECRET1\" && FolderParentID == \"6a3f21fc-aa40-4ba9-852c-7477fdd0310d\") || (Name == \"FSECRET2\" && FolderParentID == \"6a3f21fc-aa40-4ba9-852c-7477fdd0310d\")' --folder dcbe0e39-42d8-42db-9637-8256b9f2f8e3 --folder 6a3f21fc-aa40-4ba9-852c-7477fdd0310d --json") + .returns(<<~JSON) + [ + { + "id": "4c116996-f6d0-4342-9572-0d676f75b3ac", + "folder_parent_id": "6a3f21fc-aa40-4ba9-852c-7477fdd0310d", + "name": "FSECRET1", + "username": "", + "uri": "", + "password": "fsecret1", + "description": "", + "created_timestamp": "2025-02-21T06:04:29Z", + "modified_timestamp": "2025-02-21T06:04:29Z" + }, + { + "id": "62949b26-4957-43fe-9523-294d66861499", + "folder_parent_id": "6a3f21fc-aa40-4ba9-852c-7477fdd0310d", + "name": "FSECRET2", + "username": "", + "uri": "", + "password": "fsecret2", + "description": "", + "created_timestamp": "2025-02-21T06:04:34Z", + "modified_timestamp": "2025-02-21T06:04:34Z" + }, + { + "id": "dd32963c-0db5-4303-a6fc-22c5229dabef", + "folder_parent_id": "6a3f21fc-aa40-4ba9-852c-7477fdd0310d", + "name": "SECRET1", + "username": "", + "uri": "", + "password": "secret1", + "description": "", + "created_timestamp": "2025-02-21T06:04:23Z", + "modified_timestamp": "2025-02-21T06:04:23Z" + } + ] + JSON + + json = JSON.parse( + shellunescape run_command("fetch", "my-project/subfolder/SECRET1", "my-project/subfolder/FSECRET1", "my-project/subfolder/FSECRET2") + ) + + expected_json = { + "SECRET1"=>"secret1", + "FSECRET1"=>"fsecret1", + "FSECRET2"=>"fsecret2" + } + + assert_equal expected_json, json + end + test "fetch without CLI installed" do stub_ticks_with("passbolt --version 2> /dev/null", succeed: false) @@ -268,26 +471,4 @@ class PassboltAdapterTest < SecretAdapterTestCase "--adapter", "passbolt" ] end end - - def folder_my_project_json - <<~JSON - [ - { - "id": "dcbe0e39-42d8-42db-9637-8256b9f2f8e3", - "name": "my-project" - } - ] - JSON - end - - def folder_other_project_json - <<~JSON - [ - { - "id": "14e11dd8-b279-4689-8bd9-fa33ebb527da", - "name": "other-project" - } - ] - JSON - end end \ No newline at end of file