From fba96978f46ffdb33d6daf957a4a4d1690d8e35f Mon Sep 17 00:00:00 2001 From: VeljkoMaksimovic Date: Wed, 30 Apr 2025 15:09:15 +0200 Subject: [PATCH 1/3] Add tests for user_has_projects? --- guard/test/guard/api/project_test.exs | 45 +++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/guard/test/guard/api/project_test.exs b/guard/test/guard/api/project_test.exs index 15f1988d8..7e6b7d6df 100644 --- a/guard/test/guard/api/project_test.exs +++ b/guard/test/guard/api/project_test.exs @@ -43,4 +43,49 @@ defmodule Guard.Api.ProjectTest do end end end + + describe "user_has_any_project?/1" do + test "returns true when user has at least one project" do + user_id = "user_with_projects" + + with_mock InternalApi.Projecthub.ProjectService.Stub, + list: fn _channel, _req, _opts -> + {:ok, + %{ + metadata: %{status: %{code: 0}}, + projects: [ + %{metadata: %{id: 1, org_id: "org_id", owner_id: user_id}} + ] + }} + end do + assert Project.user_has_any_project?(user_id) == true + end + end + + test "returns false when user has no projects" do + user_id = "user_without_projects" + + with_mock InternalApi.Projecthub.ProjectService.Stub, + list: fn _channel, _req, _opts -> + {:ok, + %{ + metadata: %{status: %{code: 0}}, + projects: [] + }} + end do + assert Project.user_has_any_project?(user_id) == false + end + end + + test "returns false when there is an error retrieving projects" do + user_id = "user_with_error" + + with_mock InternalApi.Projecthub.ProjectService.Stub, + list: fn _channel, _req, _opts -> + {:error, "Failed to retrieve projects"} + end do + assert Project.user_has_any_project?(user_id) == false + end + end + end end From 9589fd141e86b68f34537e25e93a8933b0e6e19e Mon Sep 17 00:00:00 2001 From: VeljkoMaksimovic Date: Wed, 30 Apr 2025 15:09:47 +0200 Subject: [PATCH 2/3] If project api crashes, dont interpret that as user not having projects --- guard/lib/guard/api/project.ex | 3 --- 1 file changed, 3 deletions(-) diff --git a/guard/lib/guard/api/project.ex b/guard/lib/guard/api/project.ex index 5fe969c1b..586f88578 100644 --- a/guard/lib/guard/api/project.ex +++ b/guard/lib/guard/api/project.ex @@ -51,9 +51,6 @@ defmodule Guard.Api.Project do case InternalApi.Projecthub.ProjectService.Stub.list(channel, req, timeout: 30_000) do {:ok, response} when response.metadata.status.code == 0 -> response.projects |> length > 0 - - _ -> - false end end From 1cd0cfb852399228d84a8ed6494228011354ac12 Mon Sep 17 00:00:00 2001 From: VeljkoMaksimovic Date: Tue, 6 May 2025 12:38:02 +0200 Subject: [PATCH 3/3] Fix listing projects by owner --- guard/lib/guard/api/project.ex | 4 ++-- guard/test/guard/api/project_test.exs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/guard/lib/guard/api/project.ex b/guard/lib/guard/api/project.ex index 586f88578..7a0653387 100644 --- a/guard/lib/guard/api/project.ex +++ b/guard/lib/guard/api/project.ex @@ -49,8 +49,8 @@ defmodule Guard.Api.Project do req = build_list_by_owner_id_request(user_id, 1) case InternalApi.Projecthub.ProjectService.Stub.list(channel, req, timeout: 30_000) do - {:ok, response} when response.metadata.status.code == 0 -> - response.projects |> length > 0 + {:ok, response} when response.metadata.status.code == 0 -> length(response.projects) > 0 + _ -> true end end diff --git a/guard/test/guard/api/project_test.exs b/guard/test/guard/api/project_test.exs index 7e6b7d6df..0b218c8d9 100644 --- a/guard/test/guard/api/project_test.exs +++ b/guard/test/guard/api/project_test.exs @@ -77,14 +77,14 @@ defmodule Guard.Api.ProjectTest do end end - test "returns false when there is an error retrieving projects" do + test "If communication with projecthub fails, we consider that user does own projects" do user_id = "user_with_error" with_mock InternalApi.Projecthub.ProjectService.Stub, list: fn _channel, _req, _opts -> {:error, "Failed to retrieve projects"} end do - assert Project.user_has_any_project?(user_id) == false + assert Project.user_has_any_project?(user_id) end end end